From 133eeef68e3603d3e562e450fdcea4da64bb331d Mon Sep 17 00:00:00 2001 From: Pawlo Date: Sat, 19 Oct 2019 13:44:45 +0300 Subject: [PATCH] test --- .gitignore | 13 + .../buildOutputCleanup.lock | Bin 17 -> 17 bytes .gradle/buildOutputCleanup/cache.properties | 4 +- .gradle/buildOutputCleanup/outputFiles.bin | Bin 25787 -> 93599 bytes .idea/caches/build_file_checksums.ser | Bin 591 -> 751 bytes .idea/codeStyles/Project.xml | 112 +++++++ .idea/compiler.xml | 22 ++ .idea/dictionaries/gokul_4192.xml | 7 + .idea/encodings.xml | 4 +- .idea/gradle.xml | 7 +- .idea/inspectionProfiles/Project_Default.xml | 8 + ...dx_activity_activity_1_0_0_alpha08_aar.xml | 12 - ...x_annotation_annotation_1_0_0_rc01_jar.xml | 11 - ...x_annotation_annotation_1_1_0_rc01_jar.xml | 11 - ...idx_appcompat_appcompat_1_0_0_rc01_aar.xml | 15 - ..._appcompat_appcompat_1_1_0_alpha05_aar.xml | 15 - ..._appcompat_resources_1_1_0_alpha05_aar.xml | 12 - ...x_arch_core_core_common_2_0_0_rc01_jar.xml | 11 - ...arch_core_core_common_2_1_0_beta01_jar.xml | 11 - ...roidx_arch_core_core_runtime_2_0_0_aar.xml | 4 +- ..._arch_core_core_runtime_2_0_0_rc01_aar.xml | 12 - ...roidx_arch_core_core_testing_2_0_0_aar.xml | 12 - ...inflater_asynclayoutinflater_1_0_0_aar.xml | 4 +- ...ter_asynclayoutinflater_1_0_0_rc01_aar.xml | 12 - ...__androidx_cardview_cardview_1_0_0_aar.xml | 4 +- ...x_collection_collection_1_0_0_rc01_jar.xml | 11 - ...x_collection_collection_1_1_0_rc01_jar.xml | 11 - ...nt_concurrent_futures_1_0_0_beta01_jar.xml | 11 - ...ayout_coordinatorlayout_1_0_0_rc01_aar.xml | 15 - ...ut_coordinatorlayout_1_1_0_alpha01_aar.xml | 6 +- ...dle__androidx_core_core_1_0_0_rc01_aar.xml | 15 - ...e__androidx_core_core_1_1_0_beta01_aar.xml | 15 - ..._cursoradapter_cursoradapter_1_0_0_aar.xml | 4 +- ...oradapter_cursoradapter_1_0_0_rc01_aar.xml | 12 - ...droidx_customview_customview_1_0_0_aar.xml | 4 +- ...x_customview_customview_1_0_0_rc01_aar.xml | 12 - ...dx_documentfile_documentfile_1_0_0_aar.xml | 4 +- ...cumentfile_documentfile_1_0_0_rc01_aar.xml | 12 - ...dx_drawerlayout_drawerlayout_1_0_0_aar.xml | 6 +- ...awerlayout_drawerlayout_1_0_0_rc01_aar.xml | 15 - ...roidx_fragment_fragment_1_0_0_rc01_aar.xml | 15 - ...dx_fragment_fragment_1_1_0_alpha08_aar.xml | 15 - ...dx_interpolator_interpolator_1_0_0_aar.xml | 4 +- ...terpolator_interpolator_1_0_0_rc01_aar.xml | 12 - ...egacy_legacy_support_core_ui_1_0_0_aar.xml | 4 +- ..._legacy_support_core_ui_1_0_0_rc01_aar.xml | 12 - ...cy_legacy_support_core_utils_1_0_0_aar.xml | 4 +- ...gacy_support_core_utils_1_0_0_rc01_aar.xml | 12 - ...ecycle_lifecycle_common_2_0_0_rc01_jar.xml | 11 - ...cle_lifecycle_common_2_2_0_alpha01_jar.xml | 11 - ...lifecycle_lifecycle_livedata_2_0_0_aar.xml | 4 +- ...ycle_lifecycle_livedata_core_2_0_0_aar.xml | 4 +- ...lifecycle_livedata_core_2_0_0_rc01_aar.xml | 12 - ...cycle_lifecycle_runtime_2_0_0_rc01_aar.xml | 12 - ...le_lifecycle_runtime_2_2_0_alpha01_aar.xml | 12 - ...cle_lifecycle_viewmodel_2_0_0_rc01_aar.xml | 12 - ..._lifecycle_viewmodel_2_2_0_alpha01_aar.xml | 12 - ...adle__androidx_loader_loader_1_0_0_aar.xml | 4 +- ..._androidx_loader_loader_1_0_0_rc01_aar.xml | 12 - ...anager_localbroadcastmanager_1_0_0_aar.xml | 4 +- ...r_localbroadcastmanager_1_0_0_rc01_aar.xml | 12 - ...Gradle__androidx_print_print_1_0_0_aar.xml | 6 +- ...e__androidx_print_print_1_0_0_rc01_aar.xml | 15 - ...lerview_recyclerview_1_1_0_alpha05_aar.xml | 15 - ...savedstate_savedstate_1_0_0_beta01_aar.xml | 12 - ...panelayout_slidingpanelayout_1_0_0_aar.xml | 4 +- ...ayout_slidingpanelayout_1_0_0_rc01_aar.xml | 12 - ...eshlayout_swiperefreshlayout_1_0_0_aar.xml | 6 +- ...yout_swiperefreshlayout_1_0_0_rc01_aar.xml | 15 - .../Gradle__androidx_test_core_1_0_0_aar.xml | 12 - ...dle__androidx_test_ext_junit_1_0_0_aar.xml | 12 - ...radle__androidx_test_monitor_1_1_0_aar.xml | 12 - .../Gradle__androidx_test_rules_1_1_0_aar.xml | 12 - ...Gradle__androidx_test_runner_1_1_0_aar.xml | 12 - ...droidx_transition_transition_1_0_1_aar.xml | 6 +- ...drawable_vectordrawable_1_0_0_rc01_aar.xml | 12 - ...awable_vectordrawable_1_1_0_beta01_aar.xml | 12 - ...vectordrawable_animated_1_0_0_rc01_aar.xml | 12 - ...ctordrawable_animated_1_1_0_beta01_aar.xml | 12 - ...ble_versionedparcelable_1_0_0_rc01_aar.xml | 12 - ...e_versionedparcelable_1_1_0_beta01_aar.xml | 12 - ...iewpager2_viewpager2_1_0_0_alpha04_aar.xml | 15 - ...androidx_viewpager_viewpager_1_0_0_aar.xml | 4 +- ...idx_viewpager_viewpager_1_0_0_rc01_aar.xml | 12 - ...id_material_material_1_1_0_alpha07_aar.xml | 15 - ...e__com_google_code_gson_gson_2_8_2_jar.xml | 11 - ..._google_guava_listenablefuture_1_0_jar.xml | 11 - ...t2_kotlin_coroutines_adapter_0_9_2_jar.xml | 11 - ...tokotlin2_mockito_kotlin_2_0_0_RC3_jar.xml | 11 - ...okhttp3_logging_interceptor_3_10_0_jar.xml | 11 - ...com_squareup_okhttp3_okhttp_3_10_0_jar.xml | 11 - ...dle__com_squareup_okio_okio_1_14_0_jar.xml | 11 - ...up_retrofit2_adapter_rxjava2_2_4_0_jar.xml | 11 - ...eup_retrofit2_converter_gson_2_4_0_jar.xml | 11 - ..._retrofit2_converter_scalars_2_4_0_jar.xml | 11 - ..._squareup_retrofit2_retrofit_2_4_0_jar.xml | 11 - ..._io_reactivex_rxjava2_rxjava_2_0_0_jar.xml | 11 - ...le__net_bytebuddy_byte_buddy_1_9_0_jar.xml | 11 - ...t_bytebuddy_byte_buddy_agent_1_9_0_jar.xml | 11 - ..._android_extensions_runtime_1_3_31_jar.xml | 11 - ...brains_kotlin_kotlin_stdlib_1_3_31_jar.xml | 11 - ...kotlin_kotlin_stdlib_common_1_3_31_jar.xml | 11 - ...s_kotlin_kotlin_stdlib_jdk7_1_3_31_jar.xml | 11 - ...tlinx_atomicfu_common_0_11_7_eap13_jar.xml | 11 - ...x_kotlinx_coroutines_android_1_2_1_jar.xml | 11 - ...tlinx_coroutines_core_0_26_1_eap13_jar.xml | 11 - ...linx_kotlinx_coroutines_core_1_2_1_jar.xml | 11 - ...linx_kotlinx_coroutines_core_1_3_1_jar.xml | 11 - ...oroutines_core_common_0_26_1_eap13_jar.xml | 11 - ...inx_kotlinx_coroutines_debug_1_3_1_jar.xml | 11 - ...linx_kotlinx_coroutines_test_1_3_1_jar.xml | 11 - ...ein_di_kodein_di_core_common_5_1_1_jar.xml | 11 - ...kodein_di_kodein_di_core_jvm_5_1_1_jar.xml | 11 - ..._kodein_di_framework_android_5_1_1_aar.xml | 12 - ...ein_di_kodein_di_generic_jvm_5_1_1_jar.xml | 11 - ...e__org_mockito_mockito_core_2_23_0_jar.xml | 11 - ...radle__org_objenesis_objenesis_2_6_jar.xml | 11 - ...tivestreams_reactive_streams_1_0_0_jar.xml | 11 - .idea/misc.xml | 61 +++- .idea/modules.xml | 14 +- .idea/vcs.xml | 2 +- LICENSE | 21 -- README.md | 6 +- app/.gitignore | 1 + app/app.iml | 98 +++++- app/build.gradle | 44 +-- app/proguard-rules.pro | 8 +- .../tuple/lily/ExampleInstrumentedTest.java | 26 ++ app/src/main/AndroidManifest.xml | 29 +- .../main/java/me/tuple/lily/example/App.kt | 16 + .../drawable-v24/ic_launcher_foreground.xml | 34 --- .../res/drawable/ic_launcher_background.xml | 74 ----- app/src/main/res/layout/activity_main.xml | 17 ++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 - app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 2963 -> 3418 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 4905 -> 4208 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2060 -> 2206 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 2783 -> 2555 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4490 -> 4842 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 6895 -> 6114 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 6387 -> 7718 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 10413 -> 10056 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 9128 -> 10486 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 15132 -> 14696 bytes app/src/main/res/values/colors.xml | 6 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/styles.xml | 8 + .../java/me/tuple/lily}/ExampleUnitTest.java | 4 +- build.gradle | 54 ++-- buildSrc/.gitignore | 2 + buildSrc/build.gradle.kts | 6 + buildSrc/src/main/kotlin/Libs.kt | 92 ++++++ buildSrc/src/main/kotlin/Versions.kt | 55 ++++ config/versions.gradle | 134 --------- core.iml | 21 -- gradle/wrapper/gradle-wrapper.jar | Bin 55190 -> 53636 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 72 ++--- gradlew.bat | 14 +- {remote => lilyadapter}/.gitignore | 0 lilyadapter/build.gradle | 39 +++ {retrofit => lilyadapter}/proguard-rules.pro | 8 +- .../tuple/lily}/ExampleInstrumentedTest.java | 8 +- lilyadapter/src/main/AndroidManifest.xml | 10 + .../me/tuple/lily/adapter/BaseRVAdapter.kt | 88 ++++++ .../tuple/lily/adapter/CustomPagerAdapter.kt | 83 ++++++ .../java/me/tuple/lily/adapter/DataHolder.kt | 107 +++++++ .../me/tuple/lily/adapter/ListDataHolder.kt | 42 +++ lilyadapter/src/main/res/values/strings.xml | 3 + .../java/me/tuple/lily/ExampleUnitTest.java | 17 ++ {retrofit => lilycore}/.gitignore | 0 lilycore/build.gradle | 38 +++ {remote => lilycore}/proguard-rules.pro | 8 +- lilycore/src/main/AndroidManifest.xml | 10 + .../java/me/tuple/lily/core/ActivityExt.kt | 36 +++ .../main/java/me/tuple/lily/core/ApiExt.kt | 57 ++++ .../java/me/tuple/lily/core/CollectionExt.kt | 18 ++ .../java/me/tuple/lily/core/ContextExt.kt | 230 +++++++++++++++ .../main/java/me/tuple/lily/core/CursorExt.kt | 64 ++++ .../java/me/tuple/lily/core/SyntaxWrappers.kt | 28 ++ .../main/java/me/tuple/lily/core/ThreadExt.kt | 122 ++++++++ .../main/java/me/tuple/lily/core/ViewExt.kt | 113 +++++++ .../java/me/tuple/lily/utils/FontCache.kt | 29 ++ lilycore/src/main/res/values/strings.xml | 3 + .../java/me/tuple/lily/ExampleUnitTest.java | 17 ++ lilypref/.gitignore | 1 + lilypref/build.gradle | 39 +++ lilypref/proguard-rules.pro | 25 ++ lilypref/src/main/AndroidManifest.xml | 10 + .../main/java/me/tuple/lily/utils/Prefs.kt | 201 +++++++++++++ lilypref/src/main/res/values/strings.xml | 3 + .../java/me/tuple/lily/ExampleUnitTest.java | 17 ++ lilytoast/.gitignore | 1 + lilytoast/build.gradle | 42 +++ lilytoast/proguard-rules.pro | 25 ++ .../tuple/lily/ExampleInstrumentedTest.java | 26 ++ lilytoast/src/main/AndroidManifest.xml | 10 + .../main/java/me/tuple/lily/toast/Snacky.kt | 279 ++++++++++++++++++ .../main/java/me/tuple/lily/toast/Toasty.kt | 195 ++++++++++++ .../main/res/anim/slide_in_from_bottom.xml | 8 + .../src/main/res/anim/slide_in_from_top.xml | 8 + .../src/main/res/anim/slide_out_to_bottom.xml | 9 + .../src/main/res/anim/slide_out_to_top.xml | 9 + .../src/main/res/drawable/ic_alert_circle.png | Bin 0 -> 1592 bytes .../src/main/res/drawable/ic_check_circle.png | Bin 0 -> 1982 bytes .../src/main/res/layout/snacky_layout.xml | 68 +++++ .../src/main/res/layout/toasty_layout.xml | 45 +++ lilytoast/src/main/res/values/attrs.xml | 12 + lilytoast/src/main/res/values/dimens.xml | 5 + lilytoast/src/main/res/values/strings.xml | 4 + .../java/me/tuple/lily/ExampleUnitTest.java | 17 ++ local.properties | 2 +- remote/build.gradle | 75 ----- remote/remote.iml | 226 -------------- remote/retrofit.iml | 206 ------------- remote/src/main/AndroidManifest.xml | 2 - .../java/com/vrgsoft/remote/BaseRepository.kt | 50 ---- .../java/com/vrgsoft/remote/Extentions.kt | 20 -- .../com/vrgsoft/remote/error/BaseError.kt | 3 - .../vrgsoft/remote/error/ConnectionError.kt | 3 - .../com/vrgsoft/remote/error/NetworkError.kt | 6 - .../com/vrgsoft/remote/result/BaseResult.kt | 3 - .../com/vrgsoft/remote/result/ErrorResult.kt | 7 - .../vrgsoft/remote/result/SuccessResult.kt | 5 - remote/src/main/res/values/strings.xml | 3 - .../com/vrgsoft/remote/BaseRepositoryTest.kt | 154 ---------- .../test/java/com/vrgsoft/remote/TestApi.kt | 8 - .../java/com/vrgsoft/remote/TestRepository.kt | 3 - .../org.mockito.plugins.MockMaker | 1 - retrofit/build.gradle | 75 ----- retrofit/retrofit.iml | 208 ------------- retrofit/src/main/AndroidManifest.xml | 2 - .../com/vrgsoft/retrofit/RetrofitModule.kt | 60 ---- .../java/com/vrgsoft/retrofit/common/Auth.kt | 8 - .../retrofit/common/AuthInterceptor.kt | 14 - .../retrofit/common/HeaderInterceptor.kt | 12 - .../vrgsoft/retrofit/common/RetrofitConfig.kt | 6 - retrofit/src/main/res/values/strings.xml | 3 - settings.gradle | 4 +- 240 files changed, 2964 insertions(+), 2686 deletions(-) create mode 100644 .gitignore create mode 100644 .idea/compiler.xml create mode 100644 .idea/dictionaries/gokul_4192.xml create mode 100644 .idea/inspectionProfiles/Project_Default.xml delete mode 100644 .idea/libraries/Gradle__androidx_activity_activity_1_0_0_alpha08_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_annotation_annotation_1_0_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_annotation_annotation_1_1_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_appcompat_appcompat_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_appcompat_appcompat_1_1_0_alpha05_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_appcompat_appcompat_resources_1_1_0_alpha05_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_arch_core_core_common_2_0_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_arch_core_core_common_2_1_0_beta01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_arch_core_core_runtime_2_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_arch_core_core_testing_2_0_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_asynclayoutinflater_asynclayoutinflater_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_collection_collection_1_0_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_collection_collection_1_1_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_concurrent_concurrent_futures_1_0_0_beta01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_coordinatorlayout_coordinatorlayout_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_core_core_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_core_core_1_1_0_beta01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_cursoradapter_cursoradapter_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_customview_customview_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_documentfile_documentfile_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_drawerlayout_drawerlayout_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_fragment_fragment_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_fragment_fragment_1_1_0_alpha08_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_interpolator_interpolator_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_legacy_legacy_support_core_ui_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_legacy_legacy_support_core_utils_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_0_0_rc01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_common_2_2_0_alpha01_jar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_livedata_core_2_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_runtime_2_2_0_alpha01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_lifecycle_lifecycle_viewmodel_2_2_0_alpha01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_loader_loader_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_localbroadcastmanager_localbroadcastmanager_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_print_print_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_recyclerview_recyclerview_1_1_0_alpha05_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_savedstate_savedstate_1_0_0_beta01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_slidingpanelayout_slidingpanelayout_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_swiperefreshlayout_swiperefreshlayout_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_test_core_1_0_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_test_ext_junit_1_0_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_test_monitor_1_1_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_test_rules_1_1_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_test_runner_1_1_0_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_1_1_0_beta01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_vectordrawable_vectordrawable_animated_1_1_0_beta01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_versionedparcelable_versionedparcelable_1_1_0_beta01_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_viewpager2_viewpager2_1_0_0_alpha04_aar.xml delete mode 100644 .idea/libraries/Gradle__androidx_viewpager_viewpager_1_0_0_rc01_aar.xml delete mode 100644 .idea/libraries/Gradle__com_google_android_material_material_1_1_0_alpha07_aar.xml delete mode 100644 .idea/libraries/Gradle__com_google_code_gson_gson_2_8_2_jar.xml delete mode 100644 .idea/libraries/Gradle__com_google_guava_listenablefuture_1_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_jakewharton_retrofit_retrofit2_kotlin_coroutines_adapter_0_9_2_jar.xml delete mode 100644 .idea/libraries/Gradle__com_nhaarman_mockitokotlin2_mockito_kotlin_2_0_0_RC3_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_okhttp3_logging_interceptor_3_10_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_okhttp3_okhttp_3_10_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_okio_okio_1_14_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_retrofit2_adapter_rxjava2_2_4_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_retrofit2_converter_gson_2_4_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_retrofit2_converter_scalars_2_4_0_jar.xml delete mode 100644 .idea/libraries/Gradle__com_squareup_retrofit2_retrofit_2_4_0_jar.xml delete mode 100644 .idea/libraries/Gradle__io_reactivex_rxjava2_rxjava_2_0_0_jar.xml delete mode 100644 .idea/libraries/Gradle__net_bytebuddy_byte_buddy_1_9_0_jar.xml delete mode 100644 .idea/libraries/Gradle__net_bytebuddy_byte_buddy_agent_1_9_0_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_android_extensions_runtime_1_3_31_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_1_3_31_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_common_1_3_31_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlin_kotlin_stdlib_jdk7_1_3_31_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_atomicfu_common_0_11_7_eap13_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_android_1_2_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_0_26_1_eap13_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_1_2_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_1_3_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_core_common_0_26_1_eap13_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_debug_1_3_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_jetbrains_kotlinx_kotlinx_coroutines_test_1_3_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_kodein_di_kodein_di_core_common_5_1_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_kodein_di_kodein_di_core_jvm_5_1_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_kodein_di_kodein_di_framework_android_5_1_1_aar.xml delete mode 100644 .idea/libraries/Gradle__org_kodein_di_kodein_di_generic_jvm_5_1_1_jar.xml delete mode 100644 .idea/libraries/Gradle__org_mockito_mockito_core_2_23_0_jar.xml delete mode 100644 .idea/libraries/Gradle__org_objenesis_objenesis_2_6_jar.xml delete mode 100644 .idea/libraries/Gradle__org_reactivestreams_reactive_streams_1_0_0_jar.xml delete mode 100644 LICENSE create mode 100644 app/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java create mode 100644 app/src/main/java/me/tuple/lily/example/App.kt delete mode 100644 app/src/main/res/drawable-v24/ic_launcher_foreground.xml delete mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/layout/activity_main.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml rename {retrofit/src/test/java/com/vrgsoft/retrofit => app/src/test/java/me/tuple/lily}/ExampleUnitTest.java (79%) create mode 100644 buildSrc/.gitignore create mode 100644 buildSrc/build.gradle.kts create mode 100644 buildSrc/src/main/kotlin/Libs.kt create mode 100644 buildSrc/src/main/kotlin/Versions.kt delete mode 100644 config/versions.gradle delete mode 100644 core.iml rename {remote => lilyadapter}/.gitignore (100%) create mode 100644 lilyadapter/build.gradle rename {retrofit => lilyadapter}/proguard-rules.pro (70%) rename {retrofit/src/androidTest/java/com/vrgsoft/retrofit => lilyadapter/src/androidTest/java/me/tuple/lily}/ExampleInstrumentedTest.java (71%) create mode 100644 lilyadapter/src/main/AndroidManifest.xml create mode 100644 lilyadapter/src/main/java/me/tuple/lily/adapter/BaseRVAdapter.kt create mode 100644 lilyadapter/src/main/java/me/tuple/lily/adapter/CustomPagerAdapter.kt create mode 100644 lilyadapter/src/main/java/me/tuple/lily/adapter/DataHolder.kt create mode 100644 lilyadapter/src/main/java/me/tuple/lily/adapter/ListDataHolder.kt create mode 100644 lilyadapter/src/main/res/values/strings.xml create mode 100644 lilyadapter/src/test/java/me/tuple/lily/ExampleUnitTest.java rename {retrofit => lilycore}/.gitignore (100%) create mode 100644 lilycore/build.gradle rename {remote => lilycore}/proguard-rules.pro (70%) create mode 100644 lilycore/src/main/AndroidManifest.xml create mode 100644 lilycore/src/main/java/me/tuple/lily/core/ActivityExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/ApiExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/CollectionExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/ContextExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/CursorExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/SyntaxWrappers.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/ThreadExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/core/ViewExt.kt create mode 100644 lilycore/src/main/java/me/tuple/lily/utils/FontCache.kt create mode 100644 lilycore/src/main/res/values/strings.xml create mode 100644 lilycore/src/test/java/me/tuple/lily/ExampleUnitTest.java create mode 100644 lilypref/.gitignore create mode 100644 lilypref/build.gradle create mode 100644 lilypref/proguard-rules.pro create mode 100644 lilypref/src/main/AndroidManifest.xml create mode 100644 lilypref/src/main/java/me/tuple/lily/utils/Prefs.kt create mode 100644 lilypref/src/main/res/values/strings.xml create mode 100644 lilypref/src/test/java/me/tuple/lily/ExampleUnitTest.java create mode 100644 lilytoast/.gitignore create mode 100644 lilytoast/build.gradle create mode 100644 lilytoast/proguard-rules.pro create mode 100644 lilytoast/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java create mode 100644 lilytoast/src/main/AndroidManifest.xml create mode 100644 lilytoast/src/main/java/me/tuple/lily/toast/Snacky.kt create mode 100644 lilytoast/src/main/java/me/tuple/lily/toast/Toasty.kt create mode 100644 lilytoast/src/main/res/anim/slide_in_from_bottom.xml create mode 100644 lilytoast/src/main/res/anim/slide_in_from_top.xml create mode 100644 lilytoast/src/main/res/anim/slide_out_to_bottom.xml create mode 100644 lilytoast/src/main/res/anim/slide_out_to_top.xml create mode 100644 lilytoast/src/main/res/drawable/ic_alert_circle.png create mode 100644 lilytoast/src/main/res/drawable/ic_check_circle.png create mode 100644 lilytoast/src/main/res/layout/snacky_layout.xml create mode 100644 lilytoast/src/main/res/layout/toasty_layout.xml create mode 100644 lilytoast/src/main/res/values/attrs.xml create mode 100644 lilytoast/src/main/res/values/dimens.xml create mode 100644 lilytoast/src/main/res/values/strings.xml create mode 100644 lilytoast/src/test/java/me/tuple/lily/ExampleUnitTest.java delete mode 100644 remote/build.gradle delete mode 100644 remote/remote.iml delete mode 100644 remote/retrofit.iml delete mode 100644 remote/src/main/AndroidManifest.xml delete mode 100644 remote/src/main/java/com/vrgsoft/remote/BaseRepository.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/Extentions.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/error/BaseError.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/error/ConnectionError.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/error/NetworkError.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/result/BaseResult.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/result/ErrorResult.kt delete mode 100644 remote/src/main/java/com/vrgsoft/remote/result/SuccessResult.kt delete mode 100644 remote/src/main/res/values/strings.xml delete mode 100644 remote/src/test/java/com/vrgsoft/remote/BaseRepositoryTest.kt delete mode 100644 remote/src/test/java/com/vrgsoft/remote/TestApi.kt delete mode 100644 remote/src/test/java/com/vrgsoft/remote/TestRepository.kt delete mode 100644 remote/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker delete mode 100644 retrofit/build.gradle delete mode 100644 retrofit/retrofit.iml delete mode 100644 retrofit/src/main/AndroidManifest.xml delete mode 100644 retrofit/src/main/java/com/vrgsoft/retrofit/RetrofitModule.kt delete mode 100644 retrofit/src/main/java/com/vrgsoft/retrofit/common/Auth.kt delete mode 100644 retrofit/src/main/java/com/vrgsoft/retrofit/common/AuthInterceptor.kt delete mode 100644 retrofit/src/main/java/com/vrgsoft/retrofit/common/HeaderInterceptor.kt delete mode 100644 retrofit/src/main/java/com/vrgsoft/retrofit/common/RetrofitConfig.kt delete mode 100644 retrofit/src/main/res/values/strings.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..36d5423 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*.iml +.gradle +/local.properties +/.idea/workspace.xml +/.idea/libraries +/.idea/caches + +.DS_Store +/build +/captures +.externalNativeBuild +/commit.bat +/app/src/main/java/me/tuple/lily/example/DemoFragment.kt \ No newline at end of file diff --git a/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/.gradle/buildOutputCleanup/buildOutputCleanup.lock index 5325088fdfe91b306315ad480e72304f7a55b310..3a4685292affe35154dd755f60b7be55dbdccaa2 100644 GIT binary patch literal 17 VcmZSHu;Xq%FApC(0~m0u0RSp&1DXH; literal 17 VcmZSHu;Xq%FApC(0~j#<1pq3s1LXh! diff --git a/.gradle/buildOutputCleanup/cache.properties b/.gradle/buildOutputCleanup/cache.properties index 03414d7..f25f65d 100644 --- a/.gradle/buildOutputCleanup/cache.properties +++ b/.gradle/buildOutputCleanup/cache.properties @@ -1,2 +1,2 @@ -#Fri Oct 18 14:32:46 EEST 2019 -gradle.version=4.8.1 +#Sat Oct 19 13:31:53 EEST 2019 +gradle.version=5.4.1 diff --git a/.gradle/buildOutputCleanup/outputFiles.bin b/.gradle/buildOutputCleanup/outputFiles.bin index 254b3d78fdb5cb214dc2c41f25e297cd0297ac25..cdd17be3d33545ee8956b737b699fd2abf566479 100644 GIT binary patch literal 93599 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 Jz4364`W9U2wSfQt literal 25787 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 diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index 4a9531d0d35e08fd4aadf13b15950a6c15ac7da1..7a9be93d3837b900332ffb3109ba7c2f9050d122 100644 GIT binary patch delta 281 zcmX@l@}70VOy;@rOD4|oVdR?lQd8RbdzdG0=^2$-27g^_u2&V7Fo@-3=2VvCCl*i6 zW0VkByu#v>(#%Z8jWdjjB|1)eO;%!bv5`zF&CE#&E=tx1GxXAn5>s+g^|DKfOA8t5 z7}yvX7z9GLs^03{cvmxFO{A+=|Mkie27#RXnRluX!A!XP-=l2LlHAd{~2hnV#3cb(MMT->UrC@N(u2sJ)AzbF-?SMdIw U`6gM(s?S^ZPnQgtPkza>q@>Uj1-*6&lg$Ag8Fm$^g`|y_6n_jX`zz9)qI3Wga%F9A wbY+t+0T&PlW#`$;piYixs{eM$Vp(cvdn$ssI20 diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml index 1bec35e..88ea3aa 100644 --- a/.idea/codeStyles/Project.xml +++ b/.idea/codeStyles/Project.xml @@ -3,6 +3,118 @@ + + + + + +
+ + + + xmlns:android + + ^$ + + + +
+
+ + + + xmlns:.* + + ^$ + + + BY_NAME + +
+
+ + + + .*:id + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + .*:name + + http://schemas.android.com/apk/res/android + + + +
+
+ + + + name + + ^$ + + + +
+
+ + + + style + + ^$ + + + +
+
+ + + + .* + + ^$ + + + BY_NAME + +
+
+ + + + .* + + http://schemas.android.com/apk/res/android + + + ANDROID_ATTRIBUTE_ORDER + +
+
+ + + + .* + + .* + + + BY_NAME + +
+
+
+
diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..96cc43e --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/dictionaries/gokul_4192.xml b/.idea/dictionaries/gokul_4192.xml new file mode 100644 index 0000000..48fb53c --- /dev/null +++ b/.idea/dictionaries/gokul_4192.xml @@ -0,0 +1,7 @@ + + + + snacky + + + \ No newline at end of file diff --git a/.idea/encodings.xml b/.idea/encodings.xml index 15a15b2..97626ba 100644 --- a/.idea/encodings.xml +++ b/.idea/encodings.xml @@ -1,4 +1,6 @@ - + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index a34a3a1..3bef4ff 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -9,8 +9,11 @@
Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("me.tuple.lily", appContext.getPackageName()); + } +} diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index f387e05..676c687 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,24 @@ + + xmlns:tools="http://schemas.android.com/tools" + package="me.tuple.lily.example"> - - + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/me/tuple/lily/example/App.kt b/app/src/main/java/me/tuple/lily/example/App.kt new file mode 100644 index 0000000..5e78dc0 --- /dev/null +++ b/app/src/main/java/me/tuple/lily/example/App.kt @@ -0,0 +1,16 @@ +package me.tuple.lily.example + +import android.app.Application +import me.tuple.lily.core.Contexter +import me.tuple.lily.toast.Toasty + +/** + * Created by LazyLoop. + */ + +class App:Application(){ + override fun onCreate() { + super.onCreate() + Contexter.init(applicationContext) + } +} \ 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 deleted file mode 100644 index 6348baa..0000000 --- a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml +++ /dev/null @@ -1,34 +0,0 @@ - - - - - - - - - - - diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml deleted file mode 100644 index a0ad202..0000000 --- a/app/src/main/res/drawable/ic_launcher_background.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 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..87a6717 --- /dev/null +++ b/app/src/main/res/layout/activity_main.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml deleted file mode 100644 index bbd3e02..0000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml deleted file mode 100644 index bbd3e02..0000000 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png index 898f3ed59ac9f3248734a00e5902736c9367d455..cde69bcccec65160d92116f20ffce4fce0b5245c 100644 GIT binary patch literal 3418 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 VFwL6zQVak9002ovPDHLkV1j`A3BLdU delta 2047 zcmV3$g6n-PcZs4>q4bV;KlnN~%kbn}!V8maB zKN?~PDN77Zj6xT>KxccMrJYVYoo)~;&Tk+ zc{`@-iW=+SCQehld23|QI$HWOdM<_ZsPQ4 zCH$2dr)gJ)+kXL?nlc3zH`fl5&D-sS#9FIDmRx6p%w5%C^$#YSjbqPhs8Gr)N}G_H zDzpOJS;Vax!CHKaItiBIUVQf9oguxkGVsiiQfKu=Rg@}ZF?O9Vsn#;6ZLt2qWC>2u z7w0hg{9_}B5>S~6ZpY;1%usM0F#8egzGcH~!CctmSAT$B0vxkAbsm?m6ZLt2qWC=KST$NEOGY+VLSm2qoac!o8YfuF?t;@iU-Q!Y$^=q=iQ((NV zK=%9d9;v|Ok2YnX6ZepFk$utt94iktfxJw3e_~|Un z-B}Itc2u|IlX``0V1M3jKlcCTY73+_+5_^1O|_7<%PEyPhbqxCEnFv#uom}FdO$lY z%`OKi#h<5Co8ZPBFZA{I!|wAx!c?aisEfxs?SGC+m|kmv7aPi9n#%&wcAcXCG?y6; z{c@i5Z|UxYNe+FWE(KE&s%K@!K?l*6Vo&@?o6uVa_dvV12k!ShfV$J)K_Z&X+n+T< z?Wu3!+>Lg)(s_%Kqx;Ege?ilQQ?T+-6U&vFFPw(nzCP%{{>%0?j-3yz{^}r-@W8zX z4}akI+c)9P{d?f^`9gx~|G;)c{z~U<$UgSP*g7%U@$oB{h9n&dpZ|K1+53np5Qz#* zv~BO9Wu~l>A_@oXu<|n5J(V39 zNWSjNgD|sNgo_xZ2&3^v?a+hxY4NKkCkazs(kSjp-OLsb1dw+#; zh~>@ofMbuY0uykS+-JWJI=h~`ci}FY$50ATJ+%wAO77DqVS>075^y6_kJfo$5r(}B zH#(lkaYNw(n&Hbh&XQd-lYhgIk-UdHhZ4HzOR6cX9O@ARHoI^)d$gYy?8s1wOPPAP1D`1cmKywnxibi24 z77IYoZDB~V>mkzkuuO4M6L}cN*~7kOzWMf)*1!!I%$%iK9TNfVh=D zt$@ln(y4@BiI57QTuz>dYn^5Vc_OZLSrz2zy$KFdK!>yMSD>s2REGSKKY!GxM}O#3^it0(cFM{iv*X2k$-bM(-Z&R3w& zzXExqc%-Cft^ksj6fh{rGk<%pu_(v~6p)c8(g{^ufkH_E^Ds>4vCqUbxZmERap1&C zLs$+=CL<>=DS#Uptsp5-MhX-^1qG-~1PpQo9__G_0uRX(X{G>%Q%WmX7#)rRk(f^7 z`Lu^Vann~~%1b!tih7uzwUPx#=)aHi{EKgo2#I8cb;gTM1BSc1O%c6X4GrDGlWig=bf}EXJXSB!65PR;F20%(gVk9O(^q zf6~ShHwN-0HTnY0JR2X|sXpF#6uCu*^N(zTkeZqmmzQ%)rQ6)CGUjKLKbT-@+R7i4`upXuc~yjH_dLs`xXg0LasNhx=gCq=LMj#mU`8e5)aNg zwd+=Wxc+M)Ie2+K;}+(h%4o!_h|G+)B9|;)6}ebK{Ht_dpul9Tj~O6~@ynHMvsT43 zS(XCvgW4@#H5tc=p|P+oVs6Gt;_~R(AE-oD*7Nuji+Ev-5zDwd){l2`mYkf4V~UUt d`|KJY*MF2#L{r@C%<2FD002ovPDHLkV1mKW=WhT2 diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png index dae5e082342fcdeee5db8a6e0b27028e2d2808f5..efc028a636dd690a51db5a525cf781a5a7daba68 100644 GIT binary patch delta 2546 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 IM6N<$f-ZR0T>t<8 delta 2776 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 literal 4490 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 diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png index 14ed0af35023e4f1901cf03487b6c524257b8483..3af2608a4492ef9ae63a77ec3305aedda89594cb 100644 GIT binary patch literal 6114 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 literal 6895 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png index b0907cac3bfd8fbfdc46e1108247f0a1055387ec..324e72cdd7480cb983fa1bcc7ce686e51ef87fe7 100644 GIT binary patch literal 7718 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 literal 6387 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 diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png index d8ae03154975f397f8ed1b84f2d4bf9783ecfa26..9bec2e623103ac9713b00cad8502a057c1efda61 100644 GIT binary patch literal 10056 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 e{+^kJY@_qlWNt)byXXcl4&di)UgOL4U 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 XdJ+W}DiIkV00000NkvXXu0mjfKBlg6 diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png index 2c18de9e66108411737e910f5c1972476f03ddbf..aee44e138434630332d88b1680f33c4b24c70ab3 100644 GIT binary patch literal 10486 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 I20H400LcNok^lez diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png index beed3cdd2c32af5114a7dc70b9ef5b698eb8797e..34947cd6bbf9c729be83edc96ad08a1d42b82bc9 100644 GIT binary patch literal 14696 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 diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 69b2233..3ab3e9c 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,6 +1,6 @@ - #008577 - #00574B - #D81B60 + #3F51B5 + #303F9F + #FF4081 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 644a7c9..1472496 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,3 @@ - App + Lily diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index f11f745..e18f895 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -1,3 +1,11 @@ + + + diff --git a/retrofit/src/test/java/com/vrgsoft/retrofit/ExampleUnitTest.java b/app/src/test/java/me/tuple/lily/ExampleUnitTest.java similarity index 79% rename from retrofit/src/test/java/com/vrgsoft/retrofit/ExampleUnitTest.java rename to app/src/test/java/me/tuple/lily/ExampleUnitTest.java index 80fc59a..3b49356 100644 --- a/retrofit/src/test/java/com/vrgsoft/retrofit/ExampleUnitTest.java +++ b/app/src/test/java/me/tuple/lily/ExampleUnitTest.java @@ -1,4 +1,4 @@ -package com.vrgsoft.retrofit; +package me.tuple.lily; import org.junit.Test; @@ -11,7 +11,7 @@ */ public class ExampleUnitTest { @Test - public void addition_isCorrect() { + public void addition_isCorrect() throws Exception { assertEquals(4, 2 + 2); } } \ No newline at end of file diff --git a/build.gradle b/build.gradle index ab67c51..c0271a6 100644 --- a/build.gradle +++ b/build.gradle @@ -1,29 +1,41 @@ -allprojects { - version = "1.0" -} +// Top-level build file where you can add configuration options common to all sub-projects/modules. buildscript { - apply from: "${rootDir}/config/versions.gradle" + ext{ + kotlin_version = '1.3.31' + target_sdk_version = 28 + complie_sdk_version = 28 + version_name = '2.0' + version_code = 2 + material_version = '1.1.0-beta01' + } + repositories { + jcenter() + google() + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.0' + classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" + classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' - repositories { - google() - jcenter() - } - dependencies { - classpath 'com.android.tools.build:gradle:3.2.0' - classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" - classpath 'com.github.dcendents:android-maven-gradle-plugin:2.0' - } + // NOTE: Do not place your application dependencies here; they belong + // in the individual module build.gradle files + } } -subprojects { - apply plugin: 'maven' - - apply from: "${project.rootDir}/config/versions.gradle" +plugins { + id("de.fayard.buildSrcVersions") version "0.6.4" +} - repositories { - google() - jcenter() - } +allprojects { + repositories { + jcenter() + maven { url 'https://jitpack.io' } + maven { url 'https://maven.google.com' } + google() + } } +task clean(type: Delete) { + delete rootProject.buildDir +} diff --git a/buildSrc/.gitignore b/buildSrc/.gitignore new file mode 100644 index 0000000..192221b --- /dev/null +++ b/buildSrc/.gitignore @@ -0,0 +1,2 @@ +.gradle/ +build/ \ No newline at end of file diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts new file mode 100644 index 0000000..88cd14f --- /dev/null +++ b/buildSrc/build.gradle.kts @@ -0,0 +1,6 @@ +plugins { + `kotlin-dsl` +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Libs.kt b/buildSrc/src/main/kotlin/Libs.kt new file mode 100644 index 0000000..e025341 --- /dev/null +++ b/buildSrc/src/main/kotlin/Libs.kt @@ -0,0 +1,92 @@ +import kotlin.String + +/** + * Generated by https://github.com/jmfayard/buildSrcVersions + * + * Update this file with + * `$ ./gradlew buildSrcVersions` + */ +object Libs { + const val de_fayard_buildsrcversions_gradle_plugin: String = + "de.fayard.buildSrcVersions:de.fayard.buildSrcVersions.gradle.plugin:" + + Versions.de_fayard_buildsrcversions_gradle_plugin + + /** + * https://developer.android.com/studio + */ + const val com_android_tools_build_gradle: String = "com.android.tools.build:gradle:" + + Versions.com_android_tools_build_gradle + + /** + * https://github.com/dcendents/android-maven-gradle-plugin + */ + const val android_maven_gradle_plugin: String = + "com.github.dcendents:android-maven-gradle-plugin:" + + Versions.android_maven_gradle_plugin + + /** + * https://kotlinlang.org/ + */ + const val kotlin_gradle_plugin: String = "org.jetbrains.kotlin:kotlin-gradle-plugin:" + + Versions.org_jetbrains_kotlin + + /** + * https://kotlinlang.org/ + */ + const val kotlin_reflect: String = "org.jetbrains.kotlin:kotlin-reflect:" + + Versions.org_jetbrains_kotlin + + /** + * https://kotlinlang.org/ + */ + const val kotlin_stdlib_jdk7: String = "org.jetbrains.kotlin:kotlin-stdlib-jdk7:" + + Versions.org_jetbrains_kotlin + + /** + * https://developer.android.com/topic/libraries/architecture/index.html + */ + const val lifecycle_compiler: String = "androidx.lifecycle:lifecycle-compiler:" + + Versions.lifecycle_compiler + + /** + * http://tools.android.com + */ + const val constraintlayout: String = "androidx.constraintlayout:constraintlayout:" + + Versions.constraintlayout + + /** + * https://developer.android.com/testing + */ + const val espresso_core: String = "androidx.test.espresso:espresso-core:" + + Versions.espresso_core + + /** + * http://developer.android.com/tools/extras/support-library.html + */ + const val recyclerview: String = "androidx.recyclerview:recyclerview:" + Versions.recyclerview + + /** + * https://developer.android.com/studio + */ + const val lint_gradle: String = "com.android.tools.lint:lint-gradle:" + Versions.lint_gradle + + /** + * https://developer.android.com/jetpack/androidx + */ + const val appcompat: String = "androidx.appcompat:appcompat:" + Versions.appcompat + + /** + * http://developer.android.com/tools/extras/support-library.html + */ + const val cardview: String = "androidx.cardview:cardview:" + Versions.cardview + + /** + * http://developer.android.com/tools/extras/support-library.html + */ + const val material: String = "com.google.android.material:material:" + Versions.material + + /** + * http://junit.org + */ + const val junit: String = "junit:junit:" + Versions.junit +} diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt new file mode 100644 index 0000000..915192d --- /dev/null +++ b/buildSrc/src/main/kotlin/Versions.kt @@ -0,0 +1,55 @@ +import kotlin.String +import org.gradle.plugin.use.PluginDependenciesSpec +import org.gradle.plugin.use.PluginDependencySpec + +/** + * Generated by https://github.com/jmfayard/buildSrcVersions + * + * Find which updates are available by running + * `$ ./gradlew buildSrcVersions` + * This will only update the comments. + * + * YOU are responsible for updating manually the dependency version. + */ +object Versions { + const val de_fayard_buildsrcversions_gradle_plugin: String = "0.6.4" + + const val com_android_tools_build_gradle: String = "3.5.1" + + const val android_maven_gradle_plugin: String = "2.1" + + const val org_jetbrains_kotlin: String = "1.3.50" + + const val lifecycle_compiler: String = "2.1.0" + + const val constraintlayout: String = "1.1.3" + + const val espresso_core: String = "3.2.0" + + const val recyclerview: String = "1.0.0" + + const val lint_gradle: String = "26.5.1" + + const val appcompat: String = "1.1.0" + + const val cardview: String = "1.0.0" + + const val material: String = "1.1.0-alpha06" + + const val junit: String = "4.12" + + /** + * Current version: "5.1.1" + * See issue 19: How to update Gradle itself? + * https://github.com/jmfayard/buildSrcVersions/issues/19 + */ + const val gradleLatestVersion: String = "5.6.2" +} + +/** + * See issue #47: how to update buildSrcVersions itself + * https://github.com/jmfayard/buildSrcVersions/issues/47 + */ +val PluginDependenciesSpec.buildSrcVersions: PluginDependencySpec + inline get() = + id("de.fayard.buildSrcVersions").version(Versions.de_fayard_buildsrcversions_gradle_plugin) diff --git a/config/versions.gradle b/config/versions.gradle deleted file mode 100644 index 2680007..0000000 --- a/config/versions.gradle +++ /dev/null @@ -1,134 +0,0 @@ -ext { - sdk_compile_version = 29 - sdk_min_version = 21 - - kotlin_version = '1.3.31' - lifecycle_version = "1.1.1" - coroutines_version = "1.2.1" - kodein_version = "5.1.1" - retrofit_version = "2.4.0" - okHttp_version = "3.10.0" - - def base = [ - kotlinJDK : "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version", - kotlinReflect : "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version", - lifecycle : "android.arch.lifecycle:extensions:$lifecycle_version", - material : "com.google.android.material:material:1.1.0-alpha07", - constraintlayout : "androidx.constraintlayout:constraintlayout:2.0.0-alpha2", - coroutines : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version", - coroutinesCore : "org.jetbrains.kotlinx:kotlinx-coroutines-core:$coroutines_version", - coroutinesAndroid : "org.jetbrains.kotlinx:kotlinx-coroutines-android:$coroutines_version", - coroutinesAndroidX: "androidx.lifecycle:lifecycle-livedata-ktx:2.2.0-alpha03", - works : "android.arch.work:work-runtime-ktx:1.0.1" - ] - - def kodein = [ - generic : "org.kodein.di:kodein-di-generic-jvm:$kodein_version", - framework: "org.kodein.di:kodein-di-framework-android:$kodein_version" - ] - - def retrofit = [ - main : "com.squareup.retrofit2:retrofit:$retrofit_version", - adapter : "com.squareup.retrofit2:adapter-rxjava2:$retrofit_version", - gson : "com.squareup.retrofit2:converter-gson:$retrofit_version", - scalars : "com.squareup.retrofit2:converter-scalars:$retrofit_version", - coroutines: "com.jakewharton.retrofit:retrofit2-kotlin-coroutines-adapter:0.9.2" - ] - - def okHttp = [ - okhttp : "com.squareup.okhttp3:okhttp:$okHttp_version", - interceptor: "com.squareup.okhttp3:logging-interceptor:$okHttp_version" - ] - - def tests = [ - core : "androidx.test:core:1.0.0", - coreTesting: "androidx.arch.core:core-testing:2.0.0", - jUnitRule : "androidx.test:rules:1.1.0", - jUnitRunner: "androidx.test:runner:1.1.0", - junit : 'androidx.test.ext:junit:1.0.0', - mokito : 'com.nhaarman.mockitokotlin2:mockito-kotlin:2.0.0-RC3', - coroutines : "org.jetbrains.kotlinx:kotlinx-coroutines-test:1.3.1" - ] - - def paging = [ - core: "androidx.paging:paging-runtime-ktx:2.1.0" - ] - - corePresentation = [ - [configuration: "implementation", dependency: base.kotlinJDK], - [configuration: "implementation", dependency: base.kotlinReflect], - [configuration: "implementation", dependency: base.constraintlayout], - [configuration: "implementation", dependency: base.lifecycle], - [configuration: "implementation", dependency: base.material], - [configuration: "implementation", dependency: base.coroutinesCore], - [configuration: "implementation", dependency: base.coroutinesAndroid], - - [configuration: "implementation", dependency: kodein.generic], - [configuration: "implementation", dependency: kodein.framework], - ] - - retrofitModule = [ - [configuration: "implementation", dependency: base.kotlinJDK], - - [configuration: "implementation", dependency: retrofit.main], - [configuration: "implementation", dependency: retrofit.adapter], - [configuration: "implementation", dependency: retrofit.gson], - [configuration: "implementation", dependency: retrofit.scalars], - [configuration: "implementation", dependency: retrofit.coroutines], - - [configuration: "implementation", dependency: okHttp.okhttp], - [configuration: "implementation", dependency: okHttp.interceptor], - - [configuration: "implementation", dependency: kodein.generic], - [configuration: "implementation", dependency: kodein.framework], - ] - - coreRemote = [ - [configuration: "implementation", dependency: base.kotlinJDK], - [configuration: "implementation", dependency: base.coroutinesCore], - [configuration: "implementation", dependency: base.coroutinesAndroid], - [configuration: "implementation", dependency: base.material], - - [configuration: "implementation", dependency: retrofit.main], - - [configuration: "testImplementation", dependency: tests.core], - [configuration: "testImplementation", dependency: tests.coreTesting], - [configuration: "testImplementation", dependency: tests.coroutines], - [configuration: "testImplementation", dependency: tests.junit], - [configuration: "testImplementation", dependency: tests.jUnitRule], - [configuration: "testImplementation", dependency: tests.jUnitRunner], - [configuration: "testImplementation", dependency: tests.mokito], - ] - - networkManager = [ - [configuration: "implementation", dependency: base.kotlinJDK], - [configuration: "implementation", dependency: base.coroutinesCore], - [configuration: "implementation", dependency: base.coroutinesAndroid], - [configuration: "implementation", dependency: base.material], - - [configuration: "testImplementation", dependency: tests.core], - [configuration: "testImplementation", dependency: tests.coreTesting], - [configuration: "testImplementation", dependency: tests.coroutines], - [configuration: "testImplementation", dependency: tests.junit], - [configuration: "testImplementation", dependency: tests.jUnitRule], - [configuration: "testImplementation", dependency: tests.jUnitRunner], - [configuration: "testImplementation", dependency: tests.mokito], - ] - - coreGateway = [ - [configuration: "implementation", dependency: base.kotlinJDK], - [configuration: "implementation", dependency: base.coroutinesCore], - [configuration: "implementation", dependency: base.coroutinesAndroid], - [configuration: "implementation", dependency: base.material], - - [configuration: "implementation", dependency: paging.core], - - [configuration: "testImplementation", dependency: tests.core], - [configuration: "testImplementation", dependency: tests.coreTesting], - [configuration: "testImplementation", dependency: tests.coroutines], - [configuration: "testImplementation", dependency: tests.junit], - [configuration: "testImplementation", dependency: tests.jUnitRule], - [configuration: "testImplementation", dependency: tests.jUnitRunner], - [configuration: "testImplementation", dependency: tests.mokito], - ] -} \ No newline at end of file diff --git a/core.iml b/core.iml deleted file mode 100644 index b377883..0000000 --- a/core.iml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 87b738cbd051603d91cc39de6cb000dd98fe6b02..13372aef5e24af05341d49695ee84e5f9b594659 100644 GIT binary patch literal 53636 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ⅅ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 H-+%o-(+5aQ literal 55190 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 z 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 \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi -done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS="" APP_NAME="Gradle" APP_BASE_NAME=`basename "$0"` -# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -DEFAULT_JVM_OPTS='"-Xmx64m"' - # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD="maximum" -warn () { +warn ( ) { echo "$*" } -die () { +die ( ) { echo echo "$*" echo @@ -48,7 +30,6 @@ die () { cygwin=false msys=false darwin=false -nonstop=false case "`uname`" in CYGWIN* ) cygwin=true @@ -59,11 +40,26 @@ case "`uname`" in MINGW* ) msys=true ;; - NONSTOP* ) - nonstop=true - ;; esac +# Attempt to set APP_HOME +# Resolve links: $0 may be a link +PRG="$0" +# Need this for relative symlinks. +while [ -h "$PRG" ] ; do + ls=`ls -ld "$PRG"` + link=`expr "$ls" : '.*-> \(.*\)$'` + if expr "$link" : '/.*' > /dev/null; then + PRG="$link" + else + PRG=`dirname "$PRG"`"/$link" + fi +done +SAVED="`pwd`" +cd "`dirname \"$PRG\"`/" >/dev/null +APP_HOME="`pwd -P`" +cd "$SAVED" >/dev/null + CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar # Determine the Java command to use to start the JVM. @@ -89,7 +85,7 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then +if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then MAX_FD_LIMIT=`ulimit -H -n` if [ $? -eq 0 ] ; then if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then @@ -154,19 +150,11 @@ if $cygwin ; then esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " +# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules +function splitJvmOpts() { + JVM_OPTS=("$@") } -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -fi +eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS +JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME" -exec "$JAVACMD" "$@" +exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@" diff --git a/gradlew.bat b/gradlew.bat index 6d57edc..8a0b282 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -8,14 +8,14 @@ @rem Set local scope for the variables with windows NT shell if "%OS%"=="Windows_NT" setlocal +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS= + set DIRNAME=%~dp0 if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 set APP_HOME=%DIRNAME% -@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. -set DEFAULT_JVM_OPTS="-Xmx64m" - @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome @@ -46,9 +46,10 @@ echo location of your Java installation. goto fail :init -@rem Get command-line arguments, handling Windows variants +@rem Get command-line arguments, handling Windowz variants if not "%OS%" == "Windows_NT" goto win9xME_args +if "%@eval[2+2]" == "4" goto 4NT_args :win9xME_args @rem Slurp the command line arguments. @@ -59,6 +60,11 @@ set _SKIP=2 if "x%~1" == "x" goto execute set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ :execute @rem Setup the command line diff --git a/remote/.gitignore b/lilyadapter/.gitignore similarity index 100% rename from remote/.gitignore rename to lilyadapter/.gitignore diff --git a/lilyadapter/build.gradle b/lilyadapter/build.gradle new file mode 100644 index 0000000..1aa88b0 --- /dev/null +++ b/lilyadapter/build.gradle @@ -0,0 +1,39 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'com.github.dcendents.android-maven' + +group='com.github.VRGsoftUA' + +android { + compileSdkVersion rootProject.ext.complie_sdk_version + + defaultConfig { + minSdkVersion 16 + targetSdkVersion rootProject.ext.target_sdk_version + versionCode rootProject.ext.version_code + versionName rootProject.ext.version_name + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation(Libs.espresso_core) + implementation Libs.appcompat + implementation Libs.recyclerview + testImplementation Libs.junit + implementation project(':lilycore') + implementation Libs.kotlin_stdlib_jdk7 +} + +repositories { + mavenCentral() +} diff --git a/retrofit/proguard-rules.pro b/lilyadapter/proguard-rules.pro similarity index 70% rename from retrofit/proguard-rules.pro rename to lilyadapter/proguard-rules.pro index f1b4245..418646a 100644 --- a/retrofit/proguard-rules.pro +++ b/lilyadapter/proguard-rules.pro @@ -1,10 +1,14 @@ # Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. +# By default, the flags in this file are appended to flags specified +# in E:\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html +# Add any project specific keep options here: + # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: diff --git a/retrofit/src/androidTest/java/com/vrgsoft/retrofit/ExampleInstrumentedTest.java b/lilyadapter/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java similarity index 71% rename from retrofit/src/androidTest/java/com/vrgsoft/retrofit/ExampleInstrumentedTest.java rename to lilyadapter/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java index 5cfdc5c..1e4fbab 100644 --- a/retrofit/src/androidTest/java/com/vrgsoft/retrofit/ExampleInstrumentedTest.java +++ b/lilyadapter/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java @@ -1,4 +1,4 @@ -package com.vrgsoft.retrofit; +package me.tuple.lily; import android.content.Context; import androidx.test.InstrumentationRegistry; @@ -10,17 +10,17 @@ import static org.junit.Assert.*; /** - * Instrumented test, which will execute on an Android device. + * Instrumentation test, which will execute on an Android device. * * @see Testing documentation */ @RunWith(AndroidJUnit4.class) public class ExampleInstrumentedTest { @Test - public void useAppContext() { + public void useAppContext() throws Exception { // Context of the app under test. Context appContext = InstrumentationRegistry.getTargetContext(); - assertEquals("com.vrgsoft.retrofit.test", appContext.getPackageName()); + assertEquals("me.tuple.lilyadapter.test", appContext.getPackageName()); } } diff --git a/lilyadapter/src/main/AndroidManifest.xml b/lilyadapter/src/main/AndroidManifest.xml new file mode 100644 index 0000000..9bb244d --- /dev/null +++ b/lilyadapter/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/lilyadapter/src/main/java/me/tuple/lily/adapter/BaseRVAdapter.kt b/lilyadapter/src/main/java/me/tuple/lily/adapter/BaseRVAdapter.kt new file mode 100644 index 0000000..76e2ab1 --- /dev/null +++ b/lilyadapter/src/main/java/me/tuple/lily/adapter/BaseRVAdapter.kt @@ -0,0 +1,88 @@ +package me.tuple.lily.adapter + +import androidx.annotation.IdRes +import androidx.recyclerview.widget.RecyclerView +import android.view.View +import me.tuple.lily.core.findById +import me.tuple.lily.core.unless + +/** + * Created by LazyLoop. + */ +abstract class BaseRVAdapter(val dataHolder: DataHolder>) : androidx.recyclerview.widget.RecyclerView.Adapter>() { + var isDisabled: Boolean = false + var onClickListener: OnClickListener? = null + var onLongClickListener: OnLongClickListener? = null + var multiSelectListener: MultiSelectListener? = null + + fun enable() { + isDisabled = false + } + + fun disable() { + isDisabled = true + } + + override fun onBindViewHolder(holder: RVHolder, position: Int) { + holder.bind(getItem(position)) + onClickListener?.apply { + holder.itemView.setOnClickListener { + unless(isDisabled) { + if (dataHolder.isEmptySelection) { + val adapterPosition = holder.adapterPosition + if (adapterPosition == androidx.recyclerview.widget.RecyclerView.NO_POSITION) { + return@setOnClickListener + } + if (this.onClick(getItem(adapterPosition), adapterPosition)) { + notifyItemChanged(adapterPosition) + } + } else { + holder.itemView.performLongClick() + } + } + } + } + + onLongClickListener?.apply { + holder.itemView.setOnLongClickListener { + unless(isDisabled) { + val adapterPosition = holder.adapterPosition + if (adapterPosition == androidx.recyclerview.widget.RecyclerView.NO_POSITION) { + return@setOnLongClickListener true + } + this.onLongClick(getItem(adapterPosition), adapterPosition) + dataHolder.toggleSelection(adapterPosition) + multiSelectListener?.onChange(dataHolder) + } + return@setOnLongClickListener true + } + } + } + + fun getItem(position: Int): T = dataHolder.get(position) + + fun setRecyclerView(recyclerView: androidx.recyclerview.widget.RecyclerView): BaseRVAdapter { + recyclerView.adapter = this + dataHolder.adapter = this + return this + } + + override fun getItemCount(): Int = dataHolder.size() +} + +abstract class RVHolder(itemView: View) : androidx.recyclerview.widget.RecyclerView.ViewHolder(itemView) { + fun findById(@IdRes id: Int): V = itemView.findById(id) + abstract fun bind(data: T) +} + +interface OnClickListener { + fun onClick(data: T, position: Int): Boolean +} + +interface OnLongClickListener { + fun onLongClick(data: T, position: Int): Boolean +} + +interface MultiSelectListener { + fun onChange(dataHolder: DataHolder>) +} \ No newline at end of file diff --git a/lilyadapter/src/main/java/me/tuple/lily/adapter/CustomPagerAdapter.kt b/lilyadapter/src/main/java/me/tuple/lily/adapter/CustomPagerAdapter.kt new file mode 100644 index 0000000..2f27112 --- /dev/null +++ b/lilyadapter/src/main/java/me/tuple/lily/adapter/CustomPagerAdapter.kt @@ -0,0 +1,83 @@ +package me.tuple.lily.adapter + +import androidx.annotation.IntRange +import androidx.annotation.StringRes +import androidx.fragment.app.Fragment +import androidx.fragment.app.FragmentManager +import androidx.fragment.app.FragmentPagerAdapter +import androidx.viewpager.widget.ViewPager +import me.tuple.lily.core.Contexter +import java.util.* + + +/** * Created by goku on 19/5/16. */ +class CustomPagerAdapter : androidx.fragment.app.FragmentPagerAdapter, androidx.viewpager.widget.ViewPager.OnPageChangeListener { + private lateinit var titles: MutableList + private lateinit var fragments: MutableList + + constructor(fm: androidx.fragment.app.FragmentManager) : super(fm) { + fragments = ArrayList(3) + titles = ArrayList(3) + } + + constructor(fm: androidx.fragment.app.FragmentManager, @IntRange(from = 1) count: Int) : super(fm) { + fragments = ArrayList(count) + titles = ArrayList(count) + } + + override fun getCount(): Int { + return titles.size + } + + override fun getItemId(position: Int): Long { + return super.getItemId(position) + } + + fun addFragment(title: String, fragment: androidx.fragment.app.Fragment) { + titles.add(title) + fragments.add(fragment) + } + + fun addFragment(@StringRes title: Int, fragment: androidx.fragment.app.Fragment) { + titles.add(Contexter.getString(title)) + fragments.add(fragment) + } + + fun removeAll(fm: androidx.fragment.app.FragmentManager) { + for (i in fragments.indices) { + titles.removeAt(i) + fm.beginTransaction().remove(fragments[i]).commit() + fragments.removeAt(i) + } + } + + fun getFragment(position: Int): androidx.fragment.app.Fragment? { + return if (fragments.size > position) { + fragments[position] + } else null + } + + fun setVisibleFragment(position: Int) { + if (fragments.size > position) { + for (i in fragments.indices) { + fragments[i].userVisibleHint = position == i + } + } + } + + override fun getPageTitle(position: Int): CharSequence? { + return titles[position] + } + + override fun getItem(position: Int): androidx.fragment.app.Fragment { + return fragments[position] + } + + override fun onPageScrolled(position: Int, positionOffset: Float, positionOffsetPixels: Int) {} + override fun onPageSelected(position: Int) { + setVisibleFragment(position) + } + + override fun onPageScrollStateChanged(state: Int) {} +} + diff --git a/lilyadapter/src/main/java/me/tuple/lily/adapter/DataHolder.kt b/lilyadapter/src/main/java/me/tuple/lily/adapter/DataHolder.kt new file mode 100644 index 0000000..f5aa263 --- /dev/null +++ b/lilyadapter/src/main/java/me/tuple/lily/adapter/DataHolder.kt @@ -0,0 +1,107 @@ +package me.tuple.lily.adapter + +import androidx.recyclerview.widget.RecyclerView +import android.util.SparseBooleanArray +import java.util.* +import kotlin.collections.ArrayList + + +/** + * Created by LazyLoop. + */ +abstract class DataHolder() { + lateinit var adapter: BaseRVAdapter + var selectedCount: Int = 0 + var selectedItems: SparseBooleanArray = SparseBooleanArray(); + abstract fun get(position: Int): T + abstract fun size(): Int + abstract fun isEmpty(): Boolean + abstract fun clear() + abstract fun add(item: T) + abstract fun removeItemAt(position: Int) + abstract fun removeItem(item: T) + + fun isSelectable(position: Int): Boolean = true + + var isEmptySelection: Boolean = true + get() = selectedCount == 0 + + fun reset() { + selectedCount = 0 + selectedItems = SparseBooleanArray() + adapter.notifyDataSetChanged() + } + + fun select(position: Int): Boolean { + if (isSelectable(position) && !selectedItems.get(position)) { + selectedItems.put(position, true) + selectedCount++ + adapter.notifyItemChanged(position) + return true + } + return false + } + + fun deSelect(position: Int): Boolean { + if (isSelectable(position) && selectedItems.get(position)) { + selectedItems.put(position, false) + selectedCount-- + adapter.notifyItemChanged(position) + return true + } + return false + } + + fun selectAll() { + performBulkSelection(true) + } + + fun deselectAll() { + performBulkSelection(false) + } + + private fun performBulkSelection(isSelected: Boolean) { + + val oldSelectedCount = selectedCount + var nonSelectableItems = 0 + for (i in 0 until adapter.itemCount) { + if (isSelectable(i)) { + selectedItems.put(i, isSelected) + } else { + nonSelectableItems++ + } + } + selectedCount = if (isSelected) { + adapter.itemCount - nonSelectableItems + } else { + 0 + } + if (oldSelectedCount != selectedCount) { + adapter.notifyDataSetChanged() + } + } + + + fun isSelected(position: Int): Boolean = selectedItems.get(position) + + fun toggleSelection(position: Int) { + if (isSelected(position)) { + deSelect(position) + } else { + select(position) + } + } + + fun getSelectedItems(): MutableList { + if (selectedCount == 0) { + return Collections.emptyList() + } + val result = ArrayList(selectedCount) + for (i in 0 until size()) { + if (isSelected(i)) { + result.add(get(i)) + } + } + return result + } +} \ No newline at end of file diff --git a/lilyadapter/src/main/java/me/tuple/lily/adapter/ListDataHolder.kt b/lilyadapter/src/main/java/me/tuple/lily/adapter/ListDataHolder.kt new file mode 100644 index 0000000..23f670f --- /dev/null +++ b/lilyadapter/src/main/java/me/tuple/lily/adapter/ListDataHolder.kt @@ -0,0 +1,42 @@ +package me.tuple.lily.adapter + +import androidx.recyclerview.widget.RecyclerView + +/** + * Created by LazyLoop. + */ +open class ListDataHolder(private var data: MutableList) : DataHolder() { + + override fun get(position: Int): T = data[position] + + override fun size(): Int = data.size + + override fun isEmpty(): Boolean = data.isEmpty() + + fun reset(data: MutableList) { + this.data = data + reset() + } + + override fun clear() { + data.clear() + reset() + } + + override fun add(item: T) { + data.add(item) + adapter.notifyItemInserted(data.size) + } + + override fun removeItemAt(position: Int) { + data.removeAt(position) + adapter.notifyItemRemoved(position) + } + + override fun removeItem(item: T) { + val index = data.indexOf(item) + if (index != -1) { + removeItemAt(index) + } + } +} \ No newline at end of file diff --git a/lilyadapter/src/main/res/values/strings.xml b/lilyadapter/src/main/res/values/strings.xml new file mode 100644 index 0000000..38ece8b --- /dev/null +++ b/lilyadapter/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + lilyadapter + diff --git a/lilyadapter/src/test/java/me/tuple/lily/ExampleUnitTest.java b/lilyadapter/src/test/java/me/tuple/lily/ExampleUnitTest.java new file mode 100644 index 0000000..3b49356 --- /dev/null +++ b/lilyadapter/src/test/java/me/tuple/lily/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package me.tuple.lily; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/retrofit/.gitignore b/lilycore/.gitignore similarity index 100% rename from retrofit/.gitignore rename to lilycore/.gitignore diff --git a/lilycore/build.gradle b/lilycore/build.gradle new file mode 100644 index 0000000..474adc5 --- /dev/null +++ b/lilycore/build.gradle @@ -0,0 +1,38 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'com.github.dcendents.android-maven' + +group='com.github.VRGsoftUA' + +android { + compileSdkVersion rootProject.ext.complie_sdk_version + + defaultConfig { + minSdkVersion 16 + targetSdkVersion rootProject.ext.target_sdk_version + versionCode rootProject.ext.version_code + versionName rootProject.ext.version_name + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + } + + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation(Libs.espresso_core) + annotationProcessor Libs.lifecycle_compiler + implementation Libs.appcompat + testImplementation Libs.junit + implementation Libs.kotlin_stdlib_jdk7 +} +repositories { + mavenCentral() +} diff --git a/remote/proguard-rules.pro b/lilycore/proguard-rules.pro similarity index 70% rename from remote/proguard-rules.pro rename to lilycore/proguard-rules.pro index f1b4245..418646a 100644 --- a/remote/proguard-rules.pro +++ b/lilycore/proguard-rules.pro @@ -1,10 +1,14 @@ # Add project specific ProGuard rules here. -# You can control the set of applied configuration files using the -# proguardFiles setting in build.gradle. +# By default, the flags in this file are appended to flags specified +# in E:\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. # # For more details, see # http://developer.android.com/guide/developing/tools/proguard.html +# Add any project specific keep options here: + # If your project uses WebView with JS, uncomment the following # and specify the fully qualified class name to the JavaScript interface # class: diff --git a/lilycore/src/main/AndroidManifest.xml b/lilycore/src/main/AndroidManifest.xml new file mode 100644 index 0000000..1639b13 --- /dev/null +++ b/lilycore/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/lilycore/src/main/java/me/tuple/lily/core/ActivityExt.kt b/lilycore/src/main/java/me/tuple/lily/core/ActivityExt.kt new file mode 100644 index 0000000..63fb1d8 --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/ActivityExt.kt @@ -0,0 +1,36 @@ +package me.tuple.lily.core + +import android.app.Activity +import android.content.Intent +import android.net.Uri +import androidx.annotation.IdRes +import androidx.fragment.app.FragmentTransaction +import androidx.appcompat.app.ActionBar +import androidx.appcompat.app.AppCompatActivity + +/** + * Created by LazyLoop. + */ +fun Activity.sendMail(chooserTitle: String, email: String, subject: String, body: String?) { + val intent = Intent(Intent.ACTION_SENDTO) + intent.data = Uri.parse("mailto:") + intent.putExtra(Intent.EXTRA_EMAIL, arrayOf(email)) + intent.putExtra(Intent.EXTRA_SUBJECT, subject) + body?.also { intent.putExtra(Intent.EXTRA_TEXT, body) } + this.startActivity(Intent.createChooser(intent, chooserTitle)) +} + +inline fun AppCompatActivity.supportFragmentTransaction(receiver: FragmentTransaction.() -> Unit) { + supportFragmentManager.beginTransaction().apply(receiver).commit() +} + +inline fun AppCompatActivity.fragmentTransaction(receiver: android.app.FragmentTransaction.() -> Unit) { + fragmentManager.beginTransaction().apply(receiver).commit() +} + +inline fun AppCompatActivity.setupActionBar(@IdRes toolbarId: Int, action: ActionBar.() -> Unit) { + setSupportActionBar(findViewById(toolbarId)) + supportActionBar?.run { + action() + } +} \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/ApiExt.kt b/lilycore/src/main/java/me/tuple/lily/core/ApiExt.kt new file mode 100644 index 0000000..ffa8ca8 --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/ApiExt.kt @@ -0,0 +1,57 @@ +package me.tuple.lily.core + +import android.os.Build + +/** + * Created by LazyLoop. + */ + +typealias AndroidVersion = Build.VERSION_CODES + +fun isApiAbove(api: Int): Boolean = Build.VERSION.SDK_INT > api + +fun isApiAndAbove(api: Int): Boolean = Build.VERSION.SDK_INT >= api + +fun isApiOrBelow(api: Int): Boolean = Build.VERSION.SDK_INT <= api + +fun isApiBelow(api: Int): Boolean = Build.VERSION.SDK_INT < api + +fun isLollipopOrAbove(): Boolean = isApiAndAbove(AndroidVersion.LOLLIPOP) + +fun isMarshMellowOrAbove(): Boolean = isApiAndAbove(AndroidVersion.M) + +inline fun onApiAbove(api: Int, action: () -> Unit) { + if (isApiAbove(api)) { + action() + } +} + +inline fun onApiAndAbove(api: Int, action: () -> Unit) { + if (isApiAndAbove(api)) { + action() + } +} + +inline fun onApiOrBelow(api: Int, action: () -> Unit) { + if (isApiOrBelow(api)) { + action() + } +} + +inline fun onApiBelow(api: Int, action: () -> Unit) { + if (isApiBelow(api)) { + action() + } +} + +inline fun onLollipopOrAbove(action: () -> Unit) { + if (isLollipopOrAbove()) { + action() + } +} + +inline fun onMarshMellowOrAbove(action: () -> Unit) { + if (isMarshMellowOrAbove()) { + action() + } +} \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/CollectionExt.kt b/lilycore/src/main/java/me/tuple/lily/core/CollectionExt.kt new file mode 100644 index 0000000..f2bde5b --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/CollectionExt.kt @@ -0,0 +1,18 @@ +package me.tuple.lily.core + +/** + * Created by LazyLoop. + */ + +fun Collection?.isEmptyOrNull(): Boolean = this?.isEmpty() ?: true + +fun MutableCollection.addIfNotContains(objectToAdd: T): T { + if (!contains(objectToAdd)) { + add(objectToAdd) + } + val bo: Boolean? = null + if (bo == true) { + + } + return objectToAdd +} \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/ContextExt.kt b/lilycore/src/main/java/me/tuple/lily/core/ContextExt.kt new file mode 100644 index 0000000..b141cbf --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/ContextExt.kt @@ -0,0 +1,230 @@ +package me.tuple.lily.core + +import android.Manifest +import android.annotation.SuppressLint +import android.app.Activity +import android.content.* +import android.content.pm.PackageManager +import android.content.res.AssetManager +import android.content.res.Resources +import android.graphics.drawable.ColorDrawable +import android.graphics.drawable.Drawable +import android.location.LocationManager +import android.net.ConnectivityManager +import android.net.Uri +import android.provider.Settings +import androidx.annotation.* +import androidx.core.content.ContextCompat +import android.util.DisplayMetrics +import android.util.TypedValue +import android.view.LayoutInflater +import android.view.WindowManager +import kotlin.reflect.KClass + + +/** + * Created by LazyLoop. + */ + +val Context.layoutInflater: LayoutInflater + get() = getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater + +val Context.clipboardManager: ClipboardManager + get() = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager + +val Context.windowManager: WindowManager + get() = getSystemService(Context.WINDOW_SERVICE) as WindowManager + +fun Context.hasPermission(permission: String): Boolean = + isApiBelow(AndroidVersion.M) || ContextCompat.checkSelfPermission(this, permission) == PackageManager.PERMISSION_GRANTED + +fun Context.hasStoragePermission(): Boolean = + hasPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) + +fun Context.hasSettingsPermission(): Boolean = hasPermission(Manifest.permission.WRITE_SETTINGS) + +fun Context.filterNotGrantedPermission(permissions: Array): Array = + permissions.filter { !hasPermission(it) }.toTypedArray() + +fun Context.openAppDetails() { + val i = Intent() + i.action = Settings.ACTION_APPLICATION_DETAILS_SETTINGS + i.addCategory(Intent.CATEGORY_DEFAULT) + i.data = Uri.parse("package:$packageName") + i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + i.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) + i.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS) + startActivity(i) +} + +fun Context.copyToClipBoard(label: String, text: String) { + val clipboard = clipboardManager + val clip = ClipData.newPlainText(label, text) + clipboard.primaryClip = clip +} + +fun Context.openInBrowser(url: String) { + val intent = Intent(Intent.ACTION_VIEW, + Uri.parse(url)) + intent.apply { + addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY) + addFlags(Intent.FLAG_ACTIVITY_MULTIPLE_TASK) + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + startActivity(intent); +} + +fun Context.getVersionName(): String { + safeExecute { + val info = this.packageManager.getPackageInfo(this.packageName, 0) + return info.versionName + } + return "" +} + +fun Context.openInPlayStore(packageName: String) { + val uri = Uri.parse("market://details?id=$packageName") + val goToMarket = Intent(Intent.ACTION_VIEW, uri) + goToMarket.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY or + Intent.FLAG_ACTIVITY_MULTIPLE_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + try { + this.startActivity(goToMarket) + } catch (e: ActivityNotFoundException) { + openInBrowser("http://play.google.com/store/apps/details?id=${this.packageName}") + } +} + +fun Context.startActivity(activity: KClass) { + val intent = Intent(this, activity.java) + intent.action = Intent.ACTION_MAIN + startActivity(intent) +} + +@RequiresPermission(Manifest.permission.ACCESS_NETWORK_STATE) +fun Context.hasInternet(): Boolean { + val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager + val networkInfo = connectivityManager.activeNetworkInfo + return networkInfo != null && networkInfo.isAvailable && networkInfo.isConnected +} + + +fun Context.isGPSEnabled(): Boolean { + val locationManager = getSystemService(Context.LOCATION_SERVICE) as LocationManager + return locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER) +} + + +fun Context.getWindowWidth(): Int { + val metrics = getDisplayMetrics() + return metrics.widthPixels +} + +fun Context.getWindowHeight(): Int { + val metrics = getDisplayMetrics() + return metrics.heightPixels +} + + +fun Context.getWindowWidthInDp(): Float { + val metrics = getDisplayMetrics() + return metrics.widthPixels / metrics.density +} + +fun Context.getWindowHeightInDp(): Float { + val metrics = getDisplayMetrics() + return metrics.heightPixels / metrics.density +} + +fun Context.getDisplayMetrics(): DisplayMetrics { + val display = windowManager.defaultDisplay + val metrics = DisplayMetrics() + display.getMetrics(metrics) + return metrics +} + +@SuppressLint("StaticFieldLeak") +object Contexter { + lateinit var context: Context + val resources by lazy { + context.resources as Resources + } + + fun init(context: Context) { + this.context = context + } + + fun openAppDetailsActivity() { + context.openAppDetails() + } + + fun dpToPixels(dp: Int): Int { + val metrics = resources.displayMetrics + return Math.round(dp * (metrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)) + } + + fun pixelsToDp(pixels: Int): Int { + val metrics = resources.displayMetrics + return Math.round(pixels * (DisplayMetrics.DENSITY_DEFAULT.toFloat() / metrics.densityDpi)) + } + + fun getColor(@ColorRes colorId: Int): Int = ContextCompat.getColor(context, colorId) + + fun getBoolean(@BoolRes boolId: Int): Boolean = resources.getBoolean(boolId) + + fun getString(@StringRes stringId: Int): String = resources.getString(stringId) + + fun getString(@StringRes stringId: Int, vararg params: Any): String = + resources.getString(stringId, params) + + fun getInt(@IntegerRes intId: Int): Int = resources.getInteger(intId) + + fun getDrawable(@DrawableRes icDrawable: Int): Drawable = + ContextCompat.getDrawable(context, icDrawable)!! + + fun getDimensionPixelSize(@DimenRes dimensionId: Int) = + resources.getDimensionPixelSize(dimensionId) + + fun getColorDrawable(@ColorRes color: Int): ColorDrawable = ColorDrawable(getColor(color)) + + fun getAssets(): AssetManager = context.assets + + @ColorInt + fun resolveColor(@AttrRes attr: Int, fallback: Int): Int { + val a = context.theme.obtainStyledAttributes(intArrayOf(attr)) + try { + return a.getColor(0, fallback) + } finally { + a.recycle() + } + } + + fun resolveBoolean(@AttrRes attr: Int, fallback: Boolean = false): Boolean { + val a = context.theme.obtainStyledAttributes(intArrayOf(attr)) + try { + return a.getBoolean(0, fallback) + } finally { + a.recycle() + } + } + + fun resolveString(@AttrRes attr: Int): String? { + val v = TypedValue() + if (context.theme.resolveAttribute(attr, v, true)) { + return v.string as String + } + return null + } + + fun resolveDimension(@AttrRes attr: Int, fallback: Int): Int { + val a = context.theme.obtainStyledAttributes(intArrayOf(attr)) + try { + return a.getDimensionPixelSize(0, fallback) + } finally { + a.recycle() + } + } +} + +fun Int.dpToPx(): Int = Contexter.dpToPixels(this) + +fun Int.pxToDp(): Int = Contexter.pixelsToDp(this) diff --git a/lilycore/src/main/java/me/tuple/lily/core/CursorExt.kt b/lilycore/src/main/java/me/tuple/lily/core/CursorExt.kt new file mode 100644 index 0000000..3ec9d65 --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/CursorExt.kt @@ -0,0 +1,64 @@ +package me.tuple.lily.core + +import android.database.Cursor +import androidx.collection.ArrayMap +import java.util.* +import kotlin.collections.ArrayList + +/** + * Created by LazyLoop. + */ + +open class CursorWrapper(val cursor: Cursor?){ + + private val columnIndexMap: androidx.collection.ArrayMap = androidx.collection.ArrayMap() + + init { + cursor?.apply { + columnNames.forEach { + columnIndexMap[it] = getColumnIndexOrThrow(it) + } + } + } + + + inline fun forEach(consumer: (CursorWrapper) -> Unit): Boolean { + return safeExecute { + cursor?.use { + while (it.moveToNext()) { + consumer.invoke(this) + } + } + } + } + + inline fun toList(transformer: (CursorWrapper) -> T): ArrayList { + cursor?.also { + val result = ArrayList(it.count) + forEach { result.add(transformer.invoke(it)) } + return result + } + return Collections.emptyList() as ArrayList + } + + fun getBlob(column: String): ByteArray? = this.cursor!!.getBlob(columnIndexMap[column]!!) + + fun getString(column: String, defaultValue: String = ""): String = + this.cursor!!.getString(columnIndexMap[column]!!) ?: defaultValue + + fun getShort(column: String): Short = this.cursor!!.getShort(columnIndexMap[column]!!) + + fun getInt(column: String): Int = this.cursor!!.getInt(columnIndexMap[column]!!) + + fun getLong(column: String): Long = this.cursor!!.getLong(columnIndexMap[column]!!) + + fun getFloat(column: String): Float = this.cursor!!.getFloat(columnIndexMap[column]!!) + + fun getDouble(column: String): Double = this.cursor!!.getDouble(columnIndexMap[column]!!) + + fun isNull(column: String): Boolean = this.cursor!!.isNull(columnIndexMap[column]!!) + + companion object { + fun from(cursor: Cursor?): CursorWrapper = CursorWrapper(cursor) + } +} \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/SyntaxWrappers.kt b/lilycore/src/main/java/me/tuple/lily/core/SyntaxWrappers.kt new file mode 100644 index 0000000..05a27cf --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/SyntaxWrappers.kt @@ -0,0 +1,28 @@ +package me.tuple.lily.core + +/** + * Created by LazyLoop. + */ +inline fun unless(condition: Boolean, action: () -> Unit): Boolean { + if (condition.not()) { + action.invoke() + } + return condition +} + +inline fun Boolean.onFalse(action: () -> Unit): Boolean { + if (not()) { + action.invoke() + } + return this +} + +inline fun Boolean.onTrue(action: () -> Unit): Boolean { + if (this) { + action.invoke() + } + return this +} + + +fun unsafeLazy(initializer: () -> T) = lazy(LazyThreadSafetyMode.NONE, initializer) \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/ThreadExt.kt b/lilycore/src/main/java/me/tuple/lily/core/ThreadExt.kt new file mode 100644 index 0000000..06485ca --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/ThreadExt.kt @@ -0,0 +1,122 @@ +package me.tuple.lily.core + +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.LifecycleOwner +import android.os.Handler +import android.os.Looper +import me.tuple.lilycore.BuildConfig +import java.lang.ref.WeakReference +import java.util.concurrent.Executor +import java.util.concurrent.ExecutorService +import java.util.concurrent.Executors +import java.util.concurrent.Future +import androidx.fragment.app.Fragment as SupportFragment + +/** + * Created by LazyLoop. + */ + +private val handler by lazy { + Handler(Looper.getMainLooper()) +} + +private val mainThread: Thread by lazy { + Looper.getMainLooper().thread +} + +val Thread.isMainThread: Boolean + get() = this == mainThread + + +inline fun safeExecute(action: () -> Unit): Boolean { + return try { + action.invoke() + true + } catch (e: Exception) { + if (BuildConfig.DEBUG) { + e.printStackTrace() + } + false + } +} + +inline fun safeExecute(action: () -> T?): ExecutionResult { + return try { + ExecutionResult(action.invoke(), null) + } catch (e: Exception) { + ExecutionResult(null, e) + } +} + +class ExecutionResult(val result: T?, private val exception: Exception?) { + var isSuccessful = false + get() = exception == null +} + +fun AsyncContext.runOnUI(action: () -> Unit) { + weakRef.get()?.also { + if (!isDisposed) { + AppExecutors.main.submit(action) + } + } +} + +fun Any.async(action: AsyncContext.() -> T) { + val asyncContext = AsyncContext(WeakReference(this)) + AppExecutors.network.submit { + if (!asyncContext.isDisposed) { + action.invoke(asyncContext) + } + } +} + +fun Any.asyncNetwork(action: AsyncContext.() -> T) { + async(action) +} + +fun Any.asyncIO(action: AsyncContext.() -> T) { + val asyncContext = AsyncContext(WeakReference(this)) + AppExecutors.io.submit { + if (!asyncContext.isDisposed) { + action.invoke(asyncContext) + } + } +} + +class AsyncContext(val weakRef: WeakReference) { + @Volatile + var isDisposed = false + get() { + val context = weakRef.get() ?: return true + if (context is LifecycleOwner && !context.isCreated()) { + return true + } + return false + } + + fun dispose() { + isDisposed = true + } +} + +object AppExecutors { + val network: ExecutorService = Executors.newFixedThreadPool(3) + val io: ExecutorService = Executors.newSingleThreadExecutor() + val main: MainThreadExecutor = MainThreadExecutor() +} + +class MainThreadExecutor { + fun submit(task: () -> Unit) { + if (Thread.currentThread().isMainThread) { + task() + } else { + handler.post(task) + } + } +} + +fun safeSleep(mills: Long): Boolean = safeExecute { Thread.sleep(mills) } + +fun LifecycleOwner.isCreated(): Boolean = lifecycle.currentState.isAtLeast(Lifecycle.State.CREATED) + +fun LifecycleOwner.isStarted(): Boolean = lifecycle.currentState.isAtLeast(Lifecycle.State.STARTED) \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/core/ViewExt.kt b/lilycore/src/main/java/me/tuple/lily/core/ViewExt.kt new file mode 100644 index 0000000..2ce49a8 --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/core/ViewExt.kt @@ -0,0 +1,113 @@ +package me.tuple.lily.core + +import android.app.Activity +import android.content.Context +import androidx.annotation.IdRes +import android.util.DisplayMetrics +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager + + +/** + * Created by LazyLoop. + */ + +inline fun ViewGroup.forEach(a: (View) -> Unit) { + val count = this.childCount + for (i in 0 until count) { + a(this.getChildAt(i)) + } +} + +fun View?.gone() { + this?.visibility = View.GONE +} + +fun View?.show() { + this?.visibility = View.VISIBLE +} + +fun View?.hide() { + this?.visibility = View.INVISIBLE +} + +fun View?.setPadding(padding: Int) { + this?.apply { + this.setPadding(padding, padding, padding, padding) + } +} + +fun View?.setPaddingLeft(padding: Int) { + this?.apply { + this.setPadding(padding, paddingTop, paddingRight, paddingBottom) + } +} + +fun View?.setPaddingTop(padding: Int) { + this?.apply { + this.setPadding(paddingLeft, padding, paddingRight, paddingBottom) + } +} + +fun View?.setPaddingRight(padding: Int) { + this?.apply { + this.setPadding(paddingLeft, paddingTop, padding, paddingBottom) + } +} + +fun View?.setPaddingBottom(padding: Int) { + this?.apply { + this.setPadding(paddingLeft, paddingTop, paddingRight, padding) + } +} + +fun Activity.bind(@IdRes idRes: Int): Lazy { + @Suppress("UNCHECKED_CAST") + return unsafeLazy { findViewById(idRes) as T } +} + +fun View.bind(@IdRes idRes: Int): Lazy { + @Suppress("UNCHECKED_CAST") + return unsafeLazy { findViewById(idRes) as T } +} + +@Suppress("UNCHECKED_CAST") +fun View.findById(@IdRes idRes: Int): T = findViewById(idRes) as T + +@Suppress("UNCHECKED_CAST") +fun Activity.findById(@IdRes idRes: Int): T = findViewById(idRes) as T + +fun Activity.onClick(@IdRes id: Int, function: (View) -> Unit): View { + val view = findById(id) + view.setOnClickListener(function) + return view +} + +fun View.onClick(@IdRes id: Int, function: (View) -> Unit) { + findById(id).setOnClickListener(function) +} + +fun View.getViewYPos(): Int { + val location = IntArray(2) + location[0] = 0 + location[1] = this.y.toInt() + (this.parent as View).getLocationInWindow(location) + return location[1] +} + +fun View.getViewXPos(): Int { + val location = IntArray(2) + location[0] = 0 + location[1] = this.y.toInt() + (this.parent as View).getLocationInWindow(location) + return location[0] +} + +fun View.getViewPos(): IntArray { + val location = IntArray(2) + location[0] = 0 + location[1] = this.y.toInt() + (this.parent as View).getLocationInWindow(location) + return location +} \ No newline at end of file diff --git a/lilycore/src/main/java/me/tuple/lily/utils/FontCache.kt b/lilycore/src/main/java/me/tuple/lily/utils/FontCache.kt new file mode 100644 index 0000000..eb7837e --- /dev/null +++ b/lilycore/src/main/java/me/tuple/lily/utils/FontCache.kt @@ -0,0 +1,29 @@ +package me.tuple.lily.utils + +import android.graphics.Typeface +import me.tuple.lily.core.Contexter +import me.tuple.lily.core.safeExecute +import java.util.* + + +/** + * Created by LazyLoop. + */ + +object FontCache { + private val fontCache = HashMap() + + fun getFont(font: String?, defaultFont: Typeface = Typeface.DEFAULT): Typeface { + if (font.isNullOrBlank()) { + return Typeface.DEFAULT + } + return if (fontCache.containsKey(font)) { + fontCache[font]!! + } else { + var typeface: Typeface? = null + safeExecute { typeface = Typeface.createFromAsset(Contexter.getAssets(), "fonts/" + font) } + fontCache[font!!] = typeface ?: defaultFont + typeface ?: defaultFont + } + } +} diff --git a/lilycore/src/main/res/values/strings.xml b/lilycore/src/main/res/values/strings.xml new file mode 100644 index 0000000..f9e7755 --- /dev/null +++ b/lilycore/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + lilycore + diff --git a/lilycore/src/test/java/me/tuple/lily/ExampleUnitTest.java b/lilycore/src/test/java/me/tuple/lily/ExampleUnitTest.java new file mode 100644 index 0000000..3b49356 --- /dev/null +++ b/lilycore/src/test/java/me/tuple/lily/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package me.tuple.lily; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/lilypref/.gitignore b/lilypref/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/lilypref/.gitignore @@ -0,0 +1 @@ +/build diff --git a/lilypref/build.gradle b/lilypref/build.gradle new file mode 100644 index 0000000..a568bf3 --- /dev/null +++ b/lilypref/build.gradle @@ -0,0 +1,39 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'com.github.dcendents.android-maven' + +group='com.github.VRGsoftUA' + +android { + compileSdkVersion rootProject.ext.complie_sdk_version + + defaultConfig { + minSdkVersion 16 + targetSdkVersion rootProject.ext.target_sdk_version + versionCode rootProject.ext.version_code + versionName rootProject.ext.version_name + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation(Libs.espresso_core) + implementation Libs.appcompat + testImplementation Libs.junit + implementation Libs.kotlin_stdlib_jdk7 + implementation Libs.kotlin_reflect + //implementation 'com.github.Gokuldroid.Lily:lilycore:master-SNAPSHOT' + implementation project(':lilycore') +} +repositories { + mavenCentral() +} \ No newline at end of file diff --git a/lilypref/proguard-rules.pro b/lilypref/proguard-rules.pro new file mode 100644 index 0000000..418646a --- /dev/null +++ b/lilypref/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in E:\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# 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 diff --git a/lilypref/src/main/AndroidManifest.xml b/lilypref/src/main/AndroidManifest.xml new file mode 100644 index 0000000..fe3d60a --- /dev/null +++ b/lilypref/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/lilypref/src/main/java/me/tuple/lily/utils/Prefs.kt b/lilypref/src/main/java/me/tuple/lily/utils/Prefs.kt new file mode 100644 index 0000000..af26ff0 --- /dev/null +++ b/lilypref/src/main/java/me/tuple/lily/utils/Prefs.kt @@ -0,0 +1,201 @@ +package me.tuple.lily.utils + +import android.annotation.SuppressLint +import android.content.Context +import android.content.SharedPreferences +import android.icu.lang.UCharacter.GraphemeClusterBreak.T +import me.tuple.lily.core.Contexter +import java.util.* +import kotlin.properties.ReadWriteProperty +import kotlin.reflect.KProperty + +/** + * Created by gokul on 06/04/2016. + * This class helps to store and retrieve data form shared preferences. + */ + +inline fun SharedPreferences.use(function: SharedPreferences.Editor.() -> Unit): Boolean { + val editor = this.edit() + function.invoke(editor) + return editor.commit() +} + +@SuppressLint("CommitPrefEdits") +@Suppress("Unused") +class Prefs(context: Context, name: String) { + + constructor(function: Prefs.() -> Unit) : this(Contexter.context, defaultPrefName) { + function(this) + } + + private val preferences: SharedPreferences by lazy { + context.getSharedPreferences(name, Context.MODE_PRIVATE) + } + + @Suppress("UNCHECKED_CAST") + operator fun set(key: String, value: Any?): Boolean { + return if (value == null) + remove(key) + else preferences.use { + when (value) { + is String -> putString(key, value) + is Boolean -> putBoolean(key, value) + is Int -> putInt(key, value) + is Long -> putLong(key, value) + is Float -> putFloat(key, value) + is Set<*> -> { + putStringSet(key, value as MutableSet?) + } + else -> throw IllegalArgumentException("Unknown Type for preference") + } + } + } + + fun setAndGet(key: String, value: Any?): Any? { + set(key, value) + return value + } + + fun getBoolean(key: String, defaultValue: Boolean = false): Boolean = + preferences.getBoolean(key, defaultValue) + + fun getInt(key: String, defaultValue: Int = 0): Int = + preferences.getInt(key, defaultValue) + + fun getLong(key: String, defaultValue: Long = 0): Long = + preferences.getLong(key, defaultValue) + + fun getFloat(key: String, defaultValue: Float = 0f): Float = + preferences.getFloat(key, defaultValue) + + fun getString(key: String, defaultValue: String? = null): String? = + preferences.getString(key, defaultValue) + + fun getStringSet(key: String, defaultValue: HashSet? = null): Set? = + preferences.getStringSet(key, defaultValue) + + val map: Map + get() = preferences.all + + fun remove(key: String): Boolean { + return preferences.use { + remove(key) + } + } + + fun clear(): Boolean { + return preferences.use { + clear() + } + } + + operator fun contains(key: String): Boolean = preferences.contains(key) + + companion object { + private val defaultPreference: Prefs by lazy { + Prefs(Contexter.context, defaultPrefName) + } + + private val defaultPrefName: String by lazy { + Contexter.context.packageName + "_preferences" + } + + fun instance(name: String?): Prefs = + if (name == null) defaultPreference else Prefs(Contexter.context, name) + + fun from(name: String): Prefs = instance(name) + + inline fun from(name: String, function: Prefs.() -> Unit) { + function.invoke(instance(name)) + } + + inline fun fromDefault(function: Prefs.() -> Unit) { + function.invoke(instance(null)) + } + + fun fromDefault(): Prefs = instance(null) + + @Suppress("UNCHECKED_CAST") + operator fun set(key: String, value: Any?): Boolean = defaultPreference.set(key, value) + + fun setAndGet(key: String, value: Any?): Any? { + set(key, value) + return value + } + + fun getBoolean(key: String, defaultValue: Boolean = false): Boolean = + defaultPreference.getBoolean(key, defaultValue) + + fun getInt(key: String, defaultValue: Int = 0): Int = + defaultPreference.getInt(key, defaultValue) + + fun getLong(key: String, defaultValue: Long = 0): Long = + defaultPreference.getLong(key, defaultValue) + + fun getFloat(key: String, defaultValue: Float = 0f): Float = + defaultPreference.getFloat(key, defaultValue) + + fun getString(key: String, defaultValue: String? = null): String? = + defaultPreference.getString(key, defaultValue) + + fun getStringSet(key: String, defaultValue: HashSet? = null): Set? = + defaultPreference.getStringSet(key, defaultValue) + + fun remove(key: String): Boolean = defaultPreference.remove(key) + + fun clear(): Boolean = defaultPreference.clear() + } +} + +val Context.defaultPreference: Prefs + get() = Prefs.fromDefault() + +fun

stringPreference(key: String, defaultValue: String? = null, prefs: Prefs = Prefs.fromDefault()): ReadWriteProperty = + object : ReadWriteProperty { + override fun getValue(thisRef: P, property: KProperty<*>): String? = + prefs.getString(key, defaultValue) + + override fun setValue(thisRef: P, property: KProperty<*>, value: String?) { + prefs[key] = value + } + } + +fun

intPreference(key: String, defaultValue: Int = 0, prefs: Prefs = Prefs.fromDefault()): ReadWriteProperty = + object : ReadWriteProperty { + override fun getValue(thisRef: P, property: KProperty<*>): Int = + prefs.getInt(key, defaultValue) + + override fun setValue(thisRef: P, property: KProperty<*>, value: Int) { + prefs[key] = value + } + } + +fun

booleanPreference(key: String, defaultValue: Boolean = false, prefs: Prefs = Prefs.fromDefault()): ReadWriteProperty = + object : ReadWriteProperty { + override fun getValue(thisRef: P, property: KProperty<*>): Boolean = + prefs.getBoolean(key, defaultValue) + + override fun setValue(thisRef: P, property: KProperty<*>, value: Boolean) { + prefs[key] = value + } + } + +fun

floatPreference(key: String, defaultValue: Float = 0f, prefs: Prefs = Prefs.fromDefault()): ReadWriteProperty = + object : ReadWriteProperty { + override fun getValue(thisRef: P, property: KProperty<*>): Float = + prefs.getFloat(key, defaultValue) + + override fun setValue(thisRef: P, property: KProperty<*>, value: Float) { + prefs[key] = value + } + } + +fun

longPreference(key: String, defaultValue: Long = 0L, prefs: Prefs = Prefs.fromDefault()): ReadWriteProperty = + object : ReadWriteProperty { + override fun getValue(thisRef: P, property: KProperty<*>): Long = + prefs.getLong(key, defaultValue) + + override fun setValue(thisRef: P, property: KProperty<*>, value: Long) { + prefs[key] = value + } + } diff --git a/lilypref/src/main/res/values/strings.xml b/lilypref/src/main/res/values/strings.xml new file mode 100644 index 0000000..df43aa5 --- /dev/null +++ b/lilypref/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + lilypref + diff --git a/lilypref/src/test/java/me/tuple/lily/ExampleUnitTest.java b/lilypref/src/test/java/me/tuple/lily/ExampleUnitTest.java new file mode 100644 index 0000000..3b49356 --- /dev/null +++ b/lilypref/src/test/java/me/tuple/lily/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package me.tuple.lily; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/lilytoast/.gitignore b/lilytoast/.gitignore new file mode 100644 index 0000000..796b96d --- /dev/null +++ b/lilytoast/.gitignore @@ -0,0 +1 @@ +/build diff --git a/lilytoast/build.gradle b/lilytoast/build.gradle new file mode 100644 index 0000000..469ed2f --- /dev/null +++ b/lilytoast/build.gradle @@ -0,0 +1,42 @@ +apply plugin: 'com.android.library' +apply plugin: 'kotlin-android' +apply plugin: 'com.github.dcendents.android-maven' + +group='com.github.VRGsoftUA' + +android { + compileSdkVersion rootProject.ext.complie_sdk_version + + defaultConfig { + minSdkVersion 16 + targetSdkVersion rootProject.ext.target_sdk_version + versionCode rootProject.ext.version_code + versionName rootProject.ext.version_name + + testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" + + } + buildTypes { + release { + minifyEnabled false + proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' + } + } +} + +dependencies { + implementation fileTree(dir: 'libs', include: ['*.jar']) + androidTestImplementation(Libs.espresso_core) + implementation Libs.appcompat + implementation Libs.cardview + implementation Libs.material + + testImplementation Libs.junit + implementation Libs.kotlin_stdlib_jdk7 + implementation Libs.kotlin_reflect +// implementation 'com.github.Gokuldroid.Lily:lilycore:master-SNAPSHOT' + implementation project(':lilycore') +} +repositories { + mavenCentral() +} diff --git a/lilytoast/proguard-rules.pro b/lilytoast/proguard-rules.pro new file mode 100644 index 0000000..418646a --- /dev/null +++ b/lilytoast/proguard-rules.pro @@ -0,0 +1,25 @@ +# Add project specific ProGuard rules here. +# By default, the flags in this file are appended to flags specified +# in E:\Android\sdk/tools/proguard/proguard-android.txt +# You can edit the include path and order by changing the proguardFiles +# directive in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# Add any project specific keep options here: + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# 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 diff --git a/lilytoast/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java b/lilytoast/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java new file mode 100644 index 0000000..2d4fcfe --- /dev/null +++ b/lilytoast/src/androidTest/java/me/tuple/lily/ExampleInstrumentedTest.java @@ -0,0 +1,26 @@ +package me.tuple.lily; + +import android.content.Context; +import androidx.test.InstrumentationRegistry; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import static org.junit.Assert.*; + +/** + * Instrumentation test, which will execute on an Android device. + * + * @see Testing documentation + */ +@RunWith(AndroidJUnit4.class) +public class ExampleInstrumentedTest { + @Test + public void useAppContext() throws Exception { + // Context of the app under test. + Context appContext = InstrumentationRegistry.getTargetContext(); + + assertEquals("me.tuple.lilytoast.test", appContext.getPackageName()); + } +} diff --git a/lilytoast/src/main/AndroidManifest.xml b/lilytoast/src/main/AndroidManifest.xml new file mode 100644 index 0000000..c1cca43 --- /dev/null +++ b/lilytoast/src/main/AndroidManifest.xml @@ -0,0 +1,10 @@ + + + + + + + diff --git a/lilytoast/src/main/java/me/tuple/lily/toast/Snacky.kt b/lilytoast/src/main/java/me/tuple/lily/toast/Snacky.kt new file mode 100644 index 0000000..371ea07 --- /dev/null +++ b/lilytoast/src/main/java/me/tuple/lily/toast/Snacky.kt @@ -0,0 +1,279 @@ +package me.tuple.lily.toast + +import android.app.Activity +import android.content.Context +import android.graphics.Color +import android.graphics.Typeface +import androidx.annotation.ColorInt +import androidx.annotation.ColorRes +import androidx.annotation.DrawableRes +import androidx.annotation.StringRes +import android.util.AttributeSet +import android.view.Gravity +import android.view.ViewGroup +import android.view.animation.Animation +import android.view.animation.AnimationUtils +import android.widget.ImageView +import android.widget.LinearLayout +import android.widget.TextView +import me.tuple.lily.R +import me.tuple.lily.core.* +import me.tuple.lily.utils.FontCache + + +/** + * Created by LazyLoop. + */ + +class Snacky : LinearLayout { + private var activity: Activity + + constructor(activity: Activity) : this(activity, null) + + private constructor(context: Context?, attrs: AttributeSet?) : this(context, attrs, 0) + private constructor(context: Context?, attrs: AttributeSet?, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { + this.activity = context as Activity + inflate(context, R.layout.snacky_layout, this) + } + + private var icon: Int? = null + private var background: Int? = null + private var title: String? = null + private var message: String? = null + private var action: String? = null + private var titleColor: Int? = null + private var messageColor: Int? = null + private var actionColor: Int? = null + private var typeFace: Typeface? = null + private var layoutGravity: Int = Gravity.BOTTOM + + private val iconView by bind(R.id.snacky_icon) + private val titleView by bind(R.id.snacky_title) + private val messageView by bind(R.id.snacky_message) + private val actionView by bind(R.id.snacky_action) + private val snackyView by bind(R.id.snacky) + + fun title(@StringRes title: Int): Snacky { + title(context.getString(title)) + return this + } + + fun title(title: String): Snacky { + this.title = title + return this + } + + fun message(@StringRes message: Int): Snacky { + message(context.getString(message)) + return this + } + + fun message(message: String): Snacky { + this.message = message + return this + } + + fun action(@StringRes action: Int): Snacky { + action(context.getString(action)) + return this + } + + fun action(action: String): Snacky { + this.action = action + return this + } + + fun icon(@DrawableRes icon: Int): Snacky { + this.icon = icon + return this + } + + fun backgroundRes(@ColorRes bg: Int): Snacky { + this.background = Contexter.getColor(bg) + return this + } + + fun background(@ColorInt bg: Int): Snacky { + this.background = bg + return this + } + + + fun titleColorRes(@ColorRes bg: Int): Snacky { + this.titleColor = Contexter.getColor(bg) + return this + } + + fun titleColor(@ColorInt bg: Int): Snacky { + this.titleColor = bg + return this + } + + fun messageColorRes(@ColorRes bg: Int): Snacky { + this.messageColor = Contexter.getColor(bg) + return this + } + + fun messageColor(@ColorInt bg: Int): Snacky { + this.messageColor = bg + return this + } + + fun actionColorRes(@ColorRes bg: Int): Snacky { + this.actionColor = Contexter.getColor(bg) + return this + } + + fun actionColor(@ColorInt bg: Int): Snacky { + this.actionColor = bg + return this + } + + fun font(fontName: String): Snacky { + this.typeFace = FontCache.getFont(fontName) + return this + } + + fun font(typeface: Typeface): Snacky { + this.typeFace = typeFace + return this + } + + fun onTop(): Snacky { + this.layoutGravity = Gravity.TOP + return this + } + + fun show() { + val decorView = activity.window.decorView as ViewGroup + val content = decorView.findById(android.R.id.content) + if (this.parent == null) { + val container = if (this.layoutGravity == Gravity.BOTTOM) + content + else + decorView + + container.forEach { + if (it is Snacky) { + return + } + } + setGlobals() + constructView() + container.addView(this) + } + } + + private fun constructView() { + if (title.isNullOrBlank().not()) { + with(titleView) { + show() + text = title + setTypeface(typeFace, Typeface.BOLD) + setTextColor(titleColor!!) + } + } + + if (message.isNullOrBlank().not()) { + with(messageView) { + show() + text = message + typeface = typeFace + setTextColor(messageColor!!) + } + } + + if (action.isNullOrBlank().not()) { + with(actionView) { + show() + text = action + typeface = typeFace + setTextColor(actionColor!!) + } + } + + if (icon != null) { + with(iconView) { + setImageResource(icon!!) + } + } + with(snackyView) { + setBackgroundColor(this@Snacky.background!!) + if (layoutGravity == Gravity.TOP) { + val params = layoutParams as LayoutParams + params.gravity = Gravity.TOP + layoutParams = params + } else { + setPadding(16.dpToPx()) + } + } + setAnimations() + } + + private var slideOutAnimation: Animation? = null + + private var slideOutAnimationDuration: Long? = null + + private fun setAnimations() { + val slideInAnimation = AnimationUtils.loadAnimation(context, + if (layoutGravity == Gravity.BOTTOM) R.anim.slide_in_from_bottom else R.anim.slide_in_from_top) + slideInAnimation.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationStart(animation: Animation) { + + } + + override fun onAnimationEnd(animation: Animation) { + postDelayed({ dismiss() }, 2000) + } + + override fun onAnimationRepeat(animation: Animation) { + + } + }) + animation = slideInAnimation + + slideOutAnimation = AnimationUtils.loadAnimation(context, + if (layoutGravity == Gravity.BOTTOM) R.anim.slide_out_to_bottom else R.anim.slide_out_to_top) + slideOutAnimationDuration = slideOutAnimation!!.duration + } + + private fun dismiss() { + slideOutAnimation!!.setAnimationListener(object : Animation.AnimationListener { + override fun onAnimationStart(animation: Animation) {} + + override fun onAnimationEnd(animation: Animation) { + removeFromParent() + } + + override fun onAnimationRepeat(animation: Animation) {} + }) + startAnimation(slideOutAnimation) + } + + private fun removeFromParent() { + postDelayed({ + val parent = parent + if (parent != null) { + this.clearAnimation() + (parent as ViewGroup).removeView(this) + } + }, 200) + } + + private fun setGlobals() { + background = background ?: Contexter.resolveColor(R.attr.snacky_bg, Color.DKGRAY) + val fallbackTextColor: Int = Contexter.resolveColor(R.attr.snacky_text_color, Color.WHITE) + titleColor = titleColor ?: Contexter.resolveColor(R.attr.snacky_title_text_color, fallbackTextColor) + messageColor = messageColor ?: Contexter.resolveColor(R.attr.snacky_message_text_color, fallbackTextColor) + actionColor = actionColor ?: Contexter.resolveColor(R.attr.snacky_action_text_color, fallbackTextColor) + typeFace = typeFace ?: FontCache.getFont(Contexter.resolveString(R.attr.toasty_font)) + } + + override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) { + if (this.layoutGravity == Gravity.TOP) { + super.onLayout(changed, l, 0, r, measuredHeight) + } else { + super.onLayout(changed, l, t, r, b) + } + } +} \ No newline at end of file diff --git a/lilytoast/src/main/java/me/tuple/lily/toast/Toasty.kt b/lilytoast/src/main/java/me/tuple/lily/toast/Toasty.kt new file mode 100644 index 0000000..af573bf --- /dev/null +++ b/lilytoast/src/main/java/me/tuple/lily/toast/Toasty.kt @@ -0,0 +1,195 @@ +package me.tuple.lily.toast + +import android.content.Context +import android.graphics.Color +import android.graphics.Typeface +import androidx.annotation.* +import android.util.TypedValue +import android.view.Gravity +import android.widget.ImageView +import android.widget.TextView +import android.widget.Toast +import androidx.cardview.widget.CardView +import me.tuple.lily.R +import me.tuple.lily.core.* +import me.tuple.lily.utils.FontCache + +/** + * Created by LazyLoop. + * */ + +@Suppress("Unused") +class Toasty(private val context: Context) { + + private lateinit var message: String + + private var undoMessage: String? = null + + @ColorInt + private var background: Int? = null + + private var duration: Int = Toast.LENGTH_SHORT + + private var icon: Int? = null + + private var typeFace: Typeface? = null + + private var fontSize: Int? = null + + private var undoCallback: ((Boolean) -> Unit)? = null + + private var fontColor: Int? = null + + + fun message(@StringRes message: Int): Toasty { + message(context.getString(message)) + return this + } + + fun message(message: String): Toasty { + this.message = message + return this + } + + fun duration(duration: Int): Toasty { + this.duration = duration + return this + } + + fun backgroundRes(@ColorRes bg: Int): Toasty { + this.background = Contexter.getColor(bg) + return this + } + + fun background(@ColorInt bg: Int): Toasty { + this.background = bg + return this + } + + fun icon(@DrawableRes icon: Int): Toasty { + this.icon = icon + return this + } + + fun fontSizeRes(@DimenRes fontSize: Int): Toasty { + this.fontSize = Contexter.getDimensionPixelSize(fontSize) + return this + } + + fun fontSizeDp(fontSize: Int): Toasty { + this.fontSize = fontSize.dpToPx() + return this + } + + fun font(fontName: String): Toasty { + this.typeFace = FontCache.getFont(fontName) + return this + } + + fun font(typeface: Typeface): Toasty { + this.typeFace = typeface + return this + } + + fun fontColorRes(@ColorRes color: Int): Toasty { + this.fontColor = Contexter.getColor(color) + return this + } + + fun fontColor(@ColorInt fontColor: Int): Toasty { + this.fontColor = fontColor + return this + } + + fun undo(message: String, undoCallback: (Boolean) -> Unit): Toasty { + this.undoMessage = message + this.undoCallback = undoCallback + return this + } + + fun show() { + setGlobals() + val toast = constructToasty() + toast.show() + } + + private fun constructToasty(): Toast { + val toast = Toast(context) + toast.duration = duration + val inflater = context.layoutInflater + val view = inflater.inflate(R.layout.toasty_layout, null) + toast.view = view + toast.setGravity(Gravity.BOTTOM or Gravity.FILL_HORIZONTAL, 16.dpToPx(), 16.dpToPx()) + with(view) { + findById(R.id.toast_bg).apply { + setCardBackgroundColor(this@Toasty.background!!) + } + + if (icon != null) { + findById(R.id.toasty_icon).apply { + show() + setImageResource(this@Toasty.icon!!) + } + } + + findById(R.id.toasty_message).apply { + text = message + typeface = typeFace + setTextColor(fontColor!!) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize!!.toFloat()) + } + } + return toast + } + + private fun setGlobals() { + background = background ?: Contexter.resolveColor(R.attr.toasty_bg, Color.DKGRAY) + typeFace = typeFace ?: FontCache.getFont(Contexter.resolveString(R.attr.toasty_font)) + fontSize = fontSize ?: Contexter.resolveDimension(R.attr.toasty_font_size, 16.dpToPx()) + fontColor = fontColor ?: Contexter.resolveColor(R.attr.toasty_font_color, Color.WHITE) + } +} + +fun toasty(message: Int) { + Toasty(Contexter.context).apply { + message(message) + }.show() +} + +fun toasty(message: String) { + Toasty(Contexter.context).apply { + message(message) + }.show() +} + +fun toastyError(message: Int, custom: ((Toasty) -> Unit)? = null) { + Toasty(Contexter.context).apply { + icon(R.drawable.ic_alert_circle) + message(message) + custom?.invoke(this) + }.show() +} + +fun toastyError(message: String, custom: ((Toasty) -> Unit)? = null) { + Toasty(Contexter.context).apply { + message(message) + icon(R.drawable.ic_alert_circle) + custom?.invoke(this) + }.show() +} + +fun toastySuccess(message: String, custom: ((Toasty) -> Unit)? = null) { + Toasty(Contexter.context).apply { + message(message) + icon(R.drawable.ic_check_circle) + custom?.invoke(this) + }.show() +} + +fun toastySuccess(message: Int, custom: ((Toasty) -> Unit)? = null) { + Toasty(Contexter.context).apply { + message(message) + icon(R.drawable.ic_check_circle) + custom?.invoke(this) + }.show() +} \ No newline at end of file diff --git a/lilytoast/src/main/res/anim/slide_in_from_bottom.xml b/lilytoast/src/main/res/anim/slide_in_from_bottom.xml new file mode 100644 index 0000000..b25a451 --- /dev/null +++ b/lilytoast/src/main/res/anim/slide_in_from_bottom.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/anim/slide_in_from_top.xml b/lilytoast/src/main/res/anim/slide_in_from_top.xml new file mode 100644 index 0000000..1fa4521 --- /dev/null +++ b/lilytoast/src/main/res/anim/slide_in_from_top.xml @@ -0,0 +1,8 @@ + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/anim/slide_out_to_bottom.xml b/lilytoast/src/main/res/anim/slide_out_to_bottom.xml new file mode 100644 index 0000000..3ceb44d --- /dev/null +++ b/lilytoast/src/main/res/anim/slide_out_to_bottom.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/anim/slide_out_to_top.xml b/lilytoast/src/main/res/anim/slide_out_to_top.xml new file mode 100644 index 0000000..bb0c715 --- /dev/null +++ b/lilytoast/src/main/res/anim/slide_out_to_top.xml @@ -0,0 +1,9 @@ + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/drawable/ic_alert_circle.png b/lilytoast/src/main/res/drawable/ic_alert_circle.png new file mode 100644 index 0000000000000000000000000000000000000000..058c3f78e8227a21c9c04bd02001b4501817646f GIT binary patch literal 1592 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 QKmY&$07*qoM6N<$f-0KEAOHXW literal 0 HcmV?d00001 diff --git a/lilytoast/src/main/res/layout/snacky_layout.xml b/lilytoast/src/main/res/layout/snacky_layout.xml new file mode 100644 index 0000000..9a7c831 --- /dev/null +++ b/lilytoast/src/main/res/layout/snacky_layout.xml @@ -0,0 +1,68 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/layout/toasty_layout.xml b/lilytoast/src/main/res/layout/toasty_layout.xml new file mode 100644 index 0000000..9409fb8 --- /dev/null +++ b/lilytoast/src/main/res/layout/toasty_layout.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/lilytoast/src/main/res/values/attrs.xml b/lilytoast/src/main/res/values/attrs.xml new file mode 100644 index 0000000..bf33492 --- /dev/null +++ b/lilytoast/src/main/res/values/attrs.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/lilytoast/src/main/res/values/dimens.xml b/lilytoast/src/main/res/values/dimens.xml new file mode 100644 index 0000000..3c0b40b --- /dev/null +++ b/lilytoast/src/main/res/values/dimens.xml @@ -0,0 +1,5 @@ + + + 10dp + 16dp + \ No newline at end of file diff --git a/lilytoast/src/main/res/values/strings.xml b/lilytoast/src/main/res/values/strings.xml new file mode 100644 index 0000000..57c3679 --- /dev/null +++ b/lilytoast/src/main/res/values/strings.xml @@ -0,0 +1,4 @@ + + lilytoast + Undo + diff --git a/lilytoast/src/test/java/me/tuple/lily/ExampleUnitTest.java b/lilytoast/src/test/java/me/tuple/lily/ExampleUnitTest.java new file mode 100644 index 0000000..3b49356 --- /dev/null +++ b/lilytoast/src/test/java/me/tuple/lily/ExampleUnitTest.java @@ -0,0 +1,17 @@ +package me.tuple.lily; + +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Example local unit test, which will execute on the development machine (host). + * + * @see Testing documentation + */ +public class ExampleUnitTest { + @Test + public void addition_isCorrect() throws Exception { + assertEquals(4, 2 + 2); + } +} \ No newline at end of file diff --git a/local.properties b/local.properties index d21075b..43e1f0b 100644 --- a/local.properties +++ b/local.properties @@ -4,6 +4,6 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Fri Oct 11 07:41:06 EEST 2019 +#Sat Oct 19 13:30:06 EEST 2019 ndk.dir=/home/pawlo/Android/Sdk/ndk-bundle sdk.dir=/home/pawlo/Android/Sdk diff --git a/remote/build.gradle b/remote/build.gradle deleted file mode 100644 index 22baeed..0000000 --- a/remote/build.gradle +++ /dev/null @@ -1,75 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' -apply plugin: 'kotlin-kapt' -apply plugin: 'com.github.dcendents.android-maven' -group = 'com.github.VRGsoftUA' - -android { - compileSdkVersion sdk_compile_version - - defaultConfig { - minSdkVersion sdk_min_version - targetSdkVersion sdk_compile_version - 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 1.8 - targetCompatibility 1.8 - } - - kotlinOptions { - jvmTarget = "1.8" - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - androidTest.java.srcDirs += 'src/androidTest/kotlin' - androidTest.resources.srcDirs += 'src/androidTest/res' - } - -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - rootProject.coreRemote.each { - add(it.configuration, it.dependency, it.options) - } -} - -task sourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.sourceFiles -} - -task javadoc(type: Javadoc) { - source = android.sourceSets.main.java.sourceFiles - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -task classesJar(type: Jar) { - from "$buildDir/intermediates/classes/release" -} - -artifacts { - archives classesJar - archives javadocJar - archives sourcesJar -} diff --git a/remote/remote.iml b/remote/remote.iml deleted file mode 100644 index 40c62cb..0000000 --- a/remote/remote.iml +++ /dev/null @@ -1,226 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/remote/retrofit.iml b/remote/retrofit.iml deleted file mode 100644 index 67823cd..0000000 --- a/remote/retrofit.iml +++ /dev/null @@ -1,206 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/remote/src/main/AndroidManifest.xml b/remote/src/main/AndroidManifest.xml deleted file mode 100644 index 0abfce0..0000000 --- a/remote/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/remote/src/main/java/com/vrgsoft/remote/BaseRepository.kt b/remote/src/main/java/com/vrgsoft/remote/BaseRepository.kt deleted file mode 100644 index 10cc84d..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/BaseRepository.kt +++ /dev/null @@ -1,50 +0,0 @@ -package com.vrgsoft.remote - -import androidx.annotation.VisibleForTesting -import com.vrgsoft.remote.error.ConnectionError -import com.vrgsoft.remote.error.NetworkError -import com.vrgsoft.remote.result.BaseResult -import com.vrgsoft.remote.result.ErrorResult -import com.vrgsoft.remote.result.SuccessResult -import kotlinx.coroutines.Deferred -import retrofit2.Response - -abstract class BaseRepository { - @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) - suspend fun execute(call: (() -> Deferred>)): BaseResult { - try { - val result = call.invoke().await() - - return if (result.isSuccessful) { - SuccessResult(result.body()!!) - } else { - ErrorResult( - NetworkError( - result.code(), - result.message() - ) - ) - } - } catch (e: Exception) { - return ErrorResult(ConnectionError()) - } - } - - @VisibleForTesting(otherwise = VisibleForTesting.PRIVATE) - fun SuccessResult.transform(mapper: ((item: T) -> M)): SuccessResult { - return SuccessResult( - mapper.invoke(this.data) - ) - } - - @VisibleForTesting(otherwise = VisibleForTesting.PROTECTED) - fun BaseResult.transformIsSuccess(mapper: ((item: T) -> M)): BaseResult { - return if (this is SuccessResult<*>) { - (this as SuccessResult).transform(mapper) - } else { - ErrorResult( - (this as ErrorResult).error - ) - } - } -} \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/Extentions.kt b/remote/src/main/java/com/vrgsoft/remote/Extentions.kt deleted file mode 100644 index c187e7f..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/Extentions.kt +++ /dev/null @@ -1,20 +0,0 @@ -package com.vrgsoft.remote - -import com.vrgsoft.remote.result.BaseResult -import com.vrgsoft.remote.result.SuccessResult - -fun BaseResult.mapDataIfSuccess(mapper: ((item: T) -> M)): M? { - if (this !is SuccessResult) { - return null - } - - return mapper.invoke(this.data) -} - -fun BaseResult.getDataIfSuccess(): T? { - if (this !is SuccessResult) { - return null - } - - return this.data -} \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/error/BaseError.kt b/remote/src/main/java/com/vrgsoft/remote/error/BaseError.kt deleted file mode 100644 index 8c4e111..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/error/BaseError.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.vrgsoft.remote.error - -abstract class BaseError \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/error/ConnectionError.kt b/remote/src/main/java/com/vrgsoft/remote/error/ConnectionError.kt deleted file mode 100644 index 4c7d820..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/error/ConnectionError.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.vrgsoft.remote.error - -class ConnectionError : BaseError() \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/error/NetworkError.kt b/remote/src/main/java/com/vrgsoft/remote/error/NetworkError.kt deleted file mode 100644 index bf487b6..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/error/NetworkError.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.vrgsoft.remote.error - -class NetworkError( - val code: Int, - val message: String -) : BaseError() \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/result/BaseResult.kt b/remote/src/main/java/com/vrgsoft/remote/result/BaseResult.kt deleted file mode 100644 index 03b2d52..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/result/BaseResult.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.vrgsoft.remote.result - -abstract class BaseResult \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/result/ErrorResult.kt b/remote/src/main/java/com/vrgsoft/remote/result/ErrorResult.kt deleted file mode 100644 index 44099be..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/result/ErrorResult.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.vrgsoft.remote.result - -import com.vrgsoft.remote.error.BaseError - -class ErrorResult( - val error: BaseError -) : BaseResult() \ No newline at end of file diff --git a/remote/src/main/java/com/vrgsoft/remote/result/SuccessResult.kt b/remote/src/main/java/com/vrgsoft/remote/result/SuccessResult.kt deleted file mode 100644 index b09bd4f..0000000 --- a/remote/src/main/java/com/vrgsoft/remote/result/SuccessResult.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.vrgsoft.remote.result - -class SuccessResult( - val data: T -) : BaseResult() \ No newline at end of file diff --git a/remote/src/main/res/values/strings.xml b/remote/src/main/res/values/strings.xml deleted file mode 100644 index 36875bf..0000000 --- a/remote/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Core Remote - diff --git a/remote/src/test/java/com/vrgsoft/remote/BaseRepositoryTest.kt b/remote/src/test/java/com/vrgsoft/remote/BaseRepositoryTest.kt deleted file mode 100644 index 3bf81f6..0000000 --- a/remote/src/test/java/com/vrgsoft/remote/BaseRepositoryTest.kt +++ /dev/null @@ -1,154 +0,0 @@ -package com.vrgsoft.remote - -import com.nhaarman.mockitokotlin2.doReturn -import com.nhaarman.mockitokotlin2.mock -import com.vrgsoft.remote.error.ConnectionError -import com.vrgsoft.remote.error.NetworkError -import com.vrgsoft.remote.result.ErrorResult -import com.vrgsoft.remote.result.SuccessResult -import kotlinx.coroutines.ExperimentalCoroutinesApi -import kotlinx.coroutines.GlobalScope -import kotlinx.coroutines.async -import kotlinx.coroutines.test.runBlockingTest -import org.junit.Assert.assertEquals -import org.junit.Test -import retrofit2.Response - -@ExperimentalCoroutinesApi -internal class BaseRepositoryTest { - lateinit var repository: BaseRepository - lateinit var api: TestApi - - private var isSuccess = true - - fun setUp() { - repository = TestRepository() - - val response = mock> { - on { isSuccessful } doReturn isSuccess - on { body() } doReturn "1" - on { code() } doReturn 401 - on { message() } doReturn "Unauthorized" - } - - api = mock { - on { call() } doReturn response.toDeferred() - } - } - - @Test - fun transform() { - setUp() - val result = SuccessResult("1") - - val transformed = with(repository) { - result.transform { it.toInt() } - } - - assertEquals(1, transformed.data) - } - - @Test - fun transformIsSuccess() { - setUp() - val result = SuccessResult("1") - - val transformed = with(repository) { - result.transformIsSuccess { it.toInt() } - } - - require(transformed is SuccessResult) - assertEquals(1, transformed.data) - } - - @Test - fun transformIsConnectionError() { - setUp() - val result = ErrorResult(ConnectionError()) - - val transformed = with(repository) { - result.transformIsSuccess { it.toInt() } - } - - require(transformed is ErrorResult) - require(transformed.error is ConnectionError) - } - - @Test - fun transformIsNetworkError() { - setUp() - val code = 401 - val message = "Unauthorized" - val result = ErrorResult(NetworkError(code, message)) - - val transformed = with(repository) { - result.transformIsSuccess { it.toInt() } - } - - require(transformed is ErrorResult) - - with(transformed) { - require(error is NetworkError) - assertEquals(code, (error as NetworkError).code) - assertEquals(message, (error as NetworkError).message) - } - } - - @Test - fun executeSuccess() { - isSuccess = true - setUp() - val data = "1" - - runBlockingTest { - val transformed = with(repository) { - execute { api.call() } - } - - require(transformed is SuccessResult) - assertEquals(data, transformed.data) - } - } - - @Test - fun executeError() { - isSuccess = false - setUp() - val code = 401 - val message = "Unauthorized" - - runBlockingTest { - val transformed = with(repository) { - execute { api.call() } - } - - require(transformed is ErrorResult) - require(transformed.error is NetworkError) - - with(transformed.error as NetworkError) { - assertEquals(code, this.code) - assertEquals(message, this.message) - } - } - } - - @Test - fun executeThrow() { - isSuccess = true - setUp() - - runBlockingTest { - val transformed = with(repository) { - execute { - throw IllegalArgumentException() - api.call() - } - } - - require(transformed is ErrorResult) - require(transformed.error is ConnectionError) - } - } - - fun T.toDeferred() = GlobalScope.async { this@toDeferred } -} \ No newline at end of file diff --git a/remote/src/test/java/com/vrgsoft/remote/TestApi.kt b/remote/src/test/java/com/vrgsoft/remote/TestApi.kt deleted file mode 100644 index ce951ad..0000000 --- a/remote/src/test/java/com/vrgsoft/remote/TestApi.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.vrgsoft.remote - -import kotlinx.coroutines.Deferred -import retrofit2.Response - -interface TestApi { - fun call(): Deferred> -} \ No newline at end of file diff --git a/remote/src/test/java/com/vrgsoft/remote/TestRepository.kt b/remote/src/test/java/com/vrgsoft/remote/TestRepository.kt deleted file mode 100644 index ecdfd8f..0000000 --- a/remote/src/test/java/com/vrgsoft/remote/TestRepository.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.vrgsoft.remote - -class TestRepository : BaseRepository() \ No newline at end of file diff --git a/remote/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/remote/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker deleted file mode 100644 index 1f0955d..0000000 --- a/remote/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker +++ /dev/null @@ -1 +0,0 @@ -mock-maker-inline diff --git a/retrofit/build.gradle b/retrofit/build.gradle deleted file mode 100644 index 11ab012..0000000 --- a/retrofit/build.gradle +++ /dev/null @@ -1,75 +0,0 @@ -apply plugin: 'com.android.library' -apply plugin: 'kotlin-android' -apply plugin: 'kotlin-android-extensions' -apply plugin: 'kotlin-kapt' -apply plugin: 'com.github.dcendents.android-maven' -group = 'com.github.VRGsoftUA' - -android { - compileSdkVersion sdk_compile_version - - defaultConfig { - minSdkVersion sdk_min_version - targetSdkVersion sdk_compile_version - 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 1.8 - targetCompatibility 1.8 - } - - kotlinOptions { - jvmTarget = "1.8" - } - - sourceSets { - main.java.srcDirs += 'src/main/kotlin' - androidTest.java.srcDirs += 'src/androidTest/kotlin' - androidTest.resources.srcDirs += 'src/androidTest/res' - } - -} - -dependencies { - implementation fileTree(include: ['*.jar'], dir: 'libs') - rootProject.retrofitModule.each { - add(it.configuration, it.dependency, it.options) - } -} - -task sourcesJar(type: Jar) { - classifier = 'sources' - from android.sourceSets.main.java.sourceFiles -} - -task javadoc(type: Javadoc) { - source = android.sourceSets.main.java.sourceFiles - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) -} - -task javadocJar(type: Jar, dependsOn: javadoc) { - classifier = 'javadoc' - from javadoc.destinationDir -} - -task classesJar(type: Jar) { - from "$buildDir/intermediates/classes/release" -} - -artifacts { - archives classesJar - archives javadocJar - archives sourcesJar -} \ No newline at end of file diff --git a/retrofit/retrofit.iml b/retrofit/retrofit.iml deleted file mode 100644 index 6d36494..0000000 --- a/retrofit/retrofit.iml +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/retrofit/src/main/AndroidManifest.xml b/retrofit/src/main/AndroidManifest.xml deleted file mode 100644 index bf1669d..0000000 --- a/retrofit/src/main/AndroidManifest.xml +++ /dev/null @@ -1,2 +0,0 @@ - diff --git a/retrofit/src/main/java/com/vrgsoft/retrofit/RetrofitModule.kt b/retrofit/src/main/java/com/vrgsoft/retrofit/RetrofitModule.kt deleted file mode 100644 index 6f64d45..0000000 --- a/retrofit/src/main/java/com/vrgsoft/retrofit/RetrofitModule.kt +++ /dev/null @@ -1,60 +0,0 @@ -package com.vrgsoft.retrofit - -import android.content.Context -import com.jakewharton.retrofit2.adapter.kotlin.coroutines.CoroutineCallAdapterFactory -import com.vrgsoft.retrofit.common.AuthInterceptor -import com.vrgsoft.retrofit.common.HeaderInterceptor -import com.vrgsoft.retrofit.common.RetrofitConfig -import okhttp3.Cache -import okhttp3.OkHttpClient -import okhttp3.logging.HttpLoggingInterceptor -import org.kodein.di.Kodein -import org.kodein.di.generic.bind -import org.kodein.di.generic.instance -import org.kodein.di.generic.provider -import org.kodein.di.generic.singleton -import retrofit2.Retrofit -import retrofit2.adapter.rxjava2.RxJava2CallAdapterFactory -import retrofit2.converter.gson.GsonConverterFactory -import retrofit2.converter.scalars.ScalarsConverterFactory -import java.util.concurrent.TimeUnit - -object RetrofitModule { - fun get() = Kodein.Module("RetrofitModule") { - bind() with singleton { - Retrofit.Builder() - .baseUrl(RetrofitConfig.baseUrl) - .addConverterFactory(ScalarsConverterFactory.create()) - .addConverterFactory(GsonConverterFactory.create()) - .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) - .addCallAdapterFactory(CoroutineCallAdapterFactory()) - .client(instance()) - .build() - } - - bind() with singleton { - val builder = OkHttpClient.Builder() - - builder.cache(instance()) - - if (BuildConfig.DEBUG) { - val loggingInterceptor = HttpLoggingInterceptor() - loggingInterceptor.level = HttpLoggingInterceptor.Level.BODY - builder.addInterceptor(loggingInterceptor) - } - - builder.connectTimeout(100, TimeUnit.SECONDS) - builder.retryOnConnectionFailure(true) - builder.addInterceptor(instance()) - builder.addInterceptor(HeaderInterceptor()) - builder.build() - } - - bind() from provider { - val cacheSize = 10 * 1024 * 1024 // 10 MB - Cache(instance().cacheDir, cacheSize.toLong()) - } - - bind() with singleton { AuthInterceptor(RetrofitConfig.auth) } - } -} \ No newline at end of file diff --git a/retrofit/src/main/java/com/vrgsoft/retrofit/common/Auth.kt b/retrofit/src/main/java/com/vrgsoft/retrofit/common/Auth.kt deleted file mode 100644 index 2f93d82..0000000 --- a/retrofit/src/main/java/com/vrgsoft/retrofit/common/Auth.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.vrgsoft.retrofit.common - -import okhttp3.Interceptor -import okhttp3.Response - -interface Auth { - fun process(chain: Interceptor.Chain?): Response -} \ No newline at end of file diff --git a/retrofit/src/main/java/com/vrgsoft/retrofit/common/AuthInterceptor.kt b/retrofit/src/main/java/com/vrgsoft/retrofit/common/AuthInterceptor.kt deleted file mode 100644 index 23a40a0..0000000 --- a/retrofit/src/main/java/com/vrgsoft/retrofit/common/AuthInterceptor.kt +++ /dev/null @@ -1,14 +0,0 @@ -package com.vrgsoft.retrofit.common - -import okhttp3.Interceptor -import okhttp3.Response - -class AuthInterceptor( - private val auth: Auth? = null -) : Interceptor { - override fun intercept(chain: Interceptor.Chain?): Response { - return auth?.process(chain) ?: chain!!.request()!!.newBuilder()?.let { - chain.proceed(it.build()) - }!! - } -} \ No newline at end of file diff --git a/retrofit/src/main/java/com/vrgsoft/retrofit/common/HeaderInterceptor.kt b/retrofit/src/main/java/com/vrgsoft/retrofit/common/HeaderInterceptor.kt deleted file mode 100644 index ebd0f6f..0000000 --- a/retrofit/src/main/java/com/vrgsoft/retrofit/common/HeaderInterceptor.kt +++ /dev/null @@ -1,12 +0,0 @@ -package com.vrgsoft.retrofit.common - -import okhttp3.Interceptor -import okhttp3.Response - -class HeaderInterceptor : Interceptor { - override fun intercept(chain: Interceptor.Chain?): Response { - val builder = chain!!.request()!!.newBuilder() - - return chain.proceed(builder.build()) - } -} \ No newline at end of file diff --git a/retrofit/src/main/java/com/vrgsoft/retrofit/common/RetrofitConfig.kt b/retrofit/src/main/java/com/vrgsoft/retrofit/common/RetrofitConfig.kt deleted file mode 100644 index 5e71034..0000000 --- a/retrofit/src/main/java/com/vrgsoft/retrofit/common/RetrofitConfig.kt +++ /dev/null @@ -1,6 +0,0 @@ -package com.vrgsoft.retrofit.common - -object RetrofitConfig { - lateinit var baseUrl: String - lateinit var auth: Auth -} \ No newline at end of file diff --git a/retrofit/src/main/res/values/strings.xml b/retrofit/src/main/res/values/strings.xml deleted file mode 100644 index 183cc99..0000000 --- a/retrofit/src/main/res/values/strings.xml +++ /dev/null @@ -1,3 +0,0 @@ - - Retrofit - diff --git a/settings.gradle b/settings.gradle index ad9677d..01e5a7f 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1 @@ -include 'app' -include 'retrofit' -include 'remote' \ No newline at end of file +include ':app', ':lilycore', ':lilypref', ':lilytoast', ':lilyadapter'