New cache system

Refactoring
Separation into libraries
This commit is contained in:
2021-03-17 19:47:53 +03:00
parent 2004cb7c5e
commit 84d812a6d6
198 changed files with 4892 additions and 3477 deletions
@@ -2,10 +2,8 @@ package com.meloda.fast.activity
import android.content.Intent
import android.os.Bundle
import com.meloda.fast.api.UserConfig
import com.meloda.fast.UserConfig
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
class DropUserDataActivity : BaseActivity() {
@@ -14,9 +12,9 @@ class DropUserDataActivity : BaseActivity() {
UserConfig.clear()
TaskManager.execute { AppGlobal.database.clearAllTables() }
// TaskManager.execute { AppGlobal.database.clearAllTables() }
startActivity(Intent(this, MainActivityDeprecated::class.java))
startActivity(Intent(this, MainActivity::class.java))
finishAffinity()
}
@@ -10,14 +10,14 @@ import android.webkit.*
import android.widget.ProgressBar
import androidx.core.view.isVisible
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.meloda.extensions.ContextExtensions.color
import com.meloda.extensions.ContextExtensions.drawable
import com.meloda.extensions.DrawableExtensions.tint
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
import com.meloda.fast.api.VKAuth
import com.meloda.fast.UserConfig
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.extensions.ContextExtensions.color
import com.meloda.fast.extensions.ContextExtensions.drawable
import com.meloda.fast.extensions.DrawableExtensions.tint
import com.meloda.fast.widget.Toolbar
import com.meloda.vksdk.VKAuth
class LoginActivityDeprecated : BaseActivity() {
@@ -125,7 +125,7 @@ class LoginActivityDeprecated : BaseActivity() {
UserConfig.save()
finishAffinity()
startActivity(Intent(this, MainActivityDeprecated::class.java))
startActivity(Intent(this, MainActivity::class.java))
}
} catch (e: Exception) {
e.printStackTrace()
@@ -9,31 +9,27 @@ import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.navigation.NavigationView
import com.meloda.extensions.ContextExtensions.color
import com.meloda.extensions.ContextExtensions.drawable
import com.meloda.extensions.DrawableExtensions.tint
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
import com.meloda.fast.api.VKApiKeys
import com.meloda.fast.api.model.VKUser
import com.meloda.fast.UserConfig
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.FragmentSwitcher
import com.meloda.fast.common.TaskManager
import com.meloda.fast.common.TimeManager
import com.meloda.fast.dialog.AccountDialog
import com.meloda.fast.extensions.ContextExtensions.color
import com.meloda.fast.extensions.ContextExtensions.drawable
import com.meloda.fast.extensions.DrawableExtensions.tint
import com.meloda.fast.fragment.FragmentConversationsDeprecated
import com.meloda.fast.fragment.FragmentFriendsDeprecated
import com.meloda.fast.fragment.SettingsFragment
import com.meloda.fast.fragment.LoginFragment
import com.meloda.fast.listener.OnResponseListener
import com.meloda.fast.fragment.*
import com.meloda.fast.service.LongPollService
import com.meloda.fast.util.AndroidUtils
import com.meloda.fast.util.ViewUtils
import com.meloda.fast.widget.Toolbar
import com.meloda.vksdk.VKApi
import com.meloda.vksdk.model.VKUser
import java.util.*
class MainActivityDeprecated : BaseActivity(),
class MainActivity : BaseActivity(),
NavigationView.OnNavigationItemSelectedListener,
BottomNavigationView.OnNavigationItemSelectedListener {
@@ -56,8 +52,10 @@ class MainActivityDeprecated : BaseActivity(),
// checkLogin()
if (UserConfig.isLoggedIn()) {
VKApi.init(Locale.getDefault().language, UserConfig.token, AppGlobal.handler)
supportFragmentManager.beginTransaction()
.replace(R.id.fragmentContainer, FragmentConversationsDeprecated())
.replace(R.id.fragmentContainer, ChatsFragment())
.commit()
} else {
bottomBar.isVisible = false
@@ -192,17 +190,18 @@ class MainActivityDeprecated : BaseActivity(),
private fun loadProfileInfo() {
if (AndroidUtils.hasConnection()) {
TaskManager.loadUser(VKApiKeys.UPDATE_USER, UserConfig.userId,
object : OnResponseListener<VKUser> {
override fun onResponse(response: VKUser) {
prepareNavigationHeader(response)
openMainScreen()
}
override fun onError(t: Throwable) {
openMainScreen()
}
})
// TaskManager.loadUser(
// VKApiKeys.UPDATE_USER, UserConfig.userId,
// object : OnResponseListener<VKUser> {
// override fun onResponse(response: VKUser) {
// prepareNavigationHeader(response)
// openMainScreen()
// }
//
// override fun onError(t: Throwable) {
// openMainScreen()
// }
// })
}
}
@@ -14,24 +14,23 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.amulyakhare.textdrawable.TextDrawable
import com.meloda.extensions.ContextExtensions.color
import com.meloda.extensions.DrawableExtensions.tint
import com.meloda.fast.R
import com.meloda.fast.activity.ui.presenter.MessagesPresenterDeprecated
import com.meloda.fast.activity.ui.view.MessagesViewDeprecated
import com.meloda.fast.api.model.VKConversation
import com.meloda.fast.api.model.VKGroup
import com.meloda.fast.api.model.VKModel
import com.meloda.fast.api.model.VKUser
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.dialog.ProfileDialog
import com.meloda.fast.extensions.ContextExtensions.color
import com.meloda.fast.extensions.DrawableExtensions.tint
import com.meloda.fast.extensions.ImageViewExtensions.loadImage
import com.meloda.fast.fragment.SettingsFragment
import com.meloda.fast.util.KeyboardUtils
import com.meloda.fast.util.TextUtils
import com.meloda.fast.util.ViewUtils
import com.meloda.fast.widget.CircleImageView
import com.meloda.vksdk.model.VKConversation
import com.meloda.vksdk.model.VKGroup
import com.meloda.vksdk.model.VKModel
import com.meloda.vksdk.model.VKUser
class MessagesActivityDeprecated : BaseActivity(), MessagesViewDeprecated {
@@ -140,7 +139,7 @@ class MessagesActivityDeprecated : BaseActivity(), MessagesViewDeprecated {
chatAvatar.setImageDrawable(placeholder)
chatAvatar.loadImage(avatar, placeholder)
// chatAvatar.loadImage(avatar, placeholder)
toolbar.setOnClickListener { presenterDeprecated.openProfile() }
@@ -1,10 +1,10 @@
package com.meloda.fast.activity
import android.os.Bundle
import com.meloda.extensions.ContextExtensions.drawable
import com.meloda.fast.R
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.common.FragmentSwitcher
import com.meloda.fast.extensions.ContextExtensions.drawable
import com.meloda.fast.fragment.SettingsFragment
import com.meloda.fast.util.ColorUtils
import com.meloda.fast.widget.Toolbar
@@ -18,19 +18,19 @@ import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible
import com.github.rahatarmanahmed.cpv.CircularProgressView
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import com.meloda.concurrent.TaskManager
import com.meloda.extensions.ContextExtensions.drawable
import com.meloda.extensions.FloatExtensions.int
import com.meloda.fast.BuildConfig
import com.meloda.fast.R
import com.meloda.fast.base.BaseActivity
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
import com.meloda.fast.common.UpdateManager
import com.meloda.fast.extensions.ContextExtensions.drawable
import com.meloda.fast.extensions.FloatExtensions.int
import com.meloda.fast.listener.OnResponseListener
import com.meloda.fast.model.NewUpdateInfo
import com.meloda.fast.receiver.DownloadUpdateReceiver
import com.meloda.fast.util.AndroidUtils
import com.meloda.fast.util.TimeUtils
import com.meloda.vksdk.OnResponseListener
import java.io.File
import java.text.SimpleDateFormat
import java.util.*
@@ -1,23 +1,21 @@
package com.meloda.fast.activity.ui.presenter
import androidx.recyclerview.widget.RecyclerView
import com.meloda.concurrent.EventInfo
import com.meloda.concurrent.TaskManager
import com.meloda.fast.R
import com.meloda.fast.UserConfig
import com.meloda.fast.activity.ui.repository.MessagesRepositoryDeprecated
import com.meloda.fast.activity.ui.view.MessagesViewDeprecated
import com.meloda.fast.adapter.MessagesAdapterDeprecated
import com.meloda.fast.api.UserConfig
import com.meloda.fast.api.VKApiKeys
import com.meloda.fast.api.model.VKConversation
import com.meloda.fast.api.model.VKMessage
import com.meloda.fast.api.model.VKModel
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
import com.meloda.fast.database.MemoryCache
import com.meloda.fast.event.EventInfo
import com.meloda.fast.listener.ItemClickListener
import com.meloda.fast.listener.ItemLongClickListener
import com.meloda.mvp.MvpOnLoadListener
import com.meloda.mvp.MvpOnResponseListener
import com.meloda.mvp.MvpPresenter
import com.meloda.vksdk.model.VKConversation
import com.meloda.vksdk.model.VKMessage
import com.meloda.vksdk.model.VKModel
import kotlin.random.Random
class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
@@ -74,7 +72,7 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
}
private fun getCachedConversation(peerId: Int) {
repository.getCachedConversation(peerId, object : MvpOnLoadListener<VKConversation> {
repository.getCachedConversation(peerId, object : MvpOnResponseListener<VKConversation> {
override fun onResponse(response: VKConversation) {
conversation = response
@@ -82,7 +80,7 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
refreshConversation(response)
getCachedMessages(peerId, 0, DEFAULT_MESSAGES_COUNT,
object : MvpOnLoadListener<Any?> {
object : MvpOnResponseListener<Any?> {
override fun onResponse(response: Any?) {
loadConversation(peerId)
loadMessages(peerId)
@@ -107,7 +105,7 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
viewState.hideProgressBar()
}
repository.loadConversation(peerId, object : MvpOnLoadListener<VKConversation> {
repository.loadConversation(peerId, object : MvpOnResponseListener<VKConversation> {
override fun onResponse(response: VKConversation) {
conversation = response
@@ -129,7 +127,7 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
repository.getChatInfo(
conversation,
object : MvpOnLoadListener<String> {
object : MvpOnResponseListener<String> {
override fun onResponse(response: String) {
viewState.setChatInfo(response)
}
@@ -154,10 +152,10 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
peerId: Int,
offset: Int = 0,
count: Int = DEFAULT_MESSAGES_COUNT,
listener: MvpOnLoadListener<Any?>? = null
listener: MvpOnResponseListener<Any?>? = null
) {
repository.getCachedMessages(peerId, offset, count,
object : MvpOnLoadListener<ArrayList<VKMessage>> {
object : MvpOnResponseListener<ArrayList<VKMessage>> {
override fun onResponse(response: ArrayList<VKMessage>) {
viewState.hideProgressBar()
fillAdapter(response, offset)
@@ -177,7 +175,7 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
private fun loadMessages(peerId: Int, offset: Int = 0, count: Int = DEFAULT_MESSAGES_COUNT) {
repository.loadMessages(peerId, offset, count,
object : MvpOnLoadListener<ArrayList<VKMessage>> {
object : MvpOnResponseListener<ArrayList<VKMessage>> {
override fun onResponse(response: ArrayList<VKMessage>) {
fillAdapter(response, offset)
}
@@ -237,12 +235,12 @@ class MessagesPresenterDeprecated(viewState: MessagesViewDeprecated) :
adapter.addMessage(message, true, scrollToBottom)
repository.sendMessage(peerId, text, message.randomId, object : MvpOnLoadListener<Int> {
repository.sendMessage(peerId, text, message.randomId, object : MvpOnResponseListener<Int> {
override fun onResponse(response: Int) {
message.messageId = response
message.id = response
TaskManager.execute { MemoryCache.put(message) }
TaskManager.loadMessage(VKApiKeys.UPDATE_MESSAGE, response)
// TaskManager.execute { MemoryCache.put(message) }
// TaskManager.loadMessage(VKApiKeys.UPDATE_MESSAGE, response)
}
override fun onError(t: Throwable) {
@@ -1,21 +1,16 @@
package com.meloda.fast.activity.ui.repository
import com.meloda.concurrent.TaskManager
import com.meloda.fast.R
import com.meloda.fast.api.VKApi
import com.meloda.fast.api.VKApiKeys
import com.meloda.fast.api.model.VKConversation
import com.meloda.fast.api.model.VKGroup
import com.meloda.fast.api.model.VKMessage
import com.meloda.fast.api.model.VKUser
import com.meloda.fast.api.util.VKUtil
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
import com.meloda.fast.database.MemoryCache
import com.meloda.fast.extensions.ArrayExtensions.asArrayList
import com.meloda.fast.listener.OnResponseListener
import com.meloda.fast.util.ArrayUtils
import com.meloda.mvp.MvpOnLoadListener
import com.meloda.mvp.MvpOnResponseListener
import com.meloda.mvp.MvpRepository
import com.meloda.vksdk.OnResponseListener
import com.meloda.vksdk.VKApi
import com.meloda.vksdk.VKConstants
import com.meloda.vksdk.model.VKConversation
import com.meloda.vksdk.model.VKMessage
import com.meloda.vksdk.util.VKUtil
import java.util.*
class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
@@ -24,7 +19,7 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
peerId: Int,
offset: Int,
count: Int,
listener: MvpOnLoadListener<ArrayList<VKMessage>>
listener: MvpOnResponseListener<ArrayList<VKMessage>>
) {
TaskManager.execute {
VKApi.messages()
@@ -32,7 +27,7 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
.peerId(peerId)
.reversed(false)
.extended(true)
.fields(VKUser.DEFAULT_FIELDS + "," + VKGroup.DEFAULT_FIELDS)
.fields(VKConstants.USER_FIELDS + "," + VKConstants.GROUP_FIELDS)
.offset(offset)
.count(count)
.executeArray(
@@ -42,9 +37,9 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
TaskManager.execute {
cacheLoadedMessages(response)
MemoryCache.putUsers(VKMessage.profiles)
MemoryCache.putGroups(VKMessage.groups)
MemoryCache.putConversations(VKMessage.conversations)
// MemoryCache.putUsers(VKMessage.profiles)
// MemoryCache.putGroups(VKMessage.groups)
// MemoryCache.putConversations(VKMessage.conversations)
VKUtil.sortMessagesByDate(response, false)
@@ -61,57 +56,57 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
fun getCachedMessages(
peerId: Int, offset: Int, count: Int,
listener: MvpOnLoadListener<ArrayList<VKMessage>>
listener: MvpOnResponseListener<ArrayList<VKMessage>>
) {
TaskManager.execute {
val messages = MemoryCache.getMessagesByPeerId(peerId).asArrayList()
if (messages.isEmpty()) {
sendError(listener, NullPointerException("Messages is empty"))
return@execute
}
VKUtil.sortMessagesByDate(messages, false)
val preparedMessages = ArrayUtils.cut(messages, offset, count)
sendResponseArray(listener, preparedMessages)
// val messages = MemoryCache.getMessagesByPeerId(peerId).asArrayList()
//
// if (messages.isEmpty()) {
// sendError(listener, NullPointerException("Messages is empty"))
// return@execute
// }
//
// VKUtil.sortMessagesByDate(messages, false)
//
// val preparedMessages = ArrayUtils.cut(messages, offset, count)
//
// sendResponseArray(listener, preparedMessages)
}
}
fun getCachedConversation(peerId: Int, listener: MvpOnLoadListener<VKConversation>) {
fun getCachedConversation(peerId: Int, listener: MvpOnResponseListener<VKConversation>) {
TaskManager.execute {
val conversation = MemoryCache.getConversationById(peerId)
if (conversation == null) {
sendError(
listener,
NullPointerException("Conversation is not cached at the moment")
)
} else {
sendResponse(listener, conversation)
}
// val conversation = MemoryCache.getConversationById(peerId)
//
// if (conversation == null) {
// sendError(
// listener,
// NullPointerException("Conversation is not cached at the moment")
// )
// } else {
// sendResponse(listener, conversation)
// }
}
}
fun loadConversation(peerId: Int, listener: MvpOnLoadListener<VKConversation>) {
TaskManager.loadConversation(
VKApiKeys.UPDATE_CONVERSATION,
peerId,
object : OnResponseListener<VKConversation> {
override fun onResponse(response: VKConversation) {
sendResponse(listener, response)
}
override fun onError(t: Throwable) {
sendError(listener, t)
}
})
fun loadConversation(peerId: Int, listener: MvpOnResponseListener<VKConversation>) {
// TaskManager.loadConversation(
// VKApiKeys.UPDATE_CONVERSATION,
// peerId,
// object : OnResponseListener<VKConversation> {
// override fun onResponse(response: VKConversation) {
// sendResponse(listener, response)
// }
//
// override fun onError(t: Throwable) {
// sendError(listener, t)
// }
// })
}
fun getChatInfo(conversation: VKConversation, listener: MvpOnLoadListener<String>) {
fun getChatInfo(conversation: VKConversation, listener: MvpOnResponseListener<String>) {
when (conversation.type) {
VKConversation.TYPE_CHAT -> {
VKConversation.Type.CHAT -> {
sendResponse(
listener,
AppGlobal.resources.getString(
@@ -122,21 +117,21 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
)
)
}
VKConversation.TYPE_USER -> {
val user = VKUtil.searchUser(conversation.conversationId,
object : OnResponseListener<VKUser> {
override fun onResponse(response: VKUser) {
sendResponse(listener, VKUtil.getUserOnline(response))
}
override fun onError(t: Throwable) {
sendError(listener, t)
}
})
user?.let {
sendResponse(listener, VKUtil.getUserOnline(it))
}
VKConversation.Type.USER -> {
// val user = VKUtil.searchUser(conversation.conversationId,
// object : OnResponseListener<VKUser> {
// override fun onResponse(response: VKUser) {
// sendResponse(listener, VKUtil.getUserOnline(response))
// }
//
// override fun onError(t: Throwable) {
// sendError(listener, t)
// }
// })
//
// user?.let {
// sendResponse(listener, VKUtil.getUserOnline(it))
// }
}
else -> {
sendResponse(listener, "")
@@ -148,7 +143,7 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
peerId: Int,
message: String,
randomId: Int,
listener: MvpOnLoadListener<Int>
listener: MvpOnResponseListener<Int>
) {
TaskManager.execute {
VKApi.messages()
@@ -170,6 +165,6 @@ class MessagesRepositoryDeprecated : MvpRepository<VKMessage>() {
}
private fun cacheLoadedMessages(messages: ArrayList<VKMessage>) {
MemoryCache.putMessages(messages)
// MemoryCache.putMessages(messages)
}
}
@@ -1,7 +1,7 @@
package com.meloda.fast.activity.ui.view
import com.meloda.fast.api.model.VKConversation
import com.meloda.mvp.MvpView
import com.meloda.vksdk.model.VKConversation
interface MessagesViewDeprecated : MvpView {