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 c242e5c9..00000000 Binary files a/buildSrc/build/classes/kotlin/main/BuildPlugins$android$2.class and /dev/null differ 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 d9654fc1..00000000 Binary files a/buildSrc/build/classes/kotlin/main/BuildPlugins$kotlin$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/BuildPlugins.class b/buildSrc/build/classes/kotlin/main/BuildPlugins.class deleted file mode 100644 index c8fdeb76..00000000 Binary files a/buildSrc/build/classes/kotlin/main/BuildPlugins.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/ConfigData.class b/buildSrc/build/classes/kotlin/main/ConfigData.class deleted file mode 100644 index 18b5d56c..00000000 Binary files a/buildSrc/build/classes/kotlin/main/ConfigData.class and /dev/null differ 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 b8f740e2..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$acra$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$appCompat$2.class b/buildSrc/build/classes/kotlin/main/Deps$appCompat$2.class deleted file mode 100644 index 1f19f1b4..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$appCompat$2.class and /dev/null differ 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 0b961854..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$cardView$2.class and /dev/null differ 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 075417b4..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$core$2.class and /dev/null differ 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 77d4e283..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$coroutineAndroid$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$coroutineCore$2.class b/buildSrc/build/classes/kotlin/main/Deps$coroutineCore$2.class deleted file mode 100644 index 125adea7..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$coroutineCore$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$desugaring$2.class b/buildSrc/build/classes/kotlin/main/Deps$desugaring$2.class deleted file mode 100644 index ea9331e3..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$desugaring$2.class and /dev/null differ 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 53871408..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$fragment$2.class and /dev/null differ 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 061560dc..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$gson$2.class and /dev/null differ 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 42d6eaef..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$jsoup$2.class and /dev/null differ 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 94a41a47..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$kotlin$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$material$2.class b/buildSrc/build/classes/kotlin/main/Deps$material$2.class deleted file mode 100644 index 488a0608..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$material$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$preferences$2.class b/buildSrc/build/classes/kotlin/main/Deps$preferences$2.class deleted file mode 100644 index b0a0c7cb..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$preferences$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$recyclerView$2.class b/buildSrc/build/classes/kotlin/main/Deps$recyclerView$2.class deleted file mode 100644 index cac6797f..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$recyclerView$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps$roomCompiler$2.class b/buildSrc/build/classes/kotlin/main/Deps$roomCompiler$2.class deleted file mode 100644 index 5972384e..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$roomCompiler$2.class and /dev/null differ 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 61b773d1..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$roomRuntime$2.class and /dev/null differ 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 3623a5ed..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps$swipeRefreshLayout$2.class and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Deps.class b/buildSrc/build/classes/kotlin/main/Deps.class deleted file mode 100644 index 8c35a619..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Deps.class and /dev/null differ 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 a49347af..00000000 Binary files a/buildSrc/build/classes/kotlin/main/META-INF/buildSrc.kotlin_module and /dev/null differ diff --git a/buildSrc/build/classes/kotlin/main/Versions.class b/buildSrc/build/classes/kotlin/main/Versions.class deleted file mode 100644 index def4094d..00000000 Binary files a/buildSrc/build/classes/kotlin/main/Versions.class and /dev/null differ 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 639c6ac5..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/build-history.bin and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab deleted file mode 100644 index e6e3b026..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream deleted file mode 100644 index 60bfa67b..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream and /dev/null differ 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 38549745..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len deleted file mode 100644 index a9f80ae0..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at deleted file mode 100644 index 14435c97..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab.values.at and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i deleted file mode 100644 index 6a58ff48..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i and /dev/null differ 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 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/inputs/source-to-output.tab_i.len and /dev/null differ 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 aa6c39cb..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream deleted file mode 100644 index 2d11f2fd..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len deleted file mode 100644 index 3d52cad6..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len deleted file mode 100644 index ec8f944c..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at deleted file mode 100644 index 6fb955e2..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab.values.at and /dev/null differ 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 f8bc2b3a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len deleted file mode 100644 index 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/class-fq-name-to-source.tab_i.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab deleted file mode 100644 index a5d29bd5..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream deleted file mode 100644 index 64631a36..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len deleted file mode 100644 index c2e8349a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len deleted file mode 100644 index 01bdaa1d..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at deleted file mode 100644 index ba917709..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab.values.at and /dev/null differ 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 dcca28da..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i and /dev/null differ 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 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/constants.tab_i.len and /dev/null differ 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 88c71f09..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab and /dev/null differ 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 b8eb05d7..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len deleted file mode 100644 index 9030374d..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len deleted file mode 100644 index 60e54ab5..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.len and /dev/null differ 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 d4c0665a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab.values.at and /dev/null differ 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 84136b91..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len deleted file mode 100644 index 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/internal-name-to-source.tab_i.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab deleted file mode 100644 index e4800b05..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab and /dev/null differ 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 e07ca8fb..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len deleted file mode 100644 index 5f1f7d59..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len deleted file mode 100644 index 9e27f732..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at deleted file mode 100644 index ebddb230..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab.values.at and /dev/null differ 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 a0ba4d7a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len deleted file mode 100644 index 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/proto.tab_i.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab deleted file mode 100644 index 1eb56b5e..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab and /dev/null differ 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 405e092a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream and /dev/null differ 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 38549745..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len deleted file mode 100644 index a9f80ae0..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at deleted file mode 100644 index fcf5f0cd..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab.values.at and /dev/null differ 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 4b8fb0da..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i and /dev/null differ 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 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/jvm/kotlin/source-to-classes.tab_i.len and /dev/null differ 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 14f567c2..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab and /dev/null differ 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 405e092a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream and /dev/null differ 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 38549745..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.keystream.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len deleted file mode 100644 index a9f80ae0..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at deleted file mode 100644 index 5b7bdc31..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab.values.at and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i deleted file mode 100644 index 41743250..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i and /dev/null differ 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 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/file-to-id.tab_i.len and /dev/null differ 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 2409dc13..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream deleted file mode 100644 index 99cb6e96..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream and /dev/null differ 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 c54fd0d9..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.keystream.len and /dev/null differ 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 09407efa..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.len and /dev/null differ 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 b655db4f..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab.values.at and /dev/null differ 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 504f86b4..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i and /dev/null differ 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 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/id-to-file.tab_i.len and /dev/null differ 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 f93e681c..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream deleted file mode 100644 index 9139cf9b..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream and /dev/null differ 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 51b37254..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.keystream.len and /dev/null differ 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 d668d29e..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at deleted file mode 100644 index 03c888af..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab.values.at and /dev/null differ 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 347e9244..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len b/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len deleted file mode 100644 index 131e2657..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/caches-jvm/lookups/lookups.tab_i.len and /dev/null differ diff --git a/buildSrc/build/kotlin/compileKotlin/last-build.bin b/buildSrc/build/kotlin/compileKotlin/last-build.bin deleted file mode 100644 index 5276ae9a..00000000 Binary files a/buildSrc/build/kotlin/compileKotlin/last-build.bin and /dev/null differ diff --git a/buildSrc/build/libs/buildSrc.jar b/buildSrc/build/libs/buildSrc.jar deleted file mode 100644 index 0f188c43..00000000 Binary files a/buildSrc/build/libs/buildSrc.jar and /dev/null differ 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