From 1c773df3e114b7f453fc39fe643138663087aea3 Mon Sep 17 00:00:00 2001 From: Danil Nikolaev Date: Sat, 10 Jul 2021 17:39:43 +0300 Subject: [PATCH] Android Navigation Component, Dagger Hilt and other things --- app/build.gradle.kts | 101 ++++--- app/src/main/AndroidManifest.xml | 1 + .../main/java/com/meloda/fast/UserConfig.kt | 34 +-- .../com/meloda/fast/activity/MainActivity.kt | 8 +- .../main/java/com/meloda/fast/api/Answer.kt | 6 + .../main/java/com/meloda/fast/api/Requests.kt | 2 + .../main/java/com/meloda/fast/api/VKAuth.kt | 19 +- .../java/com/meloda/fast/api/VKConstants.kt | 6 + .../main/java/com/meloda/fast/api/VKRepo.kt | 7 + .../com/meloda/fast/base/BaseVMFragment.kt | 33 +++ .../com/meloda/fast/base/viewmodel/BaseVM.kt | 30 ++ .../com/meloda/fast/base/viewmodel/Events.kt | 8 + .../com/meloda/fast/base/viewmodel/VKEvent.kt | 3 + .../java/com/meloda/fast/common/AppGlobal.kt | 5 +- .../fast/extensions/NavigationExtensions.kt | 261 ++++++++++++++++++ .../com/meloda/fast/fragment/LoginFragment.kt | 22 -- .../fast/fragment/login/LoginFragment.kt | 220 +++++++++++++++ .../com/meloda/fast/fragment/login/LoginVM.kt | 161 +++++++++++ .../fast/fragment/login/ValidationFragment.kt | 75 +++++ .../meloda/fast/fragment/main/MainFragment.kt | 38 +++ .../com/meloda/fast/fragment/main/MainVM.kt | 5 + .../messages/ConversationsFragment.kt | 9 + .../res/drawable/edit_text_box_background.xml | 7 + app/src/main/res/layout/activity_main.xml | 52 +--- .../res/layout/fragment_conversations.xml | 6 +- app/src/main/res/layout/fragment_login.xml | 221 +++++++-------- app/src/main/res/layout/fragment_main.xml | 29 ++ .../main/res/layout/fragment_validation.xml | 9 + app/src/main/res/navigation/friends.xml | 6 + app/src/main/res/navigation/main.xml | 46 +++ app/src/main/res/navigation/messages.xml | 6 + app/src/main/res/values-night/themes.xml | 48 ---- app/src/main/res/values/strings.xml | 1 + app/src/main/res/values/themes.xml | 23 +- build.gradle.kts | 7 +- buildSrc/build.gradle.kts | 9 - .../kotlin/main/BuildPlugins$android$2.class | Bin 1068 -> 0 bytes .../kotlin/main/BuildPlugins$kotlin$2.class | Bin 1077 -> 0 bytes .../classes/kotlin/main/BuildPlugins.class | Bin 1598 -> 0 bytes .../classes/kotlin/main/ConfigData.class | Bin 1085 -> 0 bytes .../classes/kotlin/main/Deps$acra$2.class | Bin 1021 -> 0 bytes .../kotlin/main/Deps$appCompat$2.class | Bin 1054 -> 0 bytes .../classes/kotlin/main/Deps$cardView$2.class | Bin 1042 -> 0 bytes .../classes/kotlin/main/Deps$core$2.class | Bin 1035 -> 0 bytes .../kotlin/main/Deps$coroutineAndroid$2.class | Bin 1080 -> 0 bytes .../kotlin/main/Deps$coroutineCore$2.class | Bin 1071 -> 0 bytes .../kotlin/main/Deps$desugaring$2.class | Bin 1054 -> 0 bytes .../classes/kotlin/main/Deps$fragment$2.class | Bin 1046 -> 0 bytes .../classes/kotlin/main/Deps$gson$2.class | Bin 1033 -> 0 bytes .../classes/kotlin/main/Deps$jsoup$2.class | Bin 1026 -> 0 bytes .../classes/kotlin/main/Deps$kotlin$2.class | Bin 1051 -> 0 bytes .../classes/kotlin/main/Deps$material$2.class | Bin 1057 -> 0 bytes .../kotlin/main/Deps$preferences$2.class | Bin 1056 -> 0 bytes .../kotlin/main/Deps$recyclerView$2.class | Bin 1058 -> 0 bytes .../kotlin/main/Deps$roomCompiler$2.class | Bin 1051 -> 0 bytes .../kotlin/main/Deps$roomRuntime$2.class | Bin 1048 -> 0 bytes .../main/Deps$swipeRefreshLayout$2.class | Bin 1090 -> 0 bytes buildSrc/build/classes/kotlin/main/Deps.class | Bin 5692 -> 0 bytes .../main/META-INF/buildSrc.kotlin_module | Bin 16 -> 0 bytes .../build/classes/kotlin/main/Versions.class | Bin 2084 -> 0 bytes buildSrc/build/kotlin/buildSrcjar-classes.txt | 1 - .../kotlin/compileKotlin/build-history.bin | Bin 2790 -> 0 bytes .../caches-jvm/inputs/source-to-output.tab | Bin 4096 -> 0 bytes .../inputs/source-to-output.tab.keystream | Bin 4096 -> 0 bytes .../inputs/source-to-output.tab.keystream.len | Bin 8 -> 0 bytes .../inputs/source-to-output.tab.len | Bin 8 -> 0 bytes .../inputs/source-to-output.tab.values.at | Bin 20151 -> 0 bytes .../caches-jvm/inputs/source-to-output.tab_i | Bin 32768 -> 0 bytes .../inputs/source-to-output.tab_i.len | Bin 8 -> 0 bytes .../jvm/kotlin/class-fq-name-to-source.tab | Bin 4096 -> 0 bytes .../class-fq-name-to-source.tab.keystream | Bin 4096 -> 0 bytes .../class-fq-name-to-source.tab.keystream.len | Bin 8 -> 0 bytes .../kotlin/class-fq-name-to-source.tab.len | Bin 8 -> 0 bytes .../class-fq-name-to-source.tab.values.at | Bin 2148 -> 0 bytes .../jvm/kotlin/class-fq-name-to-source.tab_i | Bin 32768 -> 0 bytes .../kotlin/class-fq-name-to-source.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab | Bin 4096 -> 0 bytes .../jvm/kotlin/constants.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/constants.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab.len | Bin 8 -> 0 bytes .../jvm/kotlin/constants.tab.values.at | Bin 6065 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/constants.tab_i.len | Bin 8 -> 0 bytes .../jvm/kotlin/internal-name-to-source.tab | Bin 4096 -> 0 bytes .../internal-name-to-source.tab.keystream | Bin 4096 -> 0 bytes .../internal-name-to-source.tab.keystream.len | Bin 8 -> 0 bytes .../kotlin/internal-name-to-source.tab.len | Bin 8 -> 0 bytes .../internal-name-to-source.tab.values.at | Bin 15183 -> 0 bytes .../jvm/kotlin/internal-name-to-source.tab_i | Bin 32768 -> 0 bytes .../kotlin/internal-name-to-source.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab | Bin 4096 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.keystream | Bin 4096 -> 0 bytes .../jvm/kotlin/proto.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.len | Bin 8 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab.values.at | Bin 19781 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/jvm/kotlin/proto.tab_i.len | Bin 8 -> 0 bytes .../jvm/kotlin/source-to-classes.tab | Bin 4096 -> 0 bytes .../kotlin/source-to-classes.tab.keystream | Bin 4096 -> 0 bytes .../source-to-classes.tab.keystream.len | Bin 8 -> 0 bytes .../jvm/kotlin/source-to-classes.tab.len | Bin 8 -> 0 bytes .../kotlin/source-to-classes.tab.values.at | Bin 3783 -> 0 bytes .../jvm/kotlin/source-to-classes.tab_i | Bin 32768 -> 0 bytes .../jvm/kotlin/source-to-classes.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/counters.tab | 2 - .../caches-jvm/lookups/file-to-id.tab | Bin 4096 -> 0 bytes .../lookups/file-to-id.tab.keystream | Bin 4096 -> 0 bytes .../lookups/file-to-id.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab.len | Bin 8 -> 0 bytes .../lookups/file-to-id.tab.values.at | Bin 157 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/file-to-id.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab | Bin 4096 -> 0 bytes .../lookups/id-to-file.tab.keystream | Bin 4096 -> 0 bytes .../lookups/id-to-file.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab.len | Bin 8 -> 0 bytes .../lookups/id-to-file.tab.values.at | Bin 1437 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/id-to-file.tab_i.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab | Bin 4096 -> 0 bytes .../caches-jvm/lookups/lookups.tab.keystream | Bin 4096 -> 0 bytes .../lookups/lookups.tab.keystream.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab.len | Bin 8 -> 0 bytes .../caches-jvm/lookups/lookups.tab.values.at | Bin 17919 -> 0 bytes .../caches-jvm/lookups/lookups.tab_i | Bin 32768 -> 0 bytes .../caches-jvm/lookups/lookups.tab_i.len | Bin 8 -> 0 bytes .../build/kotlin/compileKotlin/last-build.bin | Bin 81 -> 0 bytes buildSrc/build/libs/buildSrc.jar | Bin 20318 -> 0 bytes .../plugin-under-test-metadata.properties | 1 - .../plugin-development/validation-report.txt | 0 .../source-roots/buildSrc/source-roots.txt | 8 - buildSrc/build/tmp/jar/MANIFEST.MF | 2 - buildSrc/src/main/kotlin/ConfigData.kt | 10 - buildSrc/src/main/kotlin/Dependencies.kt | 31 --- buildSrc/src/main/kotlin/Versions.kt | 34 --- settings.gradle.kts | 2 +- 136 files changed, 1214 insertions(+), 401 deletions(-) create mode 100644 app/src/main/java/com/meloda/fast/api/Answer.kt create mode 100644 app/src/main/java/com/meloda/fast/api/Requests.kt create mode 100644 app/src/main/java/com/meloda/fast/api/VKRepo.kt create mode 100644 app/src/main/java/com/meloda/fast/base/BaseVMFragment.kt create mode 100644 app/src/main/java/com/meloda/fast/base/viewmodel/BaseVM.kt create mode 100644 app/src/main/java/com/meloda/fast/base/viewmodel/Events.kt create mode 100644 app/src/main/java/com/meloda/fast/base/viewmodel/VKEvent.kt create mode 100644 app/src/main/java/com/meloda/fast/extensions/NavigationExtensions.kt delete mode 100644 app/src/main/java/com/meloda/fast/fragment/LoginFragment.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/login/LoginFragment.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/login/LoginVM.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/login/ValidationFragment.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/main/MainFragment.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/main/MainVM.kt create mode 100644 app/src/main/java/com/meloda/fast/fragment/messages/ConversationsFragment.kt create mode 100644 app/src/main/res/drawable/edit_text_box_background.xml create mode 100644 app/src/main/res/layout/fragment_main.xml create mode 100644 app/src/main/res/layout/fragment_validation.xml create mode 100644 app/src/main/res/navigation/friends.xml create mode 100644 app/src/main/res/navigation/main.xml create mode 100644 app/src/main/res/navigation/messages.xml delete mode 100644 app/src/main/res/values-night/themes.xml delete mode 100644 buildSrc/build.gradle.kts delete mode 100644 buildSrc/build/classes/kotlin/main/BuildPlugins$android$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/BuildPlugins$kotlin$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/BuildPlugins.class delete mode 100644 buildSrc/build/classes/kotlin/main/ConfigData.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$acra$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$appCompat$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$cardView$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$core$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$coroutineAndroid$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$coroutineCore$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$desugaring$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$fragment$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$gson$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$jsoup$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$kotlin$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$material$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$preferences$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$recyclerView$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$roomCompiler$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$roomRuntime$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps$swipeRefreshLayout$2.class delete mode 100644 buildSrc/build/classes/kotlin/main/Deps.class delete mode 100644 buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module delete mode 100644 buildSrc/build/classes/kotlin/main/Versions.class delete mode 100644 buildSrc/build/kotlin/buildSrcjar-classes.txt delete mode 100644 buildSrc/build/kotlin/compileKotlin/build-history.bin delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i delete mode 100644 buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len delete mode 100644 buildSrc/build/kotlin/compileKotlin/last-build.bin delete mode 100644 buildSrc/build/libs/buildSrc.jar delete mode 100644 buildSrc/build/pluginUnderTestMetadata/plugin-under-test-metadata.properties delete mode 100644 buildSrc/build/reports/plugin-development/validation-report.txt delete mode 100644 buildSrc/build/source-roots/buildSrc/source-roots.txt delete mode 100644 buildSrc/build/tmp/jar/MANIFEST.MF delete mode 100644 buildSrc/src/main/kotlin/ConfigData.kt delete mode 100644 buildSrc/src/main/kotlin/Dependencies.kt delete mode 100644 buildSrc/src/main/kotlin/Versions.kt diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 5cfa2940..96b3c5be 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,18 +2,26 @@ plugins { id("com.android.application") id("kotlin-android") id("kotlin-kapt") + id("androidx.navigation.safeargs.kotlin") + id("dagger.hilt.android.plugin") } android { - compileSdkVersion(ConfigData.compileSdkVersion) - buildToolsVersion(ConfigData.buildToolsVersion) + compileSdkVersion(30) + buildToolsVersion("30.0.3") defaultConfig { applicationId = "com.meloda.fast" - minSdkVersion(ConfigData.minSdkVersion) - targetSdkVersion(ConfigData.targetSdkVersion) - versionCode = ConfigData.versionCode - versionName = ConfigData.versionName + minSdkVersion(23) + targetSdkVersion(30) + versionCode = 1 + versionName = "1.0" + + javaCompileOptions { + annotationProcessorOptions { + arguments += mapOf("room.schemaLocation" to "$projectDir/schemas") + } + } } buildTypes { @@ -43,53 +51,62 @@ android { dataBinding = true viewBinding = true } + } -java { - val kotlinSrcDir = "src/main/kotlin" - println(sourceSets.names) -// val mainJavaSourceSet: SourceDirectorySet = sourceSets.getByName("main").java -// mainJavaSourceSet.srcDir(kotlinSrcDir) -// println(mainJavaSourceSet.srcDirs) +kapt { + correctErrorTypes = true + + //use this shit if you don't want to have hilt errors + javacOptions { + option("-Adagger.hilt.android.internal.disableAndroidSuperclassValidation=true") + } } -//java.sourceSets.create("src/main/kotlin") - -//sourceSets { -// main.java.srcDirs += "src/main/kotlin" -//} - dependencies { - implementation(Deps.kotlin) + implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.5.20") - coreLibraryDesugaring(Deps.desugaring) + coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.1.5") - implementation(Deps.appCompat) - implementation(Deps.material) - implementation(Deps.core) - implementation(Deps.preferences) - implementation(Deps.swipeRefreshLayout) - implementation(Deps.recyclerView) - implementation(Deps.cardView) - implementation(Deps.fragment) + implementation("androidx.appcompat:appcompat:1.4.0-alpha03") + implementation("com.google.android.material:material:1.4.0") + implementation("androidx.core:core-ktx:1.7.0-alpha01") + implementation("androidx.preference:preference-ktx:1.1.1") + implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.2.0-alpha01") + implementation("androidx.recyclerview:recyclerview:1.2.1") + implementation("androidx.cardview:cardview:1.0.0") + implementation("androidx.fragment:fragment-ktx:1.3.5") - implementation(Deps.coroutineCore) - implementation(Deps.coroutineAndroid) + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.5.1") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1") - implementation(Deps.roomRuntime) - kapt(Deps.roomCompiler) + implementation("androidx.room:room-runtime:2.3.0") + kapt("androidx.room:room-compiler:2.3.0") + + implementation("androidx.navigation:navigation-fragment-ktx:2.3.5") + implementation("androidx.navigation:navigation-ui-ktx:2.3.5") + + implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:2.3.1") + implementation("androidx.lifecycle:lifecycle-livedata-ktx:2.3.1") + implementation("androidx.lifecycle:lifecycle-runtime-ktx:2.3.1") + implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:2.3.1") + implementation("androidx.lifecycle:lifecycle-common-java8:2.3.1") + + implementation("com.squareup.okhttp3:okhttp:5.0.0-alpha.2") + implementation("com.squareup.okhttp3:logging-interceptor:5.0.0-alpha.2") + implementation("com.squareup.retrofit2:retrofit:2.9.0") + implementation("com.squareup.retrofit2:converter-gson:2.9.0") + + implementation("com.google.dagger:hilt-android:2.37") + kapt("com.google.dagger:hilt-android-compiler:2.37") + implementation("androidx.hilt:hilt-navigation-fragment:1.0.0") - implementation(Deps.gson) - implementation(Deps.jsoup) - implementation(Deps.acra) implementation("com.github.yogacp:android-viewbinding:1.0.2") - implementation("androidx.lifecycle:lifecycle-viewmodel-ktx:${Versions.lifecycle}") - implementation("androidx.lifecycle:lifecycle-livedata-ktx:${Versions.lifecycle}") - implementation("androidx.lifecycle:lifecycle-runtime-ktx:${Versions.lifecycle}") - implementation("androidx.lifecycle:lifecycle-viewmodel-savedstate:${Versions.lifecycle}") - implementation("androidx.lifecycle:lifecycle-common-java8:${Versions.lifecycle}") + implementation("io.coil-kt:coil:1.2.2") + + implementation("com.google.code.gson:gson:2.8.7") + implementation("org.jsoup:jsoup:1.14.1") + implementation("ch.acra:acra:4.11.1") - implementation("com.squareup.retrofit2:retrofit:${Versions.retrofit}") - implementation("com.squareup.retrofit2:converter-gson:${Versions.retrofit}") } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index b8451b8d..6842b223 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,7 @@ + 0 && !TextUtils.isEmpty(token) + return userId > 0 && !TextUtils.isEmpty(accessToken) } } \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/activity/MainActivity.kt b/app/src/main/java/com/meloda/fast/activity/MainActivity.kt index 27a92332..360db60b 100644 --- a/app/src/main/java/com/meloda/fast/activity/MainActivity.kt +++ b/app/src/main/java/com/meloda/fast/activity/MainActivity.kt @@ -5,19 +5,15 @@ import android.viewbinding.library.activity.viewBinding import com.meloda.fast.R import com.meloda.fast.base.BaseActivity import com.meloda.fast.databinding.ActivityMainBinding -import com.meloda.fast.fragment.LoginFragment - +import dagger.hilt.android.AndroidEntryPoint +@AndroidEntryPoint class MainActivity : BaseActivity(R.layout.activity_main) { private val binding: ActivityMainBinding by viewBinding() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) - - supportFragmentManager.beginTransaction() - .replace(R.id.fragmentContainer, LoginFragment()) - .commit() } } \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/api/Answer.kt b/app/src/main/java/com/meloda/fast/api/Answer.kt new file mode 100644 index 00000000..f6fbffb5 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/api/Answer.kt @@ -0,0 +1,6 @@ +package com.meloda.fast.api + +sealed class Answer { + data class Success(val data: T) : Answer() + data class Error(val errorString: String) : Answer() +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/api/Requests.kt b/app/src/main/java/com/meloda/fast/api/Requests.kt new file mode 100644 index 00000000..2e7b6b8a --- /dev/null +++ b/app/src/main/java/com/meloda/fast/api/Requests.kt @@ -0,0 +1,2 @@ +package com.meloda.fast.api + diff --git a/app/src/main/java/com/meloda/fast/api/VKAuth.kt b/app/src/main/java/com/meloda/fast/api/VKAuth.kt index 1a78c006..2d4422dc 100644 --- a/app/src/main/java/com/meloda/fast/api/VKAuth.kt +++ b/app/src/main/java/com/meloda/fast/api/VKAuth.kt @@ -29,12 +29,12 @@ object VKAuth { fun getDirectAuthUrl(login: String, password: String, captcha: String = ""): String { return "https://oauth.vk.com/token?grant_type=password&" + - "client_id=6146827&" + + "client_id=${VKConstants.VK_APP_ID}&" + "scope=$settings&" + - "client_secret=qVxWRF1CwHERuIrKBnqe&" + + "client_secret=${VKConstants.VK_APP_SECRET}&" + "username=$login&" + "password=$password" + - (if (captcha.isEmpty()) "" else "&$captcha") + + (if (captcha.isBlank()) "" else "&$captcha") + "&v=${VKApi.API_VERSION}" // return "https://oauth.vk.com/token?grant_type=password&" + // "client_id=2274003&" + @@ -61,20 +61,19 @@ object VKAuth { "v=${URLEncoder.encode(VKApi.API_VERSION, "utf-8")}" } - @Throws(Exception::class) - fun parseRedirectUrl(url: String): Array { - val accessToken = VKUtil.extractPattern(url, "access_token=(.*?)&") - val userId = VKUtil.extractPattern(url, "user_id=(\\d*)") + fun parseRedirectUrl(url: String): Pair { + val accessToken = VKUtil.extractPattern(url, "access_token=(.*?)&") ?: "" + val userId = VKUtil.extractPattern(url, "user_id=(\\d*)")?.toIntOrNull() ?: -1 if (BuildConfig.DEBUG) { Log.i(TAG, "access_token=$accessToken") Log.i(TAG, "user_id=$userId") } - if (userId == null || userId.isEmpty() || accessToken == null || accessToken.isEmpty()) throw Exception( - "Failed to parse redirect url $url" + if (accessToken.isEmpty() || userId == -1) throw Exception( + "Failed to parse redirect url: $url" ) - return arrayOf(accessToken, userId) + return accessToken to userId } } \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/api/VKConstants.kt b/app/src/main/java/com/meloda/fast/api/VKConstants.kt index 31a388a2..dd3bf81e 100644 --- a/app/src/main/java/com/meloda/fast/api/VKConstants.kt +++ b/app/src/main/java/com/meloda/fast/api/VKConstants.kt @@ -8,6 +8,12 @@ object VKConstants { const val USER_FIELDS = "photo_50,photo_100,photo_200,status,screen_name,online,online_mobile,last_seen,verified,sex" + const val VK_APP_ID = "2274003" + const val VK_APP_SECRET = "hHbZxrka2uZ6jB1inYsH" + + const val VK_ME_ID = "6146827" + const val VK_ME_SECRET = "qVxWRF1CwHERuIrKBnqe" + /* const val ACTION_CHAT_CREATE = "chat_create" diff --git a/app/src/main/java/com/meloda/fast/api/VKRepo.kt b/app/src/main/java/com/meloda/fast/api/VKRepo.kt new file mode 100644 index 00000000..168f4352 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/api/VKRepo.kt @@ -0,0 +1,7 @@ +package com.meloda.fast.api + +interface VKRepo { + + + +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/base/BaseVMFragment.kt b/app/src/main/java/com/meloda/fast/base/BaseVMFragment.kt new file mode 100644 index 00000000..108f7aee --- /dev/null +++ b/app/src/main/java/com/meloda/fast/base/BaseVMFragment.kt @@ -0,0 +1,33 @@ +package com.meloda.fast.base + +import android.os.Bundle +import android.view.View +import androidx.annotation.LayoutRes +import androidx.lifecycle.lifecycleScope +import com.meloda.fast.base.viewmodel.BaseVM +import com.meloda.fast.base.viewmodel.VKEvent +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.flow.collect + +abstract class BaseVMFragment : BaseFragment { + + constructor() : super() + + constructor(@LayoutRes resId: Int) : super(resId) + + protected abstract val viewModel: VM + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + viewLifecycleOwner.lifecycleScope.launchWhenStarted { + viewModel.tasksEvent.onEach { onEvent(it) }.collect() + } + } + + protected open fun onEvent(event: VKEvent) { + when (event) { + + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/base/viewmodel/BaseVM.kt b/app/src/main/java/com/meloda/fast/base/viewmodel/BaseVM.kt new file mode 100644 index 00000000..55e7a233 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/base/viewmodel/BaseVM.kt @@ -0,0 +1,30 @@ +package com.meloda.fast.base.viewmodel + +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.meloda.fast.api.Answer +import kotlinx.coroutines.channels.Channel +import kotlinx.coroutines.flow.receiveAsFlow +import kotlinx.coroutines.launch + +abstract class BaseVM : ViewModel() { + + protected val tasksEventChannel = Channel() + val tasksEvent = tasksEventChannel.receiveAsFlow() + + protected fun makeJob( + job: suspend () -> Answer, + onAnswer: suspend (T) -> Unit = {}, + onStart: (suspend () -> Unit)? = null, + onEnd: (suspend () -> Unit)? = null, + onError: (suspend (String) -> Unit)? = null + ) = viewModelScope.launch { + onStart?.invoke() + when (val response = job()) { + is Answer.Success -> onAnswer(response.data) + is Answer.Error -> onError?.invoke(response.errorString) ?: tasksEventChannel.send( + ShowDialogInfoEvent(null, response.errorString) + ) + } + }.also { it.invokeOnCompletion { viewModelScope.launch { onEnd?.invoke() } } } +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/base/viewmodel/Events.kt b/app/src/main/java/com/meloda/fast/base/viewmodel/Events.kt new file mode 100644 index 00000000..a8b06a79 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/base/viewmodel/Events.kt @@ -0,0 +1,8 @@ +package com.meloda.fast.base.viewmodel + +data class ShowDialogInfoEvent( + val title: String? = null, + val message: String, + val positiveBtn: String? = null, + val negativeBtn: String? = null +) : VKEvent() \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/base/viewmodel/VKEvent.kt b/app/src/main/java/com/meloda/fast/base/viewmodel/VKEvent.kt new file mode 100644 index 00000000..34d800a9 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/base/viewmodel/VKEvent.kt @@ -0,0 +1,3 @@ +package com.meloda.fast.base.viewmodel + +abstract class VKEvent \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/common/AppGlobal.kt b/app/src/main/java/com/meloda/fast/common/AppGlobal.kt index 9df02cae..053bfd5e 100644 --- a/app/src/main/java/com/meloda/fast/common/AppGlobal.kt +++ b/app/src/main/java/com/meloda/fast/common/AppGlobal.kt @@ -11,9 +11,9 @@ import androidx.core.content.pm.PackageInfoCompat import androidx.preference.PreferenceManager import com.meloda.fast.BuildConfig import com.meloda.fast.R -import com.meloda.fast.UserConfig import com.meloda.fast.database.DatabaseHelper import com.meloda.fast.util.AndroidUtils +import dagger.hilt.android.HiltAndroidApp import org.acra.ACRA import org.acra.ReportingInteractionMode import org.acra.annotation.ReportsCrashes @@ -29,6 +29,7 @@ import java.util.* resDialogPositiveButtonText = R.string.send_crash_report, resDialogNegativeButtonText = R.string.ok ) +@HiltAndroidApp class AppGlobal : Application() { companion object { @@ -81,8 +82,6 @@ class AppGlobal : Application() { screenWidth = AndroidUtils.getDisplayWidth() screenHeight = AndroidUtils.getDisplayHeight() - - UserConfig.restore() } } \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/extensions/NavigationExtensions.kt b/app/src/main/java/com/meloda/fast/extensions/NavigationExtensions.kt new file mode 100644 index 00000000..85b33033 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/extensions/NavigationExtensions.kt @@ -0,0 +1,261 @@ +package com.meloda.fast.extensions + +import android.content.Intent +import android.util.SparseArray +import androidx.core.util.forEach +import androidx.core.util.set +import androidx.fragment.app.FragmentManager +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import androidx.navigation.NavController +import androidx.navigation.fragment.NavHostFragment +import com.google.android.material.bottomnavigation.BottomNavigationView +import com.meloda.fast.R + +/** + * Manages the various graphs needed for a [BottomNavigationView]. + * + * This sample is a workaround until the Navigation Component supports multiple back stacks. + */ +object NavigationExtensions { + + fun BottomNavigationView.setupWithNavController( + navGraphIds: List, + fragmentManager: FragmentManager, +// dataManager: DataManager, + containerId: Int, + intent: Intent + ): LiveData { + + // Map of tags + val graphIdToTagMap = SparseArray() + // Result. Mutable live data with the selected controlled + val selectedNavController = MutableLiveData() + + var firstFragmentGraphId = 0 + + // First create a NavHostFragment for each NavGraph ID + navGraphIds.forEachIndexed { index, navGraphId -> + val fragmentTag = getFragmentTag(index) + + // Find or create the Navigation host fragment + val navHostFragment = obtainNavHostFragment( + fragmentManager, + fragmentTag, + navGraphId, + containerId + ) + + // Obtain its id + val graphId = navHostFragment.navController.graph.id + + if (index == 0) { + firstFragmentGraphId = graphId + } + + // Save to the map + graphIdToTagMap[graphId] = fragmentTag + + // Attach or detach nav host fragment depending on whether it's the selected item. + if (this.selectedItemId == graphId) { + // Update livedata with the selected graph + selectedNavController.value = navHostFragment.navController + attachNavHostFragment(fragmentManager, navHostFragment, index == 0) + } else { + detachNavHostFragment(fragmentManager, navHostFragment) + } + } + + // Now connect selecting an item with swapping Fragments + var selectedItemTag = graphIdToTagMap[this.selectedItemId] + val firstFragmentTag = graphIdToTagMap[firstFragmentGraphId] + var isOnFirstFragment = selectedItemTag == firstFragmentTag + + // When a navigation item is selected + setOnNavigationItemSelectedListener { item -> + // Don't do anything if the state is state has already been saved. + if (fragmentManager.isStateSaved) { + false + } else { + val navController = + (fragmentManager.findFragmentByTag(selectedItemTag) as NavHostFragment).navController + navController.popBackStack(navController.graph.startDestination, false) + if (selectedItemTag != graphIdToTagMap[item.itemId]) { +// val listCheck = listOf(R.id.contacts, R.id.chats) + val newlySelectedItemTag = + //if (listCheck.contains(item.itemId) && dataManager.token.isBlank()) graphIdToTagMap[R.id.signIn] else + graphIdToTagMap[item.itemId] + + // Pop everything above the first fragment (the "fixed start destination") + fragmentManager.popBackStack( + firstFragmentTag, + FragmentManager.POP_BACK_STACK_INCLUSIVE + ) + val selectedFragment = + fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment + + // Exclude the first fragment tag because it's always in the back stack. + if (firstFragmentTag != newlySelectedItemTag) { + // Commit a transaction that cleans the back stack and adds the first fragment + // to it, creating the fixed started destination. + fragmentManager.beginTransaction() + .setCustomAnimations( + R.anim.nav_default_enter_anim, + R.anim.nav_default_exit_anim, + R.anim.nav_default_pop_enter_anim, + R.anim.nav_default_pop_exit_anim + ) + .attach(selectedFragment) + .setPrimaryNavigationFragment(selectedFragment) + .apply { + // Detach all other Fragments + graphIdToTagMap.forEach { _, fragmentTagIter -> + if (fragmentTagIter != newlySelectedItemTag) { + detach(fragmentManager.findFragmentByTag(firstFragmentTag)!!) + } + } + } + .addToBackStack(firstFragmentTag) + .setReorderingAllowed(true) + .commit() + } + selectedItemTag = newlySelectedItemTag + isOnFirstFragment = selectedItemTag == firstFragmentTag + selectedNavController.value = selectedFragment.navController + true + } else { + false + } + } + } + setOnNavigationItemReselectedListener { item -> + val newlySelectedItemTag = graphIdToTagMap[item.itemId] + val selectedFragment = + fragmentManager.findFragmentByTag(newlySelectedItemTag) as NavHostFragment + val navController = selectedFragment.navController + // Pop the back stack to the start destination of the current navController graph + if (selectedItemTag != graphIdToTagMap[item.itemId]) { + fragmentManager.beginTransaction() + .setCustomAnimations( + R.anim.nav_default_enter_anim, + R.anim.nav_default_exit_anim, + R.anim.nav_default_pop_enter_anim, + R.anim.nav_default_pop_exit_anim + ) + .attach(selectedFragment) + .setPrimaryNavigationFragment(selectedFragment) + .apply { + // Detach all other Fragments + graphIdToTagMap.forEach { _, fragmentTagIter -> + if (fragmentTagIter != newlySelectedItemTag) { + detach(fragmentManager.findFragmentByTag(firstFragmentTag)!!) + } + } + } + .addToBackStack(firstFragmentTag) + .setReorderingAllowed(true) + .commit() + selectedItemTag = newlySelectedItemTag + isOnFirstFragment = selectedItemTag == firstFragmentTag + selectedNavController.value = selectedFragment.navController + } else navController.popBackStack(navController.graph.startDestination, false) + } + // Optional: on item reselected, pop back stack to the destination of the graph + setupDeepLinks(navGraphIds, fragmentManager, containerId, intent) + + // Finally, ensure that we update our BottomNavigationView when the back stack changes + fragmentManager.addOnBackStackChangedListener { + if (!isOnFirstFragment && !fragmentManager.isOnBackStack(firstFragmentTag)) { + this.selectedItemId = firstFragmentGraphId + } + + // Reset the graph if the currentDestination is not valid (happens when the back + // stack is popped after using the back button). + selectedNavController.value?.let { controller -> + if (controller.currentDestination == null) { + controller.navigate(controller.graph.id) + } + } + } + return selectedNavController + } + + private fun BottomNavigationView.setupDeepLinks( + navGraphIds: List, + fragmentManager: FragmentManager, + containerId: Int, + intent: Intent + ) { + navGraphIds.forEachIndexed { index, navGraphId -> + val fragmentTag = getFragmentTag(index) + + // Find or create the Navigation host fragment + val navHostFragment = obtainNavHostFragment( + fragmentManager, + fragmentTag, + navGraphId, + containerId + ) + // Handle Intent + if (navHostFragment.navController.handleDeepLink(intent) && + selectedItemId != navHostFragment.navController.graph.id + ) { + this.selectedItemId = navHostFragment.navController.graph.id + } + } + } + + private fun detachNavHostFragment( + fragmentManager: FragmentManager, + navHostFragment: NavHostFragment + ) { + fragmentManager.beginTransaction() + .detach(navHostFragment) + .commitNow() + } + + private fun attachNavHostFragment( + fragmentManager: FragmentManager, + navHostFragment: NavHostFragment, + isPrimaryNavFragment: Boolean + ) { + fragmentManager.beginTransaction() + .attach(navHostFragment) + .apply { + if (isPrimaryNavFragment) { + setPrimaryNavigationFragment(navHostFragment) + } + } + .commitNow() + } + + private fun obtainNavHostFragment( + fragmentManager: FragmentManager, + fragmentTag: String, + navGraphId: Int, + containerId: Int, + ): NavHostFragment { + // If the Nav Host fragment exists, return it + val existingFragment = fragmentManager.findFragmentByTag(fragmentTag) as NavHostFragment? + existingFragment?.let { return it } + + // Otherwise, create it and return it. + val navHostFragment = NavHostFragment.create(navGraphId) + fragmentManager.beginTransaction() + .add(containerId, navHostFragment, fragmentTag) + .commitNow() + return navHostFragment + } + + private fun FragmentManager.isOnBackStack(backStackName: String): Boolean { + val backStackCount = backStackEntryCount + for (index in 0 until backStackCount) { + if (getBackStackEntryAt(index).name == backStackName) { + return true + } + } + return false + } + + private fun getFragmentTag(index: Int) = "bottomNavigation#$index" +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/LoginFragment.kt b/app/src/main/java/com/meloda/fast/fragment/LoginFragment.kt deleted file mode 100644 index 25e5d03f..00000000 --- a/app/src/main/java/com/meloda/fast/fragment/LoginFragment.kt +++ /dev/null @@ -1,22 +0,0 @@ -package com.meloda.fast.fragment - -import android.os.Bundle -import android.view.View -import android.viewbinding.library.fragment.viewBinding -import com.meloda.fast.R -import com.meloda.fast.base.BaseFragment -import com.meloda.fast.databinding.FragmentLoginBinding - -class LoginFragment : BaseFragment(R.layout.fragment_login) { - - private val binding: FragmentLoginBinding by viewBinding() - - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { - super.onViewCreated(view, savedInstanceState) - - - } - - - -} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/login/LoginFragment.kt b/app/src/main/java/com/meloda/fast/fragment/login/LoginFragment.kt new file mode 100644 index 00000000..2ccd8b43 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/login/LoginFragment.kt @@ -0,0 +1,220 @@ +package com.meloda.fast.fragment.login + +import android.os.Bundle +import android.view.Gravity +import android.view.KeyEvent +import android.view.View +import android.view.ViewGroup +import android.view.inputmethod.EditorInfo +import android.viewbinding.library.fragment.viewBinding +import android.widget.LinearLayout +import androidx.appcompat.app.AlertDialog +import androidx.core.os.bundleOf +import androidx.core.widget.addTextChangedListener +import androidx.fragment.app.setFragmentResultListener +import androidx.fragment.app.viewModels +import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController +import coil.load +import com.google.android.material.imageview.ShapeableImageView +import com.google.android.material.textfield.TextInputEditText +import com.google.android.material.textfield.TextInputLayout +import com.meloda.fast.R +import com.meloda.fast.base.BaseVMFragment +import com.meloda.fast.base.viewmodel.VKEvent +import com.meloda.fast.databinding.FragmentLoginBinding +import com.meloda.fast.util.KeyboardUtils +import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import java.util.* +import kotlin.concurrent.schedule +import kotlin.math.roundToInt + +@AndroidEntryPoint +class LoginFragment : BaseVMFragment(R.layout.fragment_login) { + + override val viewModel: LoginVM by viewModels() + private val binding: FragmentLoginBinding by viewBinding() + + private var lastEmail: String = "" + private var lastPassword: String = "" + + private var errorTimer: Timer? = null + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + viewModel.checkUserSession() + + prepareViews() + + setFragmentResultListener("validation") { _, bundle -> + lifecycleScope.launch { viewModel.getValidatedData(bundle) } + } + + binding.loginInput.setText("danil_nikolaev_02@mail.ru") + binding.passwordInput.setText("iwanttofuck24") + } + + override fun onEvent(event: VKEvent) { + super.onEvent(event) + + when (event) { + is ShowCaptchaDialog -> showCaptchaDialog(event.captchaImage, event.captchaSid) + is GoToValidationEvent -> goToValidation(event.redirectUrl) + GoToMainEvent -> goToMain() + } + } + + private fun prepareViews() { + prepareEmailEditText() + preparePasswordEditText() + prepareAuthButton() + } + + private fun prepareEmailEditText() { + binding.loginInput.addTextChangedListener { + if (!binding.loginLayout.error.isNullOrBlank()) binding.loginLayout.error = "" + } + } + + private fun preparePasswordEditText() { + binding.passwordLayout.endIconMode = TextInputLayout.END_ICON_NONE + + binding.passwordInput.addTextChangedListener { + if (!binding.passwordLayout.error.isNullOrBlank()) binding.passwordLayout.error = "" + } + + binding.passwordInput.setOnFocusChangeListener { _, hasFocus -> + binding.passwordLayout.endIconMode = + if (hasFocus) TextInputLayout.END_ICON_PASSWORD_TOGGLE + else TextInputLayout.END_ICON_NONE + } + + binding.passwordInput.setOnEditorActionListener { _, _, event -> + if (event == null) return@setOnEditorActionListener false + return@setOnEditorActionListener if (event.action == EditorInfo.IME_ACTION_GO || + (event.action == KeyEvent.ACTION_DOWN && (event.keyCode == KeyEvent.KEYCODE_ENTER || event.keyCode == KeyEvent.KEYCODE_NUMPAD_ENTER)) + ) { + KeyboardUtils.hideKeyboardFrom(binding.passwordInput) + binding.authorize.performClick() + true + } else false + } + } + + private fun prepareAuthButton() { + binding.authorize.setOnClickListener { + val loginString = binding.loginInput.text.toString().trim() + val passwordString = binding.passwordInput.text.toString().trim() + + if (!validateInputData(loginString, passwordString)) return@setOnClickListener + + viewModel.login(requireContext(), loginString, passwordString) + KeyboardUtils.hideKeyboardFrom(it) + } + } + + private fun validateInputData(loginString: String, passwordString: String): Boolean { + var isValidated = true + + if (loginString.isEmpty()) { + isValidated = false + setError("Input login", binding.loginLayout) + } + + if (passwordString.isEmpty()) { + isValidated = false + setError("Input password", binding.passwordLayout) + } + + return isValidated + } + + private fun setError(error: String, inputLayout: TextInputLayout) { + inputLayout.error = error + + if (errorTimer != null) { + errorTimer?.cancel() + errorTimer = null + } + + if (errorTimer == null) { + errorTimer = Timer() + } + + errorTimer?.schedule(2500) { + lifecycleScope.launch(Dispatchers.Main) { clearErrors() } + } + } + + private fun clearErrors() { + binding.loginLayout.error = "" + binding.passwordLayout.error = "" + } + + // TODO: 7/10/2021 extract layout to resources + private fun showCaptchaDialog(captchaImage: String, captchaSid: String) { + val metrics = resources.displayMetrics + + val width = (metrics.widthPixels / 3.5).roundToInt() + val height = metrics.heightPixels / 7 + + val image = ShapeableImageView(requireContext()).also { + it.layoutParams = ViewGroup.LayoutParams(width, height) + } + + val shapeModel = image.shapeAppearanceModel + image.shapeAppearanceModel = shapeModel.withCornerSize { 12f } + + image.load(captchaImage) { crossfade(100) } + + val captchaCodeEditText = TextInputEditText(requireContext()) + captchaCodeEditText.setHint(R.string.captcha_hint) + + captchaCodeEditText.layoutParams = + LinearLayout.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + + val builder = AlertDialog.Builder(requireContext()) + + val layout = LinearLayout(requireContext()) + + layout.orientation = LinearLayout.VERTICAL + layout.gravity = Gravity.CENTER + layout.addView(image) + layout.addView(captchaCodeEditText) + + builder.setView(layout) + builder.setNegativeButton(android.R.string.cancel, null) + builder.setPositiveButton(android.R.string.ok) { _, _ -> + val captchaCode = captchaCodeEditText.text.toString().trim() + + viewModel.login( + requireContext(), + lastEmail, + lastPassword, + "&captcha_sid=$captchaSid&captcha_key=$captchaCode" + ) + } + + builder.setTitle(R.string.input_captcha) + builder.show() + + } + + private fun goToValidation(redirectUrl: String) { + findNavController().navigate( + R.id.toValidation, + bundleOf("redirectUrl" to redirectUrl) + ) + } + + private fun goToMain() { + findNavController().navigate(R.id.toMain) + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/login/LoginVM.kt b/app/src/main/java/com/meloda/fast/fragment/login/LoginVM.kt new file mode 100644 index 00000000..dfeb3a24 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/login/LoginVM.kt @@ -0,0 +1,161 @@ +package com.meloda.fast.fragment.login + +import android.annotation.SuppressLint +import android.content.Context +import android.os.Bundle +import android.view.ViewGroup +import android.webkit.CookieManager +import android.webkit.JavascriptInterface +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.lifecycle.viewModelScope +import com.meloda.fast.UserConfig +import com.meloda.fast.api.VKAuth +import com.meloda.fast.base.viewmodel.BaseVM +import com.meloda.fast.base.viewmodel.VKEvent +import kotlinx.coroutines.launch +import org.json.JSONObject +import org.jsoup.Jsoup + +class LoginVM : BaseVM() { + + fun login( + context: Context, + email: String, + password: String, + captcha: String = "" + ) { + val urlToGo = VKAuth.getDirectAuthUrl(email, password, captcha) + +// val builder = AlertDialog.Builder(context) + + val webView = createWebView(context) + webView.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.WRAP_CONTENT + ) + +// builder.setTitle("Auth") +// builder.setView(webView) +// builder.show() + + webView.addJavascriptInterface(WebViewHandlerInterface(), "HtmlHandler") + webView.webViewClient = object : WebViewClient() { + override fun onPageFinished(view: WebView?, url: String?) { + webView.loadUrl( + "javascript:window.HtmlHandler.handleHtml" + + "(''+document.getElementsByTagName('html')[0].innerHTML+'');" + ) + } + } + + webView.loadUrl(urlToGo) + } + + @SuppressLint("SetJavaScriptEnabled") + private fun createWebView(context: Context): WebView { + val loginWebView = WebView(context) + + loginWebView.settings.javaScriptEnabled = true + loginWebView.settings.domStorageEnabled = true + loginWebView.settings.loadsImagesAutomatically = false + loginWebView.settings.userAgentString = "Chrome/41.0.2228.0 Safari/537.36" + + loginWebView.clearCache(true) + + val cookieManager = CookieManager.getInstance() + cookieManager.removeAllCookies(null) + cookieManager.flush() + cookieManager.setAcceptCookie(false) + + return loginWebView + } + + @Suppress("MoveVariableDeclarationIntoWhen") + private fun checkResponse(response: JSONObject) { + viewModelScope.launch { + if (response.has("error")) { + val errorString = response.optString("error") + + when (errorString) { + "need_validation" -> { + val redirectUrl = response.optString("redirect_uri") + + tasksEventChannel.send(GoToValidationEvent(redirectUrl)) + +// val bundle = Bundle() +// bundle.putString("url", redirectUrl) + + /* fragment.setFragmentResultListener("validation") { _, bundle -> + val userId = bundle.getInt("userId") + val token = bundle.getString("token") ?: "" + saveUserData(userId, token) + + openMainScreen() + } + + + fragment.parentFragmentManager.beginTransaction() + .replace( + R.id.fragmentContainer, + ValidationFragment().apply { arguments = bundle }) + .addToBackStack("") + .commit()*/ + + } + "need_captcha" -> { + val captchaImage = response.optString("captcha_img") + val captchaSid = response.optString("captcha_sid") + + tasksEventChannel.send(ShowCaptchaDialog(captchaImage, captchaSid)) +// showCaptchaDialog(captchaImage, captchaSid) + } + } + } else { + val userId = response.optInt("user_id", -1) + val accessToken = response.optString("access_token") + + UserConfig.accessToken = accessToken + UserConfig.userId = userId + + tasksEventChannel.send(GoToMainEvent) + +// openMainScreen() + +// onResponseListener?.onResponse(null) + } + } + } + + suspend fun getValidatedData(bundle: Bundle) { + val accessToken = bundle.getString("token") ?: "" + val userId = bundle.getInt("userId") + + UserConfig.accessToken = accessToken + UserConfig.userId = userId + + tasksEventChannel.send(GoToMainEvent) + } + + fun checkUserSession() = viewModelScope.launch { + if (UserConfig.isLoggedIn()) tasksEventChannel.send(GoToMainEvent) + } + + inner class WebViewHandlerInterface { + @JavascriptInterface + fun handleHtml(html: String) { + val doc = Jsoup.parse(html) + + val responseString = + doc.select("pre[style=\"word-wrap: break-word; white-space: pre-wrap;\"]").first() + ?.text() ?: "" + + checkResponse(JSONObject(responseString)) + } + } + +} + +data class ShowCaptchaDialog(val captchaImage: String, val captchaSid: String) : VKEvent() +data class GoToValidationEvent(val redirectUrl: String) : VKEvent() +object GoToMainEvent : VKEvent() \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/login/ValidationFragment.kt b/app/src/main/java/com/meloda/fast/fragment/login/ValidationFragment.kt new file mode 100644 index 00000000..4dedd559 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/login/ValidationFragment.kt @@ -0,0 +1,75 @@ +package com.meloda.fast.fragment.login + +import android.graphics.Bitmap +import android.os.Bundle +import android.util.Log +import android.view.View +import android.view.ViewGroup +import android.viewbinding.library.fragment.viewBinding +import android.webkit.CookieManager +import android.webkit.WebView +import android.webkit.WebViewClient +import androidx.core.os.bundleOf +import androidx.navigation.fragment.findNavController +import com.meloda.fast.R +import com.meloda.fast.api.VKAuth +import com.meloda.fast.base.BaseFragment +import com.meloda.fast.databinding.FragmentValidationBinding + +class ValidationFragment : BaseFragment(R.layout.fragment_validation) { + + private val binding: FragmentValidationBinding by viewBinding() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + val redirectUrl = getRedirectUrl() + + binding.webView.webViewClient = object : WebViewClient() { + override fun onPageStarted(view: WebView?, url: String?, favicon: Bitmap?) { + Log.d("Fast::Validation", "onPageStarted: url: $url") + parseUrl(url ?: "") + } + } + + binding.webView.settings.domStorageEnabled = true + binding.webView.clearCache(true) + binding.webView.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, + ViewGroup.LayoutParams.MATCH_PARENT + ) + + val manager = CookieManager.getInstance() + manager.removeAllCookies(null) + manager.flush() + manager.setAcceptCookie(true) + + binding.webView.loadUrl(redirectUrl) + } + + private fun getRedirectUrl() = requireArguments().getString("redirectUrl", "") + + private fun parseUrl(url: String) { + if (url.startsWith("https://oauth.vk.com/blank.html#success=1")) { + if (!url.contains("error=")) { + val data = VKAuth.parseRedirectUrl(url) + + val accessToken = data.first + val userId = data.second + + parentFragmentManager.setFragmentResult( + "validation", + bundleOf( + "accessToken" to accessToken, + "userId" to userId + ) + ) + + findNavController().navigate(R.id.toLogin) + } + } else { + Log.d("Fast::Validation", "parseUrl: $url") + } + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/main/MainFragment.kt b/app/src/main/java/com/meloda/fast/fragment/main/MainFragment.kt new file mode 100644 index 00000000..cff043a7 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/main/MainFragment.kt @@ -0,0 +1,38 @@ +package com.meloda.fast.fragment.main + +import android.os.Bundle +import android.view.View +import android.viewbinding.library.fragment.viewBinding +import androidx.fragment.app.viewModels +import com.meloda.fast.R +import com.meloda.fast.base.BaseVMFragment +import com.meloda.fast.databinding.FragmentMainBinding +import com.meloda.fast.extensions.NavigationExtensions.setupWithNavController +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class MainFragment : BaseVMFragment(R.layout.fragment_main) { + + override val viewModel: MainVM by viewModels() + private val binding: FragmentMainBinding by viewBinding() + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + if (savedInstanceState == null) setupBottomBar() + + } + + private fun setupBottomBar() { + val navGraphIds = listOf(R.id.messages, R.id.friends) + + binding.bottomBar.setupWithNavController( + navGraphIds = listOf(), + fragmentManager = childFragmentManager, + containerId = R.id.fragmentContainer, + intent = requireActivity().intent + ) + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/main/MainVM.kt b/app/src/main/java/com/meloda/fast/fragment/main/MainVM.kt new file mode 100644 index 00000000..a5bb4b26 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/main/MainVM.kt @@ -0,0 +1,5 @@ +package com.meloda.fast.fragment.main + +import com.meloda.fast.base.viewmodel.BaseVM + +class MainVM : BaseVM() \ No newline at end of file diff --git a/app/src/main/java/com/meloda/fast/fragment/messages/ConversationsFragment.kt b/app/src/main/java/com/meloda/fast/fragment/messages/ConversationsFragment.kt new file mode 100644 index 00000000..c5e276d1 --- /dev/null +++ b/app/src/main/java/com/meloda/fast/fragment/messages/ConversationsFragment.kt @@ -0,0 +1,9 @@ +package com.meloda.fast.fragment.messages + +import com.meloda.fast.R +import com.meloda.fast.base.BaseFragment +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class ConversationsFragment : BaseFragment(R.layout.fragment_conversations) { +} \ No newline at end of file diff --git a/app/src/main/res/drawable/edit_text_box_background.xml b/app/src/main/res/drawable/edit_text_box_background.xml new file mode 100644 index 00000000..d70c9f09 --- /dev/null +++ b/app/src/main/res/drawable/edit_text_box_background.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 0f2f82ba..395fd0e6 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,43 +1,21 @@ - + xmlns:tools="http://schemas.android.com/tools"> - - - - - - - - - + android:orientation="vertical" + tools:context=".MainActivity"> - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_conversations.xml b/app/src/main/res/layout/fragment_conversations.xml index 303d2f4d..0ba8b3f0 100644 --- a/app/src/main/res/layout/fragment_conversations.xml +++ b/app/src/main/res/layout/fragment_conversations.xml @@ -18,7 +18,11 @@ android:layout_height="wrap_content" app:layout_scrollFlags="scroll|enterAlways"> - + diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index da8e8e6f..bb7ebb67 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -1,135 +1,138 @@ - + - + android:orientation="vertical"> - + android:layout_height="match_parent" + android:fillViewport="true"> - + android:gravity="center" + android:orientation="vertical" + android:padding="16dp"> + + + + + + android:layout_marginTop="48dp" + android:orientation="horizontal"> - + android:layout_marginTop="16dp" + android:src="@drawable/ic_baseline_account_circle_24" + app:tint="?colorAccent" /> - - - - - - - + android:layout_height="wrap_content"> - - - + android:inputType="textEmailAddress" + android:textCursorDrawable="@null" /> - + - - - - - - - - - - + - - - \ No newline at end of file + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 00000000..0ef577c6 --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_validation.xml b/app/src/main/res/layout/fragment_validation.xml new file mode 100644 index 00000000..7a6e0918 --- /dev/null +++ b/app/src/main/res/layout/fragment_validation.xml @@ -0,0 +1,9 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/friends.xml b/app/src/main/res/navigation/friends.xml new file mode 100644 index 00000000..c54baa11 --- /dev/null +++ b/app/src/main/res/navigation/friends.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/main.xml b/app/src/main/res/navigation/main.xml new file mode 100644 index 00000000..29701442 --- /dev/null +++ b/app/src/main/res/navigation/main.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/messages.xml b/app/src/main/res/navigation/messages.xml new file mode 100644 index 00000000..b58469a6 --- /dev/null +++ b/app/src/main/res/navigation/messages.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml deleted file mode 100644 index 91edf23a..00000000 --- a/app/src/main/res/values-night/themes.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2bfa3a5d..6a4e55e1 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -153,5 +153,6 @@ Captcha Input code from picture + Login diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 66230582..3450857f 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -5,7 +5,9 @@ @color/primary @color/primaryDark @color/accent + @style/AppTheme.Toolbar + true @style/PreferenceThemeOverlay 12dp @@ -26,14 +28,14 @@ @android:color/transparent + + + + + + + + \ No newline at end of file diff --git a/build.gradle.kts b/build.gradle.kts index d83584b9..b3069f30 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -5,8 +5,11 @@ buildscript { mavenCentral() } dependencies { - classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}") - classpath("com.android.tools.build:gradle:${Versions.gradlePlugin}") + classpath("org.jetbrains.kotlin:kotlin-gradle-plugin:1.5.20") + classpath("com.android.tools.build:gradle:4.2.2") + classpath("androidx.navigation:navigation-safe-args-gradle-plugin:2.3.5") + + classpath("com.google.dagger:hilt-android-gradle-plugin:2.37") } } diff --git a/buildSrc/build.gradle.kts b/buildSrc/build.gradle.kts deleted file mode 100644 index 8e88a958..00000000 --- a/buildSrc/build.gradle.kts +++ /dev/null @@ -1,9 +0,0 @@ -import org.gradle.kotlin.dsl.`kotlin-dsl` - -plugins { - `kotlin-dsl` -} - -repositories { - mavenCentral() -} \ No newline at end of file diff --git a/buildSrc/build/classes/kotlin/main/BuildPlugins$android$2.class b/buildSrc/build/classes/kotlin/main/BuildPlugins$android$2.class deleted file mode 100644 index c242e5c9cec80d9b270ed01c55f99b49c9c25a68..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1068 zcmZ`%TTc@~6#iy=rBqrfatAL|ZBe?Vq7Q&1h!C69N-Sw&c$)66W!mkG*-I1O_$~ed zjfo_h7~-Qp%6O&}tx-3-bLQN>bI!Nt`;X6G0c_wA!}OC-xb~qNwuSWbT-u%zcD|AT zV>qmJRp1I~cKSV2$iVR=cg-5_wQRmM>U$kZD-cTh=E3k*-mZ0cpPMe1ZL<-0LbkVd zwixFBkC;G|VR^*=57Y$W3~?d*s_QUJ6^bKOUbH%n6;O>o&BNkpB#}zNz&OK7O?hpz z;{+{_)6^!HQU&~CfVv9mq3aS%-cr5NkdRWKlq$&7M1vFI zGtAch%_U*Qw}lkJ4nw3+Y*Ip@T5P6~!&C|}Tw_R9>y4w``rbZWw=JT45IlLw@pC8O zHV-%<8NGgl{vFdtmekfjg;paBtVUdQw$6lPu{$QUuvSo$?Uo z3Q1@}$*W;&{{rLH8Hyiq?;yje diff --git a/buildSrc/build/classes/kotlin/main/BuildPlugins$kotlin$2.class b/buildSrc/build/classes/kotlin/main/BuildPlugins$kotlin$2.class deleted file mode 100644 index d9654fc1b21f244fa577ff6899114c89c628903d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1077 zcmZ`%TTc@~6#iznH%g_Yg52=}YKzh>2tGh1L4??(R$@sL!_&08mT9-MWG_v80=nJ?wiI$fhqG=@|!uTd`DW^By;BE?Y*;cZFg{x%PSr;tE02@RtROBKg$8EwmN zxSWbMxRj31`vp`TzZ%#!(HI0OT!9Mx#J2ikwdHctwpLHWwr#ByHVefB#uy_0iSQVv zD%Wm&qR=Vp>8|n01EH z5|@sA-*p0yG6O?uIQ=*ts0?qa?&VUL!uSZ?Rv6MRtW!&xmTU^kD|CD+XU{QdFzJer zRyF80Ecb{vY_eo4PLtbp?h2(3jB{@S>5HyamObGKvhV&G1m#ec(sK7~?s*oqG`%mI zw&T$vQ4dZWlVPMLT9W&LOZ>^26Sz(5K&W6d1K#>StSD0EQ7Vx38#AgD>Q*GPOUp4r zmQ~UgNKy|FUHO94N4hW+=!}I%Mh|F@h(tkG2T(nmRzPhCsKX#jDtx3P6UHeHXl{^% zYAAUXO_pA&h_My@9Jf9xCk2_l@=uXp{YJk*dwY)jXFTeIqF5tyk{N>@oB*=E83t3zynr8Mkpq9e0nxJlw+)xjZa;xbGqH8p0aBu9QCyabii^`qn#c>wuA^B| zNlqM6{vkQ#nBar+sB)>uEk7!io|R-IVqaXfHQhbk)BR2NH~Y`Of4&583wsRacH40q z58QUs@uUvMkUF$a?5t~h&Ft5;Ls1WOL}=Ic8ZF;xEH#8Hnsy)lkN<22UKxFlr6noPb^FmKwNV zf@+n+E1H<*r(8rM>tQ?40G86{~Le?QaGozrz~ zjcx0OcK&l*OKA`1QjuA0EqbT;&H1zQpVY3&qlTU`W}`+d6(@hvnR40>0#u3UkE&(zngvK&uT+Q&7~>g|{%&l9a3*OpQcWqH+a zx9XzksOX8Vu`6orX5srlc#<9(!%VOI{{M<2N5hILiV zOui__U_cGKNY(~L#Yj$`A!%jySS4~hy7~vk7&>_8S8_0XL90oUf-n)L7%Vl0>DMKj zd8=fadVy3*A`y4EnNSPzwf_g){ui{zFOV%~o+EdL z+a28b9rvCid4`?7KBJPeF!^ZsZ0Scz$J3-oQ6k?sSsNrld-r?tE0P*^Q6~Agx|e^z zFOi3r!=DY$R2TYMk*_Y~7B0sPa+YT-o?Fb_*vQ?@@l1ikqVxv@Zh?k$?EsMy-VeV; vEcLDHC47JnX&1{BDY1gg0Y)SyB~~ToByNO?A(4=XNyH^Sl9-m5lDPRFrJIN zp71;N+vbteQYpk3vaO)^(e<2KyW4O==>|RnE5}G=nVQYM>$U4a;K{3It}@c8snGR1 zPZ^S1#X_;LWx!-usRUuiK5|qu6s|9A;roFSij<{Y4OF%7d2}MvbN$hs`o4Lxs6^Ot z)QD%89t>UW1#L%9(I2^_s-ovG#7c#tfotSp$Ms$HjF`3cMjAITXCkgufTE#cUs=X*=(g7C<68yM~OB?N0Yoa&^KFDHKPg|Qg*CMRJ+9R+IO%hAw7IU0Mdggz@WyFPt53@*;blGWhwYB)9nfj1|lCV*KFzq^=p7Cn`Zy z@?R=7Ng0#W)FfpRH7hr>NSXw;2Uh=&B)>O8BZF zygo&~wBPrY+jGkPz?E*(b9P5hOmXX{VwkPCzEkb@nod|3G{caq1TEn;MCfXKL7KIo zAGVxV^a(O7UI;fPWKkk(af&^KMI?|U|4#_<2piDGhjq*WWxA(v=P4+ltGA2)FG>hLPr z)^nL3;O|bc{(9pZ9%&JVaS@J9;y4~-i}nNR-l7ba4-qRP8~twM&Lz5A#yzYMi~EOQ e603M{h_pmr;-SQxgb@{qXw68>N>~y(iM79bYTFtB diff --git a/buildSrc/build/classes/kotlin/main/Deps$acra$2.class b/buildSrc/build/classes/kotlin/main/Deps$acra$2.class deleted file mode 100644 index b8f740e22d1bf589993829b8ccc163a31d2fe9a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1021 zcmZ`%U2hUW6g{(ic1sJT)qdBHR)uO=sMQCHO-OAc38ImP#Pn%cRywfEn%#lKxBeD? zfyTrpnwZ8%f0XggmMTUi%bmIRo;mm4GxPn&=dS>E@Q`8hiSs7d;I_{*aI`CyYh6C%mdjnA zU_A=8OAIULr%Cht)HE{Fv}Ddtmy9BNYJPhcH%@; z&Ste9xfJFxGeNsehBRdz*>A*5eb{C>={Vo0i zjfqV(F^!M@DC3zewRqd?&bfW_oy(r@KR$m2u!V;V=_l5}Tjzs8#pw^Yzg~)gF}$et z9N!kw=#Kh^kiO+gZW}e;Z?*aMWbE}&n!a$PXY7x)V!77kBW~DSc8rGa3fbA-*=AV$ zKVuAGhSiDqKUiakGDL+OIX#PEHk+Hs^1RixOrLW6?j9#kA`V@Lh6KY}&2c+M*YaB~ z7gRKt(((CO19iu*4{e)h@?5rEN3`D*Xf9?jmq!=cW?`#P+~D@$h!;z7Of!W2BjGV* zYJbj>xT0ktg}=iP%I2B`%~o^GBr=%Q5y2IPc(vX**sWLgNG+Q*@&G(@KI3PW&)eMR z#H95{A^K}f9ceOKfeB@X7+8;7?M;T|)8n{)daP^dX%gwv<3+8=p6cJ;MYXu5FeQdW znM+5$?K?w{Dg%|JDv#l|s_e3wRW^w^%uJD%XGl@hl5I= z`z^~o;4PaxnVMsAyUAUl?6Gs{6$SRUVqo zYlS5Bj!6C!lJ7}jD9{-VoKde>mF`-i2nri@#cI0 diff --git a/buildSrc/build/classes/kotlin/main/Deps$cardView$2.class b/buildSrc/build/classes/kotlin/main/Deps$cardView$2.class deleted file mode 100644 index 0b96185494733b0bb0f9497b3c872ae19a74580c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1042 zcmZ`%+iuf95IyT$>jrY6(0eJgKvHO&mcj!Km8#N;NFg9nMM8br*h{*JvqrWP;H}@n z7l4qc1QM!vU&&#s9&YK%5~iRp09fhKYRPT$ZQJwy;CW@wux}As`XN z%Tmd3iy@LPGzgim6dEbyFkvEw%M8g%t-ilq+u5aK*(RL_;OwcePejNa9&%zby8Q_K zDW;bUnazO-ZAKVahg{AY!`#VH(mXjbjm$;bGABnfMu|N(zrBkaNke1S8OF<8dFpM~ z>jhL9s4QK00ylMKm$X3n6ef`!qtnW8E`)M~vZV-$osjT5o$)z>WI0wwaB2Q{?DT2%(PiaJRfp%y?DXM95bW>-H zuSAY<<%14VlBu)!B*pbJ{sqR1V-!B(_7D`q8o5onJOoT(o$M%X(R!CYgN9&Zu;0Nw r+8+{fn%bW^K%|1%!8?cfQ){7ut60>_wF9sK*Re#Q0LuYx1W5h_c>UrX diff --git a/buildSrc/build/classes/kotlin/main/Deps$core$2.class b/buildSrc/build/classes/kotlin/main/Deps$core$2.class deleted file mode 100644 index 075417b450a20d453239ee0fc116a9c024546db2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1035 zcmZ`%TTc@~6#iy=r4(8!${j^eTeRI4kq4+G1R*x5)mYNR@HE{W%e32Bv%78Zjo;!g z(3nV~i6K7vql{-t(Hgbco-^m1@7%tb?>|0&1+a-NhVdujjlX8Oo><$6fib+OcHF>` z%53+$rc{CO6nD%j?>23|Ga7r{Q&u2d<(r4YQ?Xoa^FB8nu3Bb2@T6+(?Cvnk|G#1k zVTR?A_&=(~5M_u;)pt9BVLF=|>GHhU7FIw#{&WwUClN;?0R!UTI4&y>2|5GRVd~?t5}L-k|7+NNS|S%I>H`h zN6S*lV3#43%{2&>t>hX>WH6mT1lJkjm0JC1ueN_c$FfBv55QAbtUeO~w|T&+lF{vl z=!%#YX)>Dw6WR^G1<9O?-P7HR6WGY|sstxpLLp zuG{lzGSFCh=os$m$*yU3vPsNfYK%_n3@M5VWea6V;TJjq;rCseh)-3e6185pDZC@z zbjXvbx)ygD+>_cKIu~B{R3N*eqWaR8EJlF@-PN(uB%sECHZ~`WIl7plW(t|$5VVMci(1cP{m&s73 z?igJUo#Vy_9i%3+zv43#*T3;EFkYP__YwCmK@pV5ouK4Pz$`Y%4&xrlhx9k-5o`|h t13V)An2>X{{`@gQ6)X(CMJ!!e%N5+jEiG1#!F=4tDusNk`MBdF{u5<(-j4tP diff --git a/buildSrc/build/classes/kotlin/main/Deps$coroutineAndroid$2.class b/buildSrc/build/classes/kotlin/main/Deps$coroutineAndroid$2.class deleted file mode 100644 index 77d4e283c3a9d1de5c30a68f239a55b8ef749a98..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmZ`%TW=CU6#izpc8i5#YfEolS{16W^kN@cY(i=qNf3=RB&JUTyV8MW*6fAoTYrnc zKx1MPO-$pXKgxIpXvL^xnKS2{?|kPn=f}@4-vDf5hhgrC^~PIkIj$4lbIbmYO1wx;R_VitMTW{e4u6 zYYMZ;Fj?Z#k?(p=;8A6uvQz^x+*6fZSL4ejFo)?0x~(%L$!kf|k}Y9*g|1Kd1IMJ7 zNmgl@YC*4QxyQU|lO)H@>UpON@L7ls0z(Sb2a0klX&qM-Q^G?Y#%pf(1ag+Z3YASi^?AWv~b zbB!d_K*_6U(iEvOM%P2H~AIXt8?T&;lU6T!3LRi3LXOHu}OLu z_vzfCzeY>2J&+Iah~#5JW~lvz6ND;Q9DGYyzSLGKxQScpxP1cV;SN^G0$(aobX>8z83SW@ zS?)N#EtS>obuFoU;VN!hW!|kf`R-`!O`saSbd+Zu4z+xt+~z%Q*<7`(s_#nG+TGh_ znEyXx3}J@lk@yv?F+>@nQuUmUpvp7Zkt{FjZPD;4$KUQ@@&w{AO&AzwSSdSh%W4b1 z?s7>*bEO=g4;rXAekHJNqS+!)?h=$66!vasDAz9s=4n;zY~;3cTX9S9Sx9db1{7#7b@hy7U8(J%bKzB>eAyKx)svni|NfshU`Ujd5^mAvo+oIM$ph7}9glX1 zdOvZR3}aQtrpF zq}~x(`+~$rQW$b{M*GevU7!^r5)EA+LPP1K1{x#4DOlu5^e=^w>gUN1X|9ok9wZ|I2fLarU?UM49ivJwF+$~ zXnI^w(OgOu@QVg&Dya2bmuRw<>gKt$JtgdXpp@%x4JUNmwmZkJX!={Fd?~*f$2dbc zI1xU>WcA7@i7HwaQUp5;p=_=}*lZ=&NFswN6A@fzh*xU$!`<56J{`*zO?&{JxE%3w zC*U>@I58RBeu(}W(;`h~b6`T7AqLhVmtA65I6sY>=clHT9w(JPKb z8nezYR_0R4cU{%B=VcsIo~+Voy(lkT+fOWU9*IZi7}y+e7F4tDX!**Qv<9@CEsI|4f}BS&`E5_FV4!4vjIj zFD+O3v^CWGiLx0IbY55oCBeg%?^1RS6ES`$|KYmEi-0yD>S8WdY3jK zL7p|T7D-d@h^&4_@&g?h@+6}JXOu3`(h!M;t_`7~OiBZd5nuuZ@+1eBLP!tt6o)j| zNJ9^lqM9Z{H+9D7YUm6%KI$MPnfV=`rnr8_zQTBYhTJDSxBx{^BDYDGF90)GCp(P$ zBp=ad&=PD6^h0ctenQAuYJctsp$g^)?*bMtt)&WX;+7V-kHCD~!7_z>toXR=BmN8J CEaw*h diff --git a/buildSrc/build/classes/kotlin/main/Deps$fragment$2.class b/buildSrc/build/classes/kotlin/main/Deps$fragment$2.class deleted file mode 100644 index 53871408a3ea15e43c2adb173207299e345872f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1046 zcmZ`%TW=CU6#izpc8i5#wRdktg=$%P^P$BiO>H9yqLGHg^l4zXbYPh^y923j{Vo0i zjfqV(F^!M@DB~HRiZ=pt=A84*ch31Z-@bqP0$>A=7?Mw%*Fomk=gp2IRc0*)#_*!t z_LM86)#`ODA(i7x?pkHusoQ*eG#fp;&J59=BXBn^sl%LN>Q|wi)LB z&lp3P;l@b*AFMG%8KOe=ytczImCcP*d0uZh4MjD64-bnc5Qk~Pz&OKF+4GxL%TaZo z3u>B6=_x)KpyH`Y*L8^|!=>$e!amJk%CdENS!t`&t=0T`elv~K9fnXgS0iM$l&d9>#*~Q&t}(<*mFnScWpAIZ#Rh5J2Txv#`^-_?=86-O(dmWg z-(vbmkz4P(&~AuB%=8 zuNzQjptf}5G2GLgUDYCG6PU*27~Pf!yWvRNkqzMl`L-hbo@bN($+D16rQ4}H{vofs z6iJu826t=R7up{N=U;ZE5*?=`dm<1N-~FXGL!u<5?fYh zFjf^!$yL`UezWRz{f2WObg|hXZ|yHu6sYqE4MuB>Sv?A=6i)5Z4vbM`g}g^8 zACY)R7lu5Y(S9&W4`^M8L_=4G&`>(5fyM|h4T~a){-Y35{W^sq%@wlHf>Kt~r0J!u z7+nsXHq)$ diff --git a/buildSrc/build/classes/kotlin/main/Deps$gson$2.class b/buildSrc/build/classes/kotlin/main/Deps$gson$2.class deleted file mode 100644 index 061560dcb2c9b317de5171f2d1ce6e0dd35c4bde..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1033 zcmZ`%ZBG+H5PtUhN-0n(3Y0e$)E1>J6^W5bLJ(q;T8$-544<~wwQPIcHFwu0e&e_J z3p6H@Xkv&T{ZYo*qiBuVTxWJ>o_TwAzyJ9B6~Gp@8OEQ8H{M#?(`v0017mnm?P}kV zs?Ztq3R3yPRop35d9T^xJEO7JeP#PnE3a@kJQd5;4j=G>!&SRb_g$&lJG(m!ng3Ue zA zmGpNRLfKq{P}xeZkwh9Z2}E#}AzrD~kM?T&2XrjkL~#I~zU1_o@Og{-oGMwpL5MDh z8IdBh8JI9;h=Fy<)!JlOJU@*m&QB9oYLZmy{4`?~+0(?gcTp>D8BB@px6GARZ+p7$ z(PW^p%+N91Hj`a3++>rO#q=1R))}TKDpX4-TM94V^$EXEG*F-_m8kW5P2nE#rbC`| zRomQYa90|8=v;W&SHA3tiW*2yl7H_v%?!zkQo`MLxaSEXaOyzWj`rx8(C#O?#V}Tv zZN>e*OZ5|V-FIzqC{45ZVco`GRZ*nLBeWR3Ud)?Sh^269kFI`WUOCP+=@e#K`gZhqrmV7)p+?j!DAfFjr=cY=~H0COmj9mXA!_vvrZBiIV`Jv<=& pn2__de&!gV3KoKI5lffWas?~6Zp4jaFb_AeN+Azx9&UMv{{+`H-cA4j diff --git a/buildSrc/build/classes/kotlin/main/Deps$jsoup$2.class b/buildSrc/build/classes/kotlin/main/Deps$jsoup$2.class deleted file mode 100644 index 42d6eaef132e29a2625510e61aed08fbfafe3742..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 zcmZ`%TTc@~6#iy=WvR4OE`Ta<1K=z~-ef)Jb3YAk7Dc$&6jnRYu%_R_>Rev7|A zV4|xQg3WmG_%%zBBH76R4Ii9pzbvqg%0D?eYP)Y_2+1-FKzx?CkC^EdD=Z z0#SzRWBz|+O(4z?mulej1j9@&KUU>MvnyIY)%epqDxN|TrU?U+469Yg?O0vmH(f5N zX|9yx^WgwB$FBvpO=)HcR0!#KJd~wEX{%65Vu~T^pGc2ksyfaY#l*`}Nq?6ilFK&; zmaF6&DP%EYB8F=W$x5w$v{&0dpli8B)P~^cOD>-apSQWsDU;D3MCi{jEi$AwLls($ zFt8q(+9ihNi?gJ8ab_BsDLOJ2XNyLWJu|<(iyKKpV>THk%Un6?ZQltz>I~GD?mB_H zy0fdAlUxdOn4X~9IzyVgLbZizN#PZGKH>MBHqo7~N+oJRzbV`!-n7Y*tvW4kH@GXc zJ~A%73Y0JVqM`=UlVsofO)qU(MJeI#+uZX6F_=D3E!**EJ!tk5r_C@?mmS6Zz@_|V z-3i>5IF!2B!YFU!udFCi=P??LwiXL|6k;iw*`r@RL6!~DR_LVJ5nKO+)O)%x6iCKH zW1IqLJ1B{UZj7LjY+3`2G2k*RvZTVG2r^-v;wa4(I-v0Gg hRIn7j%UHS8u2*maH?_ER4CdiBR>|dI&BGlJ$)AeW+w1@U diff --git a/buildSrc/build/classes/kotlin/main/Deps$kotlin$2.class b/buildSrc/build/classes/kotlin/main/Deps$kotlin$2.class deleted file mode 100644 index 94a41a47c03cbf9ebec4467fe5cf531eae7be25d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1051 zcmZ`%ZBG+H5PtUh%2A+Hly`gqwME-22*yAqAqcTat;UijhELnxS+>3InY(QhzwulA z1sW4cG%<}I{ZYo*wqS|cTxWJ>o_*$J=jX4l-vMmlF~h_&=UuSY@{}v&+GY%l;Zh$7A}Y17%N@JFZJKSpwxQLAgO;I|G#sl}=$=bNM(X8N%vR1PoK9E3+i7 zXhBG!_83CxOqFoyVy2ov3Nt1mxXutSmMh2m<%2^y7V7i@eem?fj9)m4+gx#CGTPk` zJsHy?NoK8YLYpB5)*_d^!LZaji<`YO(@0K|O7_kcj68d8{`e3z;)cd-GK?3v^yK@t z*9oXHP+7X{81CuHuIX8&6PU&H7@gLsD~dYOc4S>RL9V3;f8g2l3{xc`opPsLbNpjo zbIFq`d3Ekqxi7RmbS}Q`NF~}%QFcWj$iM$*>iyKS z8OAE2A-U@K#BWx-j$e0wp~h&NF|S*pDTR~!vA;X98SOixbb+>pNHjD%goaX68fc6FW3b4R=wAvU+0T<7(oB$s9wQW_R1fH-3x1 zKw~0_CWiRvk20QZ3)b6ach2pb?_BnL|MB@NfGs>^$UG5m{56*c!js%t+f0Blyr^|` z;7Db5`mQMz#T0kU8h2YZ-yV;>?kOvfTKVR|NGnxp9p2}r!&TdC1fEpw?VW9gh5s`q z5M@{yi~oZ)fjC24s=n?DhM9a}EX(s&M_2*n_}x89o<6bwuctt81>@Y;~g(e~M)j~6k9A;98;R-{tT5lZg*7x>Ftynbn0eJd+&d)@^Z60u9 zGTeTIejE#rESar=iO`HNur9gmGQ-l@NiubIk}|SWB(i5G3r2}OO?`V8H$}WfV%BL}l=?T)-hif8~EtDmNU+e~i-_thzicC!^QSZ4e z;T`gpL!MksTij`K+9$F{&c&BK6-ZZ9RbTp&{JXzK&ycPvCA>X{`@WzdX7-ikXrESx zdOy}S!$d>26%TqI@uwQP=UL)FhRNnfyv@H@QKHIY)EI3v=EGKKO3~~tt-}O)Hpp5g zNxdVs{t4;#q%aiej1Qb~xc95quqPav8;Xo-G z(&Xr7m@&Q{ImOivVUUu{UBqW89zK&_V7xj-;Un%2K{1rcoubP_z#KNoj^YlT_vtfe x3AP6E9v+Z`oheKwp3d9io151cj^w`9F84!RYOZp1@_)RD-_Eu-s85*Rnx9&U#jNj)+WQu z{~2QlGb{|n|G^qVlp!ir&ua^YiEM5t%d2`zG&JS-(>+L@L>!3(EQ~TNmOZ~|w}h_y zTvE|oDNpl@1}dJebX}KdvRpa7C!Lf0)nqoV)RneA*;vifFOD&Wus)Ij2~VE-{*Cg zJejiB;BJlk(%1v%?3=FAvLi~WCj&|T?W?gfBuh#Of5+uPAZU)MUDa^CfYye3Kk^)g zk*aJeuDd?*C#qi8Z-_lKwCp32D&nUhB7Gww1$9Vu*s9`UkV}J&r=xCTq6lHP>LFw4Ba#t zqsyT)-27;Qlw|66e3Ihk8T|_D?HO{P@bCf@!78~Ebol}>g*CFnctGc4`dhRF>wWnM sPe?u^-mR8m zU<@y-9XD{KGTZ&GDODgm#T~QCyG@&Kj>g{flod!<`R3m6R47;5yw6RCtCm?0JgHin zTbm3E|7VOL%y4ZaehF&~QHH2geYYbRrn9+`EH9dEVFi@qqI;M;i8vAo7#L?*sk&av zY>S}jaY;pUrQCp@HBfVdTF-HaCd-xWxzc{0KbNLY(mcLk6!WEgF^&m_aBwJnhMDRm zViH-jER_tl7(&@xgV5PZu8~9r(+NZ{!w|33>igTZon1PXEz*1do;(-%xd^z;15Qjv zw;!TE$MljWvpF!K%@70YkjpMIES(<56Q{=sBRxS|`t*3gD6nUVA0MJd+|Za3!+4o1 zR~>cTo==s5%F@Nha7R}*rNzo7F^kDDI;}CJC@PdKlqH3q?*xS3ac%k!sj5_>*6TKf zx6hjnc`{Yk;!cBmQrko4;;WttWLH#FU;2{#+kbUuNLG{*-j2h4UyzWgU1d40Pjf@P zAG$WfSY5Uh4|*Q)C+cp`v&5d%$>xW=jel5CpvoiE7>zULbt|M&IK54?Fh-trvX*J5 z-Vs^*g5*a!Fyv{C4xCZCKx0EB8oEA&hB7G)G)91FnB++gE`^XDR%1yM!>8@tS+>2~C3n|GzwulA z1sW4cG%>`F{wU*YDOw|5?q+soo_*%!=Eu)3-vDgkF~ihT`@~=KlyWP|JrR!Wt(9V6 z3@>Y46*xi`I(@ewWMF%eJB1o|TNd9LjlJnfGZ0Gpg@fU#Sgv(=pBEf1+l5Bp3EAG+ z-C@LpV4VKEq7y ziYXFHv@E0ub{Rt1T$9k*YOa|?2Ga>dFvAe9)*FX=^~ydS%O(wb0G_;@?sGff77sWv z8E!vBzl>>-CbKm#q0JBj>ypdbWLP>sjVI1e6GnQ1RQmjM!6>q4iSO^DM%>Vt62o|z zOC{gAs^?Q>pt5xFG2GRaP3b9RlbFTi7@gJ`QWUkNWlK}oe!d$JzM?Gp0jZjhcD?7e zZ10e_9P(sp%H&RydqUeo=i;lL41{Y}WncJ${Cj@}&XBB1X?qoi`@T(sOzlh4Q9dmU z^?s}@hOvfdOCIz*;!iYG&ok`<+ERx3A#d{^Rurl72sK7~jCtJ(O(~q-qa_$4&jwk` zq^WmA);}Zpfes9LlF@-PN*8Efh(tp-hR{$ZrGdr>a1I6XBnOv5NDuN9hcwqnLl2aq znkGXxb;js==nU6C>L4YV`yHR9xPHdJ!gzg#+$Y?>07bA#?gU-F0L-C8b{O|aKBUi} xCDfhs#qMnOIW_NZd7p-x3pL}0`qYjs}%CF=Hrf!_%FWc<_-V= diff --git a/buildSrc/build/classes/kotlin/main/Deps$roomRuntime$2.class b/buildSrc/build/classes/kotlin/main/Deps$roomRuntime$2.class deleted file mode 100644 index 61b773d17ae63ed88c39f21626db55b0f7ba9034..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1048 zcmZ`%ZEq4m5PtS}?G+2fYTs+MRiRprV)a9dO`6(95=0{niRq_>JL$r)YwixB-}+np z1sW5ZXkv&T{ZYnQpo*yynBAFq_L-T7`SJ71Hvrps#E^dCyz$pPr8+OWG7ueSy$}Oq zcu{Vvz!lPJ^*WZ2f#XT;T4mm;+kAIC_qr<^fl$)7jz+h9vE1T4Zn<1Gt!m&2+1%aR zWmxz>V+>)2m9hLkSYwDXM1}0Bw!<)!$&OWdUT-;#fNK059u-d@4%38zNrttu@|sr5 z3F;mf)HIh;1$;O_MFo|v>k`c>m$s*b{WhnS+0kax8|t%D$Q5$=IHnlF!Kv`6X8E#) z#1SnDDS|zQP$pX=aHf>4C6LC9i3qMS#7mXx@qXptkgmlBNj(5hUugTx3AoJzPE1Cp z7oz`*X_F$iK5(Jk5Cdyd$lhXD>Yv5U{+Vf{rszoZ&lZe4duo1vA2s5J#uOMPi(D%C zuA{m>bp~on_a4I?-Pu*GQ6_;|Oi$2lgCR*-N7{~T2*=O01HvCDo8(WHg>)+2PTld2 zdEKQ*x~v-9t#MCie-vCCEmcYOgfA$*|3_|yL`h1=J8-%0JEUXsP&QoU)4I^?r^;rS zsEVfKLDwUGv#PpY!#NVV*!+mMc8L{v>O4Y&(H3J~k3uSiQ~R_66BOAbZ<$V-9g&UC zNPM6RLyl~85RB3T+7=?w(9IDvlul}(F$SE4MUlkdQ3$C)o&1RA3Z2k`QdZNX>7}k1 z-3XoI`bV9lB6Gj3mGcc^ZG=1fdcZ2j3+uUwA7e+`y_fH&4KP+`<~Ae60Jp?IZpRk<8@< diff --git a/buildSrc/build/classes/kotlin/main/Deps$swipeRefreshLayout$2.class b/buildSrc/build/classes/kotlin/main/Deps$swipeRefreshLayout$2.class deleted file mode 100644 index 3623a5edb83c5f956b628b507fcc44313069c0bb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1090 zcmZ`%TTc@~6#iy=rBqrf3gzYn)E1>T(Fds{1R*x5)lkyJ@HB0QcG~SM+1*xoc@$wpA}}z? zuu`_{R<1h-rftdQ`;0drdpID|8_=^$pnRr~$*ptq zxXp9dPp1v6WE8+4ccR4W`y@8Kjmgyr-YTZ+zRUZTE64cByES{f+Bj=|PBR)kUettS{ zoKOHn8ox2-PRalWEH9@R6`0U z({;&z$7<3G#mZ8NO21bZ_5rV(ge1yVgPS#OORbN>ZOkj-YYIc2&c)9NH-Ay=^raCaSWfxZAghKT@^&c0=q*oh&)xt^LP}9915m#%R%z z)UD8z{PAttk_kfANn0XGy(6&p1<{XmVaU)K^uQnm&_WT3c3mI2`VukiXpA|=kR>GQ z1^E#7^5jM|*GNJSl&qR2L6JIRaLspyo1e6ilFa?F&yrpLCcnXWdxrF9JRCX&kS91o z!9#~R6iD~u0iBQOZ_pBKc=8dRkbF*_Nos%o5WW%?yl)Xp7us?Ow{Tk@cMicE+{Fr+ L9IQIH=OFwWh1>Qa diff --git a/buildSrc/build/classes/kotlin/main/Deps.class b/buildSrc/build/classes/kotlin/main/Deps.class deleted file mode 100644 index 8c35a619823e21428feac6df4c02b79ef0ff45b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5692 zcmbVQ`Fk5z6+I)bBTsDEjvyCQ}(R6HjqGmdcD}6A4D?(^h6gNoiQR zr9D!3*+eECPfqt4s6eHT0D>B7Ja4Fip`n`WNi&h<>lc&lnUY+Kx*9A&Xwi4r(p6~S zcV^DSg@($A{9ewdF=mPEv?*Wh{WiYmP#!R_%%0K;4Grep+(2q}&dhki4Tkr-egn;R z^lAU#u`SGJG?lhIaaD{Ppv%ApJEn~vJ(splTWKp9wS*_M zmZ8TAh=ENuV~d7W;(UD08n;fTEpaAdUQA`Z6K^7MqA0*Xht1!rp($-eFGdqqdNOXE z_q?)>%yAE7V7txf;#Wt_bnKRR`PBoC+dz*UyMwW()8_Q7mGsU^#tu1d1H0_lJsOrV zL!5s+Y012JCKHn4Ud+Hgo3&rV$~>z-8B3?)F%PlPOLSlZ2W;+JnD2BdH9MY7X5zEn z_sM*Z7Z3vnZN?#)FZ$&Mi8E)OH>rGiAOk}-=MJv?v`BeRmR$M6bQw5e$3!&L&WKcY z&Lb#~!V&2+FlI*`qmmg-o1P%4)K8azaXaP&xBmWkGM+i0p=?Y0q=8A?6+}5s@^B50 zO`PZ-8yMtpf0Tz^Mb*2Dtw8;>wNHfg@+X0;Daw!c%#CbeDLK8 zU#9RCK6tajS1Np!557j>s};W12X9gMI)$(I!CMu+LE&va_$GyKRQP5eyj|g26yD*3 zZ&i4w!ngV0VTEs3c$W{}qwsEp_xj*F6~05^yL|9H3f~>7T)0-bS8l8xjXMwJa;LML zX_+Uyy$^;F?KEXS&T z<$WxC_u#!c?#Cq!Yn`e&b8a?#I-88zC3wggbyea0l=M{A5mxxi{Ne=bxQ6f+_rU)j zeqXyApbEc%EBH_lAH;`wnX8EwGAbwg0Bfv0S+8GB_@g==#K*Wyik4qV$@&D7WV1YO zMf#+UtN0W%ph)g&NX}@#jNZNPvi79v$<$F4w#8WQC-Tac0%To$oMR`WYb$p+RaC2EWOpbQyLG%R0CcIz_vKV$}P;pb5$@uH3w@FRDDJf}*&{m1zQS_CNKOF939vlcXd_iX6zsHy0%A!{z=E{__MuIRx-v0Fm8$MXEWSUPJ1$(JQo-7sf5*E z=(~BS2U0O!gbk5Y)J#mW%{3WuLjF)I!cJ-|J3D2i9gi`bOj_xIgeio@COJ5f%BG{% z5L+20)_yo-O=YJCFJ!EwU}w+Oa$Y}K^m26b_9|yf(7=Y6Jv}e&zw$}iD%xh*R2TW! zIv4raA{Y7C5*PW{^cMNp$QJq7s22IykQVvacozBCRu=i#E*AON5El8^@D=&k;1&7U z&K3FCzTM(mDGLPi*ob;mLsp8v@u`T)wXw2Y<(Uc)>ZpCX{)@BB4r z8HA-u!n-W>SnembvP7{}eqw7%6kF#fw!TEMRzI`lkM;MfJn zzUrwWd!zfT4`CR*IlP_VP5yXDq6+2aK} zBEjy~?ybGu`?`Z2gF(DW**BTUx3Uhu?G(y}@pkp^9k|zhGKVpRD7}cCf+k?$^eOBU zXcCwfxJ%%S8cYc20^~` zCXf=?EwD>qPGCgfh`>7qjtYzkqy?%4Dg=bUI)SwU8G+3Ln*_1~VS()e=L8N53<;bU R7!Wupa6zC`phMu|{{VGC!9@T7 diff --git a/buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module b/buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module deleted file mode 100644 index a49347afef10a9b5f95305e1058ba36adec7d6dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16 RcmZQzU|?ooU|@t|0RRA102TlM diff --git a/buildSrc/build/classes/kotlin/main/Versions.class b/buildSrc/build/classes/kotlin/main/Versions.class deleted file mode 100644 index def4094d500eb839ded149ad4aa54bb3ea37a8b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2084 zcmZXUTXWk)6vzLP6I)U2#JMyiZK2Q-NK-0b;-(i;ATcSJx^9VsX$iNrym6Gsl4n;= zr!zd{sULzzo_J;Y&>5IvGU1I6#c)_Va5?BQ;dosQ)Actt%|K}%YZxtACF_=fjD~A< zUvvxmJZKB%c(TAe&ktCjmMAp*pfPY=nvm@Z)^Yh0chGe_nqRTXR>{D)hV+3SxS>WK zt)hVm4P&g|ull_{3pC_PR>dmbWNv?t70U*uXb(LWaN#hQLLE|J7s=bKh7sErJd{^y z(olX&!+2ltT`st1b9ov)*&a=Z}DBhA z=b?u%{&y)Dn~Bc3T2wo@M(VC$-5&SI8|7+6<>~_pi=v|y9Pc!WinU_kIz=sfzekp3 z$_mZ@h?K7MRi4V$9c$GBwyE0iZTQHI;R*6&tw`iw_6yS#Ab;84= zwTl)d?GEMCb#{k)2;GJ*=wJ-N1L5yFD$ufZS1tbud0cZmC!kJh>3S=R&#-P{1RJzs zu;)+)&H7mxDHpXyb9=o}-K6fCO=lU-oT?8Gw(y7ttiu9EmU{0nMTMxTU!I2Ta0oS| zveOPo>XbC?*W;sEQ=ivOJ%4;;>W1n}P&;G%^HQHbJ}T=)Z6jmoC%>ijyuLM&PhHfD zBTr9WZY#w+J|bx}DW#KACMg+7X)Gz3NohPOWs_1aDNQ7$$)uD|N>fQ`Iw{R0rP-u( zAt}wpq?6y%bd~fD6&~oQ+XKh#G=*(K$3_+pusKG(7M0*xZCD5DGF9m%2$&bNm^+}W zd1-6l1x}CGyhBGiZI`dVc`&HHs(y!zChK%Z8iQV&i)}_W>KXEF=CMjIn%#O~=?w zgk6ZSxd@w&v4se`6l0eo?42095@GMf*wqMoKgJd#?86vaim>GvyAfeGW6X-MVvLm{ zY$e7j5w;p*wFU}_~QgJD}++Wb2y~Z~WmtWyq~yl ZiJZhei5ZCni7OKKC2mMumbfjk{Xf$werNyy diff --git a/buildSrc/build/kotlin/buildSrcjar-classes.txt b/buildSrc/build/kotlin/buildSrcjar-classes.txt deleted file mode 100644 index f0bc2a6c..00000000 --- a/buildSrc/build/kotlin/buildSrcjar-classes.txt +++ /dev/null @@ -1 +0,0 @@ -D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\BuildPlugins$android$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\BuildPlugins$kotlin$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\BuildPlugins.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\ConfigData.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$acra$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$appCompat$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$cardView$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$core$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$coroutineAndroid$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$coroutineCore$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$desugaring$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$fragment$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$gson$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$jsoup$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$kotlin$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$material$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$preferences$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$recyclerView$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$roomCompiler$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$roomRuntime$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps$swipeRefreshLayout$2.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Deps.class;D:\Workspace\Android\fast-messenger\buildSrc\build\classes\kotlin\main\Versions.class \ No newline at end of file diff --git a/buildSrc/build/kotlin/compileKotlin/build-history.bin b/buildSrc/build/kotlin/compileKotlin/build-history.bin deleted file mode 100644 index 639c6ac5e19f8e1af11e6c49187bf0dc2a29bf8e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2790 zcmb_e%Wl&^6rGerN}7P$((* zY*ygcCR=^Hzw_c=Z};W?!QilWushgh^&_Dp8K{UgLoJ3v3+0H2wfZ6y%7q6BPgNZR zBV=0Tj^^mOb{qxc5D7@EB1P2+v_NK;Mm!c;a=$Mk=_xB~D;DqLzUCAD+Q(jVy0FSk z%A>MnNF9u0si2*rpk-G?V~=a8JS%xUD-Bt0NFI*_gvyLNo2WQ;~ocer+wvC!@z(QT5bG>rxiL(>5#;k1Z#Fr+DlntLOm zuwBd3-1WsPf9y$x%gOq&>Yg{zVk&gMw2`V81vWs7ri&ODQH8Xg*KS3HIon&G9TPRA zw?K7JT0#O)Uy-rl%VCOEBy7F|;69PcHFz&<4TI1vW#dcX(CH#$n)}Ye<$@#d&-VRa zcMbonTgw1lmt7?R&^dzcI?<8in}aJ0uwZeG_+xr2De)14a*cSV>;~e?MEo|0eLx+^ ztwQllR>37QG~8ty#5+Hjk|rCz@mZxl1}z|^Q=h{UU~`3d7DrY}mqW9ZE}_wqG&uy2 z(xwSlgZ2hVpVLV~kOm5EqA#}q(4o-CrUHsv#FxYdZ8~w9AFUTGXypawKtDGtp-K)3-Uu=JbQrwA=Mn7x9KUNS8n zuMBg!Jxm=z+$tLI1;d!v;%>-$qVjb_jvU$i#d4qkgXOp8ffHuJQIB zY@H#V{fbrYbMI&S3~}fm1?G5rZiDtG6R);-4|86&(gU0ELe#-fVW*|1@{ANOpjD6v2e%4$?wU&cwYi50P|5~telyJFX7lg^1dkJN2f>Lni9 c?EljN0|5v?00Izz00bZa0SG_<0uX?}4@`|%ZU6uP diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len deleted file mode 100644 index 385497456abd391d72b187b2f97bd5c83a4a9f73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 LcmZQz0E34B0OxRT5Z)0T|5<_Ey4Nzcs$u;$s*pZ#6?86}*_z=ADRlrT^ zkfd(PrgO)ndzmJ!^5w4Q^Dn;t?aAm6SPW`>0+Cel_&}=hF(}P-0irl$dUnL}GnSTc zT1dqb`0;4;Ve%|Im+D&QEP`-P#7gowoHAYPWS}*O1XOrg@-#kGQTfY zmgoC2%UNNcA1g#1E8P%X`EVp-1t`wa322@O>rLvzR3wEil*!`a6}ypT6S^sqv7;An z_jX>sK4|vQZXLgiOvYsj-$&<2hW4eH@?^paR&S3jIq+@t4#|PDMYS^D##SHyXFyeO zrG^LHE$*)hZlOM5ZG%n;j6s(PQ(PprHf^V#$4FbPXYasDqAXhL2 zWsX?T){gLDN6&corKKf0TerLEUEn?;)*>A z{fxQvD!_fhTz=(6Jj7hR4{Yx-7jJ{w1?IvIK*OqJ24{7!9?TFcvJPB8hWhRHK@4^A zK7b(}hdOYA7b2{-EcAd2HBlX)g_}VRz(O_P0xQ%S(FQ8S%K;s9KnnGd37}SP?Kkir z0hFV=(PI(MF7?6G}jqK0Oe@HSD_(* zau%L@X)O{!5kNV!vD&G01GTP(5kL_@-Cl!60QFB&Jp!oV%|!s^JhBL&*1glVwXgS} zP^B9vx`FDy9}_?g*Lb>tq8q3?&pHr54R0<2C<3TE4-XMQ_0RII5}!0sX41W*cfN&J!Ea>hBqAS>=@CHv7XbBZOk->`#uEl0kN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBo5PGHZ+ z<1~NW9e0=j0RjXF5FkK+009C72oNAZfB=E2z>$q}*xqVUfdByl1PBlyK!5-N0t5&U IAkc}x4~--Tl>h($ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab deleted file mode 100644 index aa6c39cb76658b76553e37675ab735b0d4341719..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmbR3vzt$xfq{Vqh~Yp0!dd~O8i4pe5P(EjK?D$30x=^LgZLl-l3NUBLFAxJqNsB~ z^SOa4TYmiiF9D=M_NfBtXW#$-*8|d~Kye^73PwXoSH4jlP mu`G6|__WLI+RVrA`alREfB*srAbGqN}dNFf8c=g^nX4p;=wP~%Y@(zU*NZlni;dPA1Iv$_Haiw;GQYGi#I zTx$z9TE^+Xk#2lw$F=oTxjKaa%O>RNGzl!l9?2pZhY}xdud+$(%BPN=e!wiUZu6mU ens@%_=YgLy`dv}J=r(8c-!dAx#3RE+^xFei4nI8r diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i deleted file mode 100644 index f8bc2b3a2748e0c2a557d9bfb14bb15a138fda75..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuu?d4v6a~-^l0DK$nk;y13=Qy3SI%BJ^-p(=)1AEsoONRY=_d{>=*EW#2@g? zIkR>gOd}Gc3WPS%Ie?@8yZ?nIJM*|Gb+$=e`3 z3MMmiSR`36Hs3b{pElYZ`6x4qWg?NhmjvI5iNGW^E4pL!}fl7T$dHqv1sy3Qrl zp+*id{OsppkdlXJTM&z7x=iE&L~ctV0Thm*wpb=ete$*Yv`k*YhzL*cxphtVJD{G6 zp#vK-r1@Xxj&Gtb#g`EDBanh}EtMOot2B&mPQgS0^8)pwkT>{uiRZJ$A%rJ0KD?l4 z1R{;><2u6=5Ma@tLTnptsJc$&1JGlO;|V*5=w@inprF9$`A90*K^vgE1CwE}auMU- zq+$9OA3|~;%|mZUgDBB1H4ushEa6~FIiN8Ec|>&3bAsQ2n$`gxgB2m%F)X;Kb=wS~ zQqq=L=DUivTcTy?8mRJaDWp8oO17P>4It&X(px zg>h|kEsa%BY8rb84w#1fELpl9;<`X&6>ML-=W22HOZ=+D?5HSHJ^^l-p4P_a@RJ$n zX(vjDB=~B6Wm}yvjNe_bbpebNRvn-*Ot23L)hHvIbu^)wbxc)Xv;8x!uK*ALGQgW_ zP9L3Q_ED5C2~A9Sq1h7Ybs=Xcxa~@0{Sx8p#}+aZz?BHH(UpjsMVj-wn?>|J>}HX2 zZQvGKOP9cI7QtfZ|DHvz++L*Ku5fBtaW7IW#$Ac5RU&qqVz&|h?(V}C#rnGs?k`6lcwBTNr&c#o6su+W55W2$NdN!< diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i deleted file mode 100644 index dcca28da6c5a4930d03da1a783855221e96f99dd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuK@ET~5Jb@p*g;K?Rl{*F_`pNmprrNC3(39_@RNCQ#2H3_009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+Kq-NHy}eq0OPzL>009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF t5FkKcTOe0qeEDpL1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C&6_{n)1wa4* diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab deleted file mode 100644 index 88c71f0983612ab2add50b080e397cfb30cbc224..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIuElYz@7{>AA77T;2rTGDbAt**+RxQ4OSgZy?WKo!Lt_Z^q;47H5Sj1uw#FtIM zq+r%EFc<{|Z~wQ?h1u?X!#Th6#(BI4>DFu#{rmH>E?e?Ip5y1GSx56{`5}uu%I_JH z({foh<(52=5AsbGa@jpqIWFhq61I8w3f6E9U%O^)+{ay<#UuRcn4RJ=c5xA3u#E3` zabwn>PiYk^IEcgecx^U;8@PaDSV#ZACibq(HgN~HaSDkcDiVkUB7sOC5{LvMfk+?{ Nhy)^mNZ=nQ@D2ah!QcP@ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream deleted file mode 100644 index b8eb05d7efb626197dd0ea7d685e2936dd5f2f91..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH`%TB{E5Jg$AKv2Z{4MIr%g8TtAOBSe$?uTR&42d1hI4b>noVcNxh$TyBQDyGf z&Yg4J{kb)TE>mzYduer*zg2Ci4PTB61tuq}bCp~O`OCUW8_vk=qhTn^GlL zqBDFzC1*m6P|2=e$cNpJ8d5*$t8q-ny)wEkN4>Dk>!7bgPN)65$fvsi ztp3WS^Ug}<5f0zx5b7=eZZ=jE?%hoqiNCyq8^L+=O~E&4l4}?$@a+CYtTr4&BkHq)$ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at deleted file mode 100644 index d4c0665aa159f0149ddb4236e2ccaefb6b7141c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15183 zcmeI3%TB{E5JmGT`2k?h4iQ!1Q3+A0Y`ih?G+0UP$aepqcG(n(CS_6Kvxu^@UbI*xgE%9uu@YHs znj>Vj=7ZJHkFb+9fM8$qJwd6oDd>rr!)lh-W QUd>HFT=8FB@rV7`H}o?0V*mgE diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i deleted file mode 100644 index 84136b910b970d6660077eb8c9d2e77c6b18c5cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI*OGp%P9Ki7{J4ElGqNNg}mMjXlgXJZtL#19y*}xWYLpwwsvgs*hEy&WsQYld_ zRIt{?ORx}u)Wrfr0%6GxTV0kY@)FdcG&ZxTqk`+dghO*)))OCfB*srAW%vmSzLz{ zj-*P(u+RGf6Eb4wo|WsoKPeL;fB*srAb^1C0%=*Fb}Wy4QoT?5LjVB;5OAl!sJzeo zTC(_xJG-ChdacY6kB*#~*}^LXyeCjyTo*RAZt~t_OoRXeMg`ImxUZ$A&1k$+ad9cU zy*WDQRDJ3qfB*tk3#^cJ*`oU1t5(+`KLQAtC(tGLZSAX!a=%|`-h^bbLtsdXEbDFE zW=Ab*I42O7=f#2Xr>mXofXWCUfB*srm@n{6Qm%UPENFgaG9rM0Y663@o(+v3?I^de zVL7lXcz0*H$4?*ECofVjqu-~$=PLqs3go3&c+Eh&oi(Y2K)C`7<+&aFny4%Hc#iY8 zz+t(5j%!u^MqqkffxKKNr~c&obpw4Ga8Z07Yuat6$3G^0{BHPh&*?s_s$V7ZWk1yP zSe3sZiL0k3N6gBfl|+pOr91oeBZ*L1AS36o@AaYP9QPer0 z`P@L2({}&=F9D=M_NfAC#jXGU>jCMjoBsc|1=5puLEHgkj)Kt;7!85Z5Eu=C(GVC7 cfzc2c4S~@R7!85Z5Eu=C(GVC70TMz008&03U;qFB diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream deleted file mode 100644 index e07ca8fbf77afe77852560a1d9664f22267adbaa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIuu?>JQ3r5S}P&S=K(Hwb${Bhk*bIFPo4+62pPmWm2%AQg(2qxJ_2$jT~9p8fhKE znaY6^zkmZL{|t%)Rq!7;bL7U6qGzOqznPKLn(qEIn)VX8#;DKu z;s)!*++SRe`Qi=6lORc1lwPCBo$GY4MZ+Q6Ok+;_?6(>b|Gt}dty#;pJmOl8_}y~h z$a6p%bAGmF$$4w}#MN=f`oXq5Yoq0zoVS*1w;tRC*(D&4foyB?xFI`+JYmQ#$i;a3 zb{(#%K^ooFINA>SYc!=RpgDQ=+!kry9tNR*GmgV#OWau;0n+ZpyMrKPoBmy;Z0-h; zrtnhA`z+No^}TF>)!1hw7e1%Ej5zWno4og9W*@(Ez&@7aR9I#qv&^OSTMxbgV>R5G zGwwO_HD}DTHx@i`+ch1mOVIV~eY*ko(IlYP2--JyGQDWp+^Aens z;DQN0FTv*|_<{*8O7KMqzGQ;0NbqF|o-x7KB>1WXUpK*X51u&yGQCG2IoRMSF5wsfE6)$Wvk+#DMW=r#NiOh zgNWt%HH+zn5@LE;qec(|W+SYM@jaOmbj|5f1J%*>Su*TXk-te3dO^I;#VG};_Rco2 zw_V_L@|M?gp`EK$%UVAHiX;sn9FzpXVpi z&LgrKtv=vvn{mj`EFmpud_$8v8mPK7IP2Z-g^bGwd!Ji*Cf@eF4P;tC=GxEip$&3AlF4a$vFVXlIm%4 z)4*GXEZLvd-ZSvFAojqP0J5;4`|sZ_k3c=c+hN9{#ilrs7i;f7~Jn zBt&<7<|3klT<*QS21q~Oi z{)0s;Vjbd6uzd1=q7in{V*rAo8sIW8ty>IEXw8c~-GcY68C- z9>YzR$g_}VA@3pcxyr+2eE z@+{<8$g_}VIbZ@TE_^nN3vnO3D&8;3g|Mg)iweto-pP|JDtrXb!ut8%AJd}b(weC% zxx83Wa*6fxGF$&I>gV_E%P=>t5X@qj#j>(3++{5PNX}7q85gC;zhp)3Usgrjsfvh; XMec_xa^JT_@$&4mR@8pzGWNd#+&m^B diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i deleted file mode 100644 index a0ba4d7a6ae4dae1fd65d5df57ae991a10d7f513..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeI%p$)=N5C-6vG+_=*gJF@%BCDC86Ci6ykd+OJ9TPrl3L zzx(W^O{$VdfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfWWE*POHZ$h zOM3MXm=ltOBC4MnhmU1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ON IfM5s!0Evnd3;+NC diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream deleted file mode 100644 index 405e092a6f23ec8e2e4457a4ca09ee92146bdad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIuF%H5o425AX1P5S4WI%`w2^KFVaVsmWQ`zDEgfnz~mY%%*!*@?-dN;4JaTdB* z@ur0)j(%JvLTnbN&sUf7^h`0fvKrOam+`L6CY=*^KGpu%l}fUS6|t-mBX-*rdx?iO b`-cuV2tWV=5P$##AOHafKmY;|fB*!3J~&uz diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len deleted file mode 100644 index 385497456abd391d72b187b2f97bd5c83a4a9f73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 LcmZQz0E34B0O{eKIP2-~ zE!)Z7vK%W&V#IEg$^g7zHATbN+N-D7yFA)+Owvr>W6bpXQlbI!%d#Sq- kb1w;*Z#<3pzZ6D*{9lrJdidAr;rER^$z8T%u6Ans1H_v#U;qFB diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i deleted file mode 100644 index 4b8fb0da37185ad367559af82aa6b78c2c0a96e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIuF%5t~5Cp(W-T^MKfB_mr5h_Y*f(lGf;{y?#gYUli*?N=BPLwDi1PBlyK!5-N z0t5&UAV7cs0Rqhh_FP=<>uEl0kN^P!1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBo5PGHT) z<1~NW9e0=j0RjXF5FkK+009C72oNAZfB=E2z>$q}*xqVUfdByl1PBlyK!5-N0t5&U IAkc}x57hz(l>h($ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab deleted file mode 100644 index 8ade2aaa..00000000 --- a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/counters.tab +++ /dev/null @@ -1,2 +0,0 @@ -18 -15 \ No newline at end of file diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab deleted file mode 100644 index 14f567c2d3a9c31a81f66cc6840dba04fd0dc93d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmbR3vzw2ffq{V;h~Yp0!kPi38i4pe5P(ErYHWaPMkoe}g8)d*8O(ynL77BR=YZyW z16Ae$X^@>6Q2U6|JgR6k1V%$(Gz3ONU^E0qLtr!nMnhmU1V%$(Gz3ONU^E0qLx5li F0069=672v0 diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream deleted file mode 100644 index 405e092a6f23ec8e2e4457a4ca09ee92146bdad5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIuF%H5o425AX1P5S4WI%`w2^KFVaVsmWQ`zDEgfnz~mY%%*!*@?-dN;4JaTdB* z@ur0)j(%JvLTnbN&sUf7^h`0fvKrOam+`L6CY=*^KGpu%l}fUS6|t-mBX-*rdx?iO b`-cuV2tWV=5P$##AOHafKmY;|fB*!3J~&uz diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len deleted file mode 100644 index 385497456abd391d72b187b2f97bd5c83a4a9f73..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 LcmZQz0E34B0OJQ5CgzSnTZJ)1{w-FN=iyrqG1a5NXst~=_8#7uca3@!*~JXZRxyq!c(~ z)wC`tw;4r%009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7dXAAu`skF9-u+O-lOK!5;& GoB}^Y%LkSK diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab deleted file mode 100644 index 2409dc13bab06fed5ed2fb2dc76a003c8fe3b656..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeH@;SGW?6oj9k2r7sS#V_`74fb#bCvXP`GA89Np8d%HWtq9{#5gc^{7V;z6v$qgacLcoNUz sMQp`R* diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len deleted file mode 100644 index c54fd0d994e56194f26ab957b17021b591efabe2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 LcmZQz00SWa02%-j diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len deleted file mode 100644 index 09407efabbe5467ec2b0cdc5cce0a25e55419604..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00Bk;000^Q5&!@I diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at deleted file mode 100644 index b655db4fe2d4d2c2c88b0eb4e6a1067b16cb5031..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1437 zcmeH`O%8%U3`XZDTtMBsGZKS8Bt#P2%%;v1oB%Cphx-dR(6C{_qUrAC>ubJ)$q+nB z@z)d3vZ6M5m_Z4DZCJ*px#DE2*u z&X?k>PSZmm+j8utb!MtVlR|`j8*}qm1WR#1@<=YAPPnVd7U8P-aHbixCHwK8o3sBr MusK_kv-MW}3z<_Z@c;k- diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i deleted file mode 100644 index 504f86b425199f0368c180c4160388677b7a66ad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 zcmeIut8PL;6hP5SfdVb%@z+Qs5?NVUS&6KytVC8;vajO{Q0pW+XC|3sk~Qpy>2NoP z&XYRUQ=MvjaIRUs*StRJxjt)AU$v}Dt?Ij8>Ze}ox7Ky7xB9D1{nxg}Pj{_ldq3U{ z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U rAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&Uc%Z-yq~Htq diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len deleted file mode 100644 index 131e265740f37d77b7c4a3676d2a7704ca3e4a29..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz0D%Su009U9fdBvi diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab deleted file mode 100644 index f93e681ca64431772f998505685b4337a59a40cf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4096 zcmeIxziSgw00;21q85=7ibxPCMMW}6a0((NNQVri6bI=f0hdx7ia2Bt2_mJ4NXJl@ zAPzx_bPx%)*7&Q2q7aKn2aygU8H$7=Ql$3zIaF|P=pS$oj?cZz!MpGGz1$g^?|Ii1 zMdQ&wBlY{fwL6N+Zi5j&`TNeoo+#R79$)c@jeoniFN%)+nPbOe;B^Sy-fmhaUi!_? z5Yqgy6hc2AGQ-=bZo?@8?IK?lE^0UDTXISMG z);P>LW>{wz8~pf0em-K0(_G~^*Eq;F``F>;g8W=z4=T#PXo+He1l>1ra=g0DMkrS-2#LFymh*LblY0lWU3eU01ENkrH9M|nzoy%L3sd%7!4)LPs5>#37;rC%al|h`R4k_j<(tq2W0=UiaMl`@HYD&-Yu+VZkB)LM9lfz&osOn89>4Hp8-F%U z2lZL&qdw~M+xn=F`qoWr)JJ{PM}5@Cqf4_*I-j2y9Af)GbCEM&cVyVQd?`=w#m&2V z^iU7=@JegG+nyxTwiN8xG{K3U(}j&L+8^@9e%ep}r*iDkfd511r}NW3x}MIn<>jv< zzNhn0PI;kzeYc!)$|;}f{GOFlPC4bTR?7S3lv7Um$cIA*ftk&hg%PKN8=ynXsDe801FapO5o8lT-Kx=-}nt((^9zR`W7^V9k1 j{9&y$zTyPp1mXnZ1mXnZ1mXnZ1mXnZ1mXn#!wLKYon3sw diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len deleted file mode 100644 index 51b37254257dd55ed68c473c39535bf86d6cc7fd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00HIz003S9Q~&?~ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len deleted file mode 100644 index d668d29e3549857164aea4d670feb76be744c537..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8 McmZQz00HI;007*Q0q-u&Eb)8E_0a`WTk^3T`h zufOS+?P|UJo}Nw6PS{Vf@i{5z?(Ok1iQ)FUyZ@!Qd31 zvw}C~5#xLhhwRzc7f9?&6x3q0&$q{gT>a5w@su>iF}{z;TlLY3NrM$gye1x-GAgF@ zrr}B9nUX_!%68POr=N(6x!ZzXbyTizN|;YoXDQ@N{dS(7APCq-5*h8FqE-+SjvQ%< z3!}`6FwAlPX%>C|oiQLzg`3|MxE4@m%m(4jsOhvRTw8Ojlme0NM)Z5`0~<+`-}I@T zU0d3wG+l|QXWQ+Lk|225G_sE$E#ez*MON~4^yx(*M&8oQK76Wdq zI+ZI9>eJQhU6~61oCHF=SK<3owDO;|Te%JHHLJC8#}X=MsJmy}mf@uPNhZ8@#(l}3T^~*8)CI1^g z@0|rzf6i0RdDj>2dvwj-GN5-O7VvpgZ6zvohuN@^2uGB1;pOW)PbV1o-^0P1SBr&m zJF!Ugx1VY=Rg)SPde!z6tJDHv&(`>D1loG;@VBQxf~Rn-zSecAhk$^_D*vNIkpKdb GAn^~Afw{2& diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i deleted file mode 100644 index 347e9244eb572ffe15f2dbed0a5b13b58ed7d1fe..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32768 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 diff --git a/buildSrc/build/pluginUnderTestMetadata/plugin-under-test-metadata.properties b/buildSrc/build/pluginUnderTestMetadata/plugin-under-test-metadata.properties deleted file mode 100644 index 806216fc..00000000 --- a/buildSrc/build/pluginUnderTestMetadata/plugin-under-test-metadata.properties +++ /dev/null @@ -1 +0,0 @@ -implementation-classpath=D\:/Workspace/Android/fast-messenger/buildSrc/build/classes/java/main;D\:/Workspace/Android/fast-messenger/buildSrc/build/classes/groovy/main;D\:/Workspace/Android/fast-messenger/buildSrc/build/classes/kotlin/main;D\:/Workspace/Android/fast-messenger/buildSrc/build/resources/main diff --git a/buildSrc/build/reports/plugin-development/validation-report.txt b/buildSrc/build/reports/plugin-development/validation-report.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/buildSrc/build/source-roots/buildSrc/source-roots.txt b/buildSrc/build/source-roots/buildSrc/source-roots.txt deleted file mode 100644 index 5bca968b..00000000 --- a/buildSrc/build/source-roots/buildSrc/source-roots.txt +++ /dev/null @@ -1,8 +0,0 @@ -src\main\resources -src\main\java -src\main\groovy -src\main\kotlin -src\test\resources -src\test\java -src\test\groovy -src\test\kotlin diff --git a/buildSrc/build/tmp/jar/MANIFEST.MF b/buildSrc/build/tmp/jar/MANIFEST.MF deleted file mode 100644 index 59499bce..00000000 --- a/buildSrc/build/tmp/jar/MANIFEST.MF +++ /dev/null @@ -1,2 +0,0 @@ -Manifest-Version: 1.0 - diff --git a/buildSrc/src/main/kotlin/ConfigData.kt b/buildSrc/src/main/kotlin/ConfigData.kt deleted file mode 100644 index e0ae2e07..00000000 --- a/buildSrc/src/main/kotlin/ConfigData.kt +++ /dev/null @@ -1,10 +0,0 @@ -object ConfigData { - - const val compileSdkVersion = 30 - const val buildToolsVersion = "30.0.3" - const val minSdkVersion = 23 - const val targetSdkVersion = 30 - const val versionCode = 1 - const val versionName = "1.0" - -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Dependencies.kt b/buildSrc/src/main/kotlin/Dependencies.kt deleted file mode 100644 index 22ded1ac..00000000 --- a/buildSrc/src/main/kotlin/Dependencies.kt +++ /dev/null @@ -1,31 +0,0 @@ -object BuildPlugins { - val android by lazy { "com.android.tools.build:gradle:${Versions.gradlePlugin}" } - val kotlin by lazy { "org.jetbrains.kotlin:kotlin-gradle-plugin:${Versions.kotlin}" } -} - -object Deps { - val kotlin by lazy { "org.jetbrains.kotlin:kotlin-stdlib-jdk8:${Versions.kotlin}" } - - val desugaring by lazy { "com.android.tools:desugar_jdk_libs:${Versions.desugaring}" } - - val appCompat by lazy { "androidx.appcompat:appcompat:${Versions.appCompat}" } - val material by lazy { "com.google.android.material:material:${Versions.material}" } - val core by lazy { "androidx.core:core-ktx:${Versions.core}" } - val preferences by lazy { "androidx.preference:preference-ktx:${Versions.preferences}" } - val swipeRefreshLayout by lazy { "androidx.swiperefreshlayout:swiperefreshlayout:${Versions.swipeRefreshLayout}" } - val recyclerView by lazy { "androidx.recyclerview:recyclerview:${Versions.recyclerView}" } - val cardView by lazy { "androidx.cardview:cardview:${Versions.cardView}" } - val fragment by lazy { "androidx.fragment:fragment-ktx:${Versions.fragment}" } - - val coroutineCore by lazy { "org.jetbrains.kotlinx:kotlinx-coroutines-core:${Versions.coroutines}" } - val coroutineAndroid by lazy { "org.jetbrains.kotlinx:kotlinx-coroutines-android:${Versions.coroutines}" } - - val roomRuntime by lazy { "androidx.room:room-runtime:${Versions.room}" } - val roomCompiler by lazy { "androidx.room:room-compiler:${Versions.room}" } - - val gson by lazy { "com.google.code.gson:gson:${Versions.gson}" } - - val jsoup by lazy { "org.jsoup:jsoup:${Versions.jsoup}" } - - val acra by lazy { "ch.acra:acra:${Versions.acra}" } -} \ No newline at end of file diff --git a/buildSrc/src/main/kotlin/Versions.kt b/buildSrc/src/main/kotlin/Versions.kt deleted file mode 100644 index b4d09b60..00000000 --- a/buildSrc/src/main/kotlin/Versions.kt +++ /dev/null @@ -1,34 +0,0 @@ -object Versions { - - const val desugaring = "1.1.5" - const val gradlePlugin = "4.2.1" - const val kotlin = "1.5.0" - - const val appCompat = "1.4.0-alpha02" - const val material = "1.4.0-rc01" - const val core = "1.6.0-rc01" - const val preferences = "1.1.1" - const val swipeRefreshLayout = "1.2.0-alpha01" - const val recyclerView = "1.2.1" - const val cardView = "1.0.0" - const val fragment = "1.3.5" - - const val coroutines = "1.4.3" - - const val room = "2.2.0" - - const val gson = "2.8.6" - - const val jsoup = "1.13.1" - - const val acra = "4.11.1" - - const val viewBinding = "1.0.2" - - - - const val lifecycle = "2.3.1" - - const val retrofit = "2.9.0" - -} \ No newline at end of file diff --git a/settings.gradle.kts b/settings.gradle.kts index f3c2a3ba..47bfbee1 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,2 +1,2 @@ -rootProject.name = "Fast" +rootProject.name = "fast-messenger" include(":app") \ No newline at end of file