Dark theme

This commit is contained in:
2021-02-20 23:21:25 +03:00
parent 88dddcb133
commit 06aa41cab1
179 changed files with 1011 additions and 1133 deletions
+10 -4
View File
@@ -6,10 +6,10 @@ plugins {
android { android {
compileSdkVersion 30 compileSdkVersion 30
buildToolsVersion "30.0.3" buildToolsVersion "31.0.0-rc1"
defaultConfig { defaultConfig {
applicationId "ru.melod1n.project.vkm" applicationId "com.meloda.fast"
minSdkVersion 23 minSdkVersion 23
targetSdkVersion 30 targetSdkVersion 30
versionCode 1 versionCode 1
@@ -21,6 +21,10 @@ android {
minifyEnabled false minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
} }
debug {
applicationIdSuffix '.debug'
}
} }
compileOptions { compileOptions {
coreLibraryDesugaringEnabled true coreLibraryDesugaringEnabled true
@@ -34,6 +38,8 @@ android {
} }
dependencies { dependencies {
implementation(name: 'mvp-debug', ext: 'aar')
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1' coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:1.1.1'
implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}" implementation "org.jetbrains.kotlin:kotlin-stdlib:${kotlin_version}"
@@ -48,8 +54,8 @@ dependencies {
implementation 'androidx.fragment:fragment-ktx:1.3.0' implementation 'androidx.fragment:fragment-ktx:1.3.0'
implementation 'com.google.android.material:material:1.3.0' implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.room:room-runtime:2.3.0-beta01' implementation 'androidx.room:room-runtime:2.3.0-beta02'
kapt 'androidx.room:room-compiler:2.3.0-beta01' kapt 'androidx.room:room-compiler:2.3.0-beta02'
implementation 'com.facebook.fresco:fresco:2.3.0' implementation 'com.facebook.fresco:fresco:2.3.0'
Binary file not shown.
Binary file not shown.
+18
View File
@@ -0,0 +1,18 @@
{
"version": 2,
"artifactType": {
"type": "APK",
"kind": "Directory"
},
"applicationId": "ru.melod1n.project.vkm",
"variantName": "processReleaseResources",
"elements": [
{
"type": "SINGLE",
"filters": [],
"versionCode": 1,
"versionName": "1.0",
"outputFile": "app-release.apk"
}
]
}
+11 -11
View File
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="ru.melod1n.project.vkm"> package="com.meloda.fast">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application <application
android:name=".common.AppGlobal" android:name="com.meloda.fast.common.AppGlobal"
android:allowBackup="true" android:allowBackup="true"
android:icon="@mipmap/ic_launcher" android:icon="@mipmap/ic_launcher"
android:label="@string/app_name" android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round" android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true" android:supportsRtl="true"
android:theme="@style/AppTheme"> android:theme="@style/AppTheme">
<activity android:name=".activity.MainActivity"> <activity android:name="com.meloda.fast.activity.MainActivity">
<intent-filter> <intent-filter>
<action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.MAIN" />
@@ -21,29 +21,29 @@
</activity> </activity>
<service <service
android:name=".service.LongPollService" android:name="com.meloda.fast.service.LongPollService"
android:enabled="true" /> android:enabled="true" />
<activity android:name=".activity.MessagesActivity" /> <activity android:name="com.meloda.fast.activity.MessagesActivity" />
<activity <activity
android:name=".activity.StartActivity" android:name="com.meloda.fast.activity.StartActivity"
android:theme="@style/AppTheme.Start" /> android:theme="@style/AppTheme.Start" />
<activity <activity
android:name=".activity.LoginActivity" android:name="com.meloda.fast.activity.LoginActivity"
android:label="@string/activity_login" /> android:label="@string/activity_login" />
<activity android:name=".activity.DropUserDataActivity" /> <activity android:name="com.meloda.fast.activity.DropUserDataActivity" />
<activity <activity
android:name=".activity.SettingsActivity" android:name="com.meloda.fast.activity.SettingsActivity"
android:label="@string/navigation_settings" /> android:label="@string/navigation_settings" />
<activity android:name=".activity.UpdateActivity" /> <activity android:name="com.meloda.fast.activity.UpdateActivity" />
<receiver <receiver
android:name=".receiver.MinuteReceiver" android:name="com.meloda.fast.receiver.MinuteReceiver"
android:enabled="true"> android:enabled="true">
<intent-filter> <intent-filter>
<action android:name="android.intent.ACTION_TIME_CHANGED" /> <action android:name="android.intent.ACTION_TIME_CHANGED" />
@@ -1,11 +1,11 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.common.TaskManager
class DropUserDataActivity : BaseActivity() { class DropUserDataActivity : BaseActivity() {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
@@ -10,14 +10,14 @@ import android.webkit.*
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKAuth import com.meloda.fast.api.VKAuth
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.DrawableExtensions.tint import com.meloda.fast.extensions.DrawableExtensions.tint
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.widget.Toolbar
class LoginActivity : BaseActivity() { class LoginActivity : BaseActivity() {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -9,28 +9,28 @@ import androidx.core.view.isVisible
import androidx.drawerlayout.widget.DrawerLayout import androidx.drawerlayout.widget.DrawerLayout
import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.navigation.NavigationView import com.google.android.material.navigation.NavigationView
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.FragmentSwitcher import com.meloda.fast.common.FragmentSwitcher
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.common.TimeManager import com.meloda.fast.common.TimeManager
import ru.melod1n.project.vkm.dialog.AccountDialog import com.meloda.fast.dialog.AccountDialog
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.DrawableExtensions.tint import com.meloda.fast.extensions.DrawableExtensions.tint
import ru.melod1n.project.vkm.fragment.FragmentConversations import com.meloda.fast.fragment.FragmentConversations
import ru.melod1n.project.vkm.fragment.FragmentFriends import com.meloda.fast.fragment.FragmentFriends
import ru.melod1n.project.vkm.fragment.FragmentSettings import com.meloda.fast.fragment.FragmentSettings
import ru.melod1n.project.vkm.fragment.LoginFragment import com.meloda.fast.fragment.LoginFragment
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.service.LongPollService import com.meloda.fast.service.LongPollService
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.util.ViewUtils import com.meloda.fast.util.ViewUtils
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.widget.Toolbar
class MainActivity : BaseActivity(), class MainActivity : BaseActivity(),
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.Color import android.graphics.Color
@@ -14,24 +14,24 @@ import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.amulyakhare.textdrawable.TextDrawable import com.amulyakhare.textdrawable.TextDrawable
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.ui.presenter.MessagesPresenter import com.meloda.fast.activity.ui.presenter.MessagesPresenter
import ru.melod1n.project.vkm.activity.ui.view.MessagesView import com.meloda.fast.activity.ui.view.MessagesView
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKGroup import com.meloda.fast.api.model.VKGroup
import ru.melod1n.project.vkm.api.model.VKModel import com.meloda.fast.api.model.VKModel
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.dialog.ProfileDialog import com.meloda.fast.dialog.ProfileDialog
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.DrawableExtensions.tint import com.meloda.fast.extensions.DrawableExtensions.tint
import ru.melod1n.project.vkm.extensions.ImageViewExtensions.loadImage import com.meloda.fast.extensions.ImageViewExtensions.loadImage
import ru.melod1n.project.vkm.fragment.FragmentSettings import com.meloda.fast.fragment.FragmentSettings
import ru.melod1n.project.vkm.util.KeyboardUtils import com.meloda.fast.util.KeyboardUtils
import ru.melod1n.project.vkm.util.TextUtils import com.meloda.fast.util.TextUtils
import ru.melod1n.project.vkm.util.ViewUtils import com.meloda.fast.util.ViewUtils
import ru.melod1n.project.vkm.widget.CircleImageView import com.meloda.fast.widget.CircleImageView
class MessagesActivity : BaseActivity(), MessagesView { class MessagesActivity : BaseActivity(), MessagesView {
@@ -1,14 +1,14 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.os.Bundle import android.os.Bundle
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.FragmentSwitcher import com.meloda.fast.common.FragmentSwitcher
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.DrawableExtensions.tint import com.meloda.fast.extensions.DrawableExtensions.tint
import ru.melod1n.project.vkm.fragment.FragmentSettings import com.meloda.fast.fragment.FragmentSettings
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.widget.Toolbar
class SettingsActivity : BaseActivity() { class SettingsActivity : BaseActivity() {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.Intent import android.content.Intent
@@ -9,9 +9,9 @@ import android.widget.Toast
import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AlertDialog
import androidx.appcompat.widget.AppCompatEditText import androidx.appcompat.widget.AppCompatEditText
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
@SuppressLint("InflateParams") @SuppressLint("InflateParams")
class StartActivity : BaseActivity() { class StartActivity : BaseActivity() {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.activity package com.meloda.fast.activity
import android.app.Activity import android.app.Activity
import android.app.DownloadManager import android.app.DownloadManager
@@ -18,19 +18,19 @@ import androidx.core.text.HtmlCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import com.github.rahatarmanahmed.cpv.CircularProgressView import com.github.rahatarmanahmed.cpv.CircularProgressView
import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton import com.google.android.material.floatingactionbutton.ExtendedFloatingActionButton
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.common.UpdateManager import com.meloda.fast.common.UpdateManager
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.FloatExtensions.int import com.meloda.fast.extensions.FloatExtensions.int
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.model.NewUpdateInfo import com.meloda.fast.model.NewUpdateInfo
import ru.melod1n.project.vkm.receiver.DownloadUpdateReceiver import com.meloda.fast.receiver.DownloadUpdateReceiver
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.util.TimeUtils import com.meloda.fast.util.TimeUtils
import java.io.File import java.io.File
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
@@ -1,24 +1,23 @@
package ru.melod1n.project.vkm.activity.ui.presenter package com.meloda.fast.activity.ui.presenter
import android.content.Context
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.ui.repository.MessagesRepository import com.meloda.fast.activity.ui.repository.MessagesRepository
import ru.melod1n.project.vkm.activity.ui.view.MessagesView import com.meloda.fast.activity.ui.view.MessagesView
import ru.melod1n.project.vkm.adapter.MessagesAdapter import com.meloda.fast.adapter.MessagesAdapter
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
import ru.melod1n.project.vkm.api.model.VKModel import com.meloda.fast.api.model.VKModel
import ru.melod1n.project.vkm.base.mvp.MvpOnLoadListener import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.base.mvp.MvpPresenter import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.listener.ItemClickListener
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.listener.ItemLongClickListener
import ru.melod1n.project.vkm.listener.ItemClickListener import com.meloda.mvp.MvpOnLoadListener
import ru.melod1n.project.vkm.listener.ItemLongClickListener import com.meloda.mvp.MvpPresenter
import kotlin.random.Random import kotlin.random.Random
class MessagesPresenter(viewState: MessagesView) : class MessagesPresenter(viewState: MessagesView) :
@@ -128,15 +127,17 @@ class MessagesPresenter(viewState: MessagesView) :
private fun refreshConversation(conversation: VKConversation) { private fun refreshConversation(conversation: VKConversation) {
checkIsWritingAllowed(conversation) checkIsWritingAllowed(conversation)
repository.getChatInfo(conversation, object : MvpOnLoadListener<String> { repository.getChatInfo(
override fun onResponse(response: String) { conversation,
viewState.setChatInfo(response) object : MvpOnLoadListener<String> {
} override fun onResponse(response: String) {
viewState.setChatInfo(response)
}
override fun onError(t: Throwable) { override fun onError(t: Throwable) {
viewState.setChatInfo(AppGlobal.resources.getString(R.string.error_obtain_chat_info)) viewState.setChatInfo(AppGlobal.resources.getString(R.string.error_obtain_chat_info))
} }
}) })
} }
private fun checkIsWritingAllowed(conversation: VKConversation) { private fun checkIsWritingAllowed(conversation: VKConversation) {
@@ -1,21 +1,21 @@
package ru.melod1n.project.vkm.activity.ui.repository package com.meloda.fast.activity.ui.repository
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.api.VKApi import com.meloda.fast.api.VKApi
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKGroup import com.meloda.fast.api.model.VKGroup
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import ru.melod1n.project.vkm.base.mvp.MvpOnLoadListener import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.base.mvp.MvpRepository import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.extensions.ArrayExtensions.asArrayList
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.extensions.ArrayExtensions.asArrayList import com.meloda.fast.util.ArrayUtils
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.mvp.MvpOnLoadListener
import ru.melod1n.project.vkm.util.ArrayUtils import com.meloda.mvp.MvpRepository
import java.util.* import java.util.*
class MessagesRepository : MvpRepository<VKMessage>() { class MessagesRepository : MvpRepository<VKMessage>() {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.activity.ui.view package com.meloda.fast.activity.ui.view
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.base.mvp.MvpView import com.meloda.mvp.MvpView
interface MessagesView : MvpView { interface MessagesView : MvpView {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.adapter package com.meloda.fast.adapter
import android.graphics.Color import android.graphics.Color
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -9,31 +9,31 @@ import android.text.style.ForegroundColorSpan
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.FrameLayout
import android.widget.ImageView import android.widget.ImageView
import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.adapter.diffutil.ConversationsCallback import com.meloda.fast.adapter.diffutil.ConversationsCallback
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKGroup import com.meloda.fast.api.model.VKGroup
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import ru.melod1n.project.vkm.base.BaseAdapter import com.meloda.fast.base.BaseAdapter
import ru.melod1n.project.vkm.base.BaseHolder import com.meloda.fast.base.BaseHolder
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.widget.CircleImageView import com.meloda.fast.widget.CircleImageView
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -116,7 +116,7 @@ class ConversationsAdapter(
private var date: TextView = v.findViewById(R.id.conversationDate) private var date: TextView = v.findViewById(R.id.conversationDate)
private var type: ImageView = v.findViewById(R.id.conversationType) private var type: ImageView = v.findViewById(R.id.conversationType)
private var userAvatar: ImageView = v.findViewById(R.id.conversationUserAvatar) private var userAvatar: ImageView = v.findViewById(R.id.conversationUserAvatar)
private var root: LinearLayout = v.findViewById(R.id.conversationRoot) private var root: FrameLayout = v.findViewById(R.id.conversationRoot)
private val colorHighlight = context.color(R.color.accent) private val colorHighlight = context.color(R.color.accent)
@@ -285,25 +285,6 @@ class ConversationsAdapter(
} else { } else {
userAvatar.setImageURI(Uri.parse(avatar)) userAvatar.setImageURI(Uri.parse(avatar))
} }
// ImageUtil.loadImage(
// VKUtil.getUserAvatar(lastMessage, fromUser, fromGroup),
// object : ImageUtil.OnLoadListener {
// override fun onLoad(bitmap: Bitmap) {
// userAvatar.setImageBitmap(bitmap)
// }
//
// override fun onError(e: Exception) {
//
// }
// }
// )
// ImageUtil.loadImage(
// VKUtil.getUserAvatar(lastMessage, fromUser, fromGroup),
// userAvatar,
// placeholderNormal
// )
} else { } else {
userAvatar.isVisible = false userAvatar.isVisible = false
userAvatar.setImageDrawable(null) userAvatar.setImageDrawable(null)
@@ -325,32 +306,14 @@ class ConversationsAdapter(
if (avatarLink.isNotEmpty()) { if (avatarLink.isNotEmpty()) {
avatar.setImageURI(Uri.parse(avatarLink)) avatar.setImageURI(Uri.parse(avatarLink))
} }
// ImageUtil.loadImage(
// VKUtil.getAvatar(conversation, peerUser, peerGroup),
// object : ImageUtil.OnLoadListener {
// override fun onLoad(bitmap: Bitmap) {
// avatar.setImageBitmap(bitmap)
// }
//
// override fun onError(e: Exception) {
//
// }
// }
// )
// ImageUtil.loadImage(
// VKUtil.getAvatar(conversation, peerUser, peerGroup),
// avatar,
// dialogAvatarPlaceholder
// )
} }
private fun setDialogType(conversation: VKConversation) { private fun setDialogType(conversation: VKConversation) {
val dDialogType = VKUtil.getDialogType(context, conversation) val dDialogType = VKUtil.getDialogType(context, conversation)
type.setImageDrawable(dDialogType) type.setImageDrawable(dDialogType)
type.isVisible = dDialogType != null // type.isVisible = dDialogType != null
type.isVisible = false
} }
private fun prepareAttachments(lastMessage: VKMessage) { private fun prepareAttachments(lastMessage: VKMessage) {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.adapter package com.meloda.fast.adapter
import android.content.Context import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
@@ -12,24 +12,24 @@ import android.widget.LinearLayout
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.MessagesActivity import com.meloda.fast.activity.MessagesActivity
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.* import com.meloda.fast.api.model.*
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import ru.melod1n.project.vkm.base.BaseAdapter import com.meloda.fast.base.BaseAdapter
import ru.melod1n.project.vkm.base.BaseHolder import com.meloda.fast.base.BaseHolder
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.extensions.FloatExtensions.int import com.meloda.fast.extensions.FloatExtensions.int
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.util.ImageUtils import com.meloda.fast.util.ImageUtils
import ru.melod1n.project.vkm.widget.BoundedLinearLayout import com.meloda.fast.widget.BoundedLinearLayout
import ru.melod1n.project.vkm.widget.CircleImageView import com.meloda.fast.widget.CircleImageView
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import kotlin.math.abs import kotlin.math.abs
@@ -384,6 +384,14 @@ class MessagesAdapter(
val boundedWidth = screenWidth - screenWidth / 5 val boundedWidth = screenWidth - screenWidth / 5
bubble.maxWidth = boundedWidth bubble.maxWidth = boundedWidth
text.setTextColor(
AndroidUtils.getThemeAttrColor(
context,
if (message.isOutbox()) R.attr.messageOutTextColor else R.attr.messageInTextColor
)
)
text.text = VKUtil.matchMentions(message.text) text.text = VKUtil.matchMentions(message.text)
} }
@@ -1,14 +1,14 @@
package ru.melod1n.project.vkm.adapter package com.meloda.fast.adapter
import android.content.Context import android.content.Context
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.ImageView import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.base.BaseAdapter import com.meloda.fast.base.BaseAdapter
import ru.melod1n.project.vkm.base.BaseHolder import com.meloda.fast.base.BaseHolder
import ru.melod1n.project.vkm.item.SimpleMenuItem import com.meloda.fast.item.SimpleMenuItem
import java.util.* import java.util.*
class SimpleItemAdapter(context: Context, values: ArrayList<SimpleMenuItem>) : class SimpleItemAdapter(context: Context, values: ArrayList<SimpleMenuItem>) :
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.adapter package com.meloda.fast.adapter
import android.content.Context import android.content.Context
import android.view.View import android.view.View
@@ -7,14 +7,14 @@ import android.widget.ImageView
import android.widget.TextView import android.widget.TextView
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.adapter.diffutil.UsersCallback import com.meloda.fast.adapter.diffutil.UsersCallback
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import ru.melod1n.project.vkm.base.BaseAdapter import com.meloda.fast.base.BaseAdapter
import ru.melod1n.project.vkm.base.BaseHolder import com.meloda.fast.base.BaseHolder
import ru.melod1n.project.vkm.util.ImageUtils import com.meloda.fast.util.ImageUtils
import ru.melod1n.project.vkm.widget.CircleImageView import com.meloda.fast.widget.CircleImageView
class UsersAdapter(context: Context, values: ArrayList<VKUser>) : class UsersAdapter(context: Context, values: ArrayList<VKUser>) :
BaseAdapter<VKUser, UsersAdapter.ViewHolder>(context, values) { BaseAdapter<VKUser, UsersAdapter.ViewHolder>(context, values) {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.adapter.diffutil package com.meloda.fast.adapter.diffutil
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
class ConversationsCallback( class ConversationsCallback(
private val oldList: List<VKConversation>, private val oldList: List<VKConversation>,
@@ -1,9 +1,10 @@
package ru.melod1n.project.vkm.adapter.diffutil package com.meloda.fast.adapter.diffutil
import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.DiffUtil
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
class UsersCallback(private val oldList: List<VKUser>, private val newList: List<VKUser>) : DiffUtil.Callback() { class UsersCallback(private val oldList: List<VKUser>, private val newList: List<VKUser>) :
DiffUtil.Callback() {
companion object { companion object {
const val ONLINE = "online" const val ONLINE = "online"
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
object ErrorCodes { object ErrorCodes {
const val UNKNOWN_ERROR = 1 const val UNKNOWN_ERROR = 1
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
import android.text.TextUtils import android.text.TextUtils
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
object UserConfig { object UserConfig {
@@ -1,29 +1,27 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.util.Log import android.util.Log
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import com.meloda.fast.BuildConfig
import com.meloda.fast.activity.DropUserDataActivity
import com.meloda.fast.api.method.MessageMethodSetter
import com.meloda.fast.api.method.MethodSetter
import com.meloda.fast.api.method.UserMethodSetter
import com.meloda.fast.api.model.*
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
import com.meloda.fast.listener.OnResponseListener
import com.meloda.fast.net.HttpRequest
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import ru.melod1n.project.vkm.BuildConfig
import ru.melod1n.project.vkm.activity.DropUserDataActivity
import ru.melod1n.project.vkm.api.method.MessageMethodSetter
import ru.melod1n.project.vkm.api.method.MethodSetter
import ru.melod1n.project.vkm.api.method.UserMethodSetter
import ru.melod1n.project.vkm.api.model.*
import ru.melod1n.project.vkm.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager
import ru.melod1n.project.vkm.listener.OnResponseListener
import ru.melod1n.project.vkm.net.HttpRequest
import java.util.* import java.util.*
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
object VKApi { object VKApi {
private var context: Context? = null
private const val TAG = "VKM:VKApi" private const val TAG = "VKM:VKApi"
const val BASE_URL = "https://api.vk.com/method/" const val BASE_URL = "https://api.vk.com/method/"
@@ -32,10 +30,6 @@ object VKApi {
val language: String = AppGlobal.locale.language val language: String = AppGlobal.locale.language
fun init(context: Context) {
this.context = context
}
@WorkerThread @WorkerThread
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
fun <T> execute(url: String, cls: Class<T>?): ArrayList<T>? { fun <T> execute(url: String, cls: Class<T>?): ArrayList<T>? {
@@ -286,9 +280,9 @@ object VKApi {
val e = VKException(url, message, code) val e = VKException(url, message, code)
if (code == 5 && message.contains("invalid session")) { if (code == 5 && message.contains("invalid session")) {
context?.startActivity(Intent(context, DropUserDataActivity::class.java).apply { // context?.startActivity(Intent(context, DropUserDataActivity::class.java).apply {
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) // addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
}) // })
} }
if (code == ErrorCodes.CAPTCHA_NEEDED) { if (code == ErrorCodes.CAPTCHA_NEEDED) {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
enum class VKApiKeys { enum class VKApiKeys {
READ_MESSAGE, READ_MESSAGE,
@@ -1,8 +1,8 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
import android.util.Log import android.util.Log
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import java.net.URLEncoder import java.net.URLEncoder
object VKAuth { object VKAuth {
@@ -1,8 +1,9 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
import java.io.IOException import java.io.IOException
class VKException(var url: String, override var message: String, var code: Int) : IOException(message) { class VKException(var url: String, override var message: String, var code: Int) :
IOException(message) {
var captchaSid: String? = null var captchaSid: String? = null
var captchaImg: String? = null var captchaImg: String? = null
var redirectUri: String? = null var redirectUri: String? = null
@@ -1,13 +1,13 @@
package ru.melod1n.project.vkm.api package com.meloda.fast.api
import android.util.Log import android.util.Log
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import com.meloda.fast.api.model.VKMessage
import com.meloda.fast.api.util.VKUtil
import com.meloda.fast.common.TaskManager
import com.meloda.fast.database.MemoryCache
import com.meloda.fast.event.EventInfo
import org.json.JSONArray import org.json.JSONArray
import ru.melod1n.project.vkm.api.model.VKMessage
import ru.melod1n.project.vkm.api.util.VKUtil
import ru.melod1n.project.vkm.common.TaskManager
import ru.melod1n.project.vkm.database.MemoryCache
import ru.melod1n.project.vkm.event.EventInfo
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
class VKLongPollParser { class VKLongPollParser {
@@ -1,6 +1,6 @@
package ru.melod1n.project.vkm.api.method package com.meloda.fast.api.method
import ru.melod1n.project.vkm.util.ArrayUtils import com.meloda.fast.util.ArrayUtils
class MessageMethodSetter(name: String) : MethodSetter(name) { class MessageMethodSetter(name: String) : MethodSetter(name) {
@@ -1,12 +1,12 @@
package ru.melod1n.project.vkm.api.method package com.meloda.fast.api.method
import android.util.ArrayMap import android.util.ArrayMap
import android.util.Log import android.util.Log
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApi import com.meloda.fast.api.VKApi
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import ru.melod1n.project.vkm.util.ArrayUtils import com.meloda.fast.util.ArrayUtils
import java.net.URLEncoder import java.net.URLEncoder
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.method package com.meloda.fast.api.method
class UserMethodSetter(name: String) : MethodSetter(name) { class UserMethodSetter(name: String) : MethodSetter(name) {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONArray import org.json.JSONArray
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
class VKComment { //https://vk.com/dev/objects/comment class VKComment { //https://vk.com/dev/objects/comment
} }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import androidx.room.Embedded import androidx.room.Embedded
import androidx.room.Entity import androidx.room.Entity
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import androidx.room.Entity import androidx.room.Entity
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
@@ -11,7 +11,7 @@ class VKFriend() {
var userId: Int = -1 var userId: Int = -1
constructor(friendId: Int, userId: Int): this() { constructor(friendId: Int, userId: Int) : this() {
this.friendId = friendId this.friendId = friendId
this.userId = userId this.userId = userId
} }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import androidx.room.Entity import androidx.room.Entity
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
import java.io.Serializable import java.io.Serializable
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
class VKMarketAlbum { //https://vk.com/dev/objects/market_album class VKMarketAlbum { //https://vk.com/dev/objects/market_album
} }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
class VKMarketItem { //https://vk.com/dev/objects/market_item class VKMarketItem { //https://vk.com/dev/objects/market_item
} }
@@ -1,10 +1,10 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import android.util.ArrayMap import android.util.ArrayMap
import androidx.room.* import androidx.room.*
import com.meloda.fast.database.dao.converters.ArrayListToByteArrayConverter
import com.meloda.fast.database.dao.converters.ForwardedConverter
import org.json.JSONObject import org.json.JSONObject
import ru.melod1n.project.vkm.database.dao.converters.ArrayListToByteArrayConverter
import ru.melod1n.project.vkm.database.dao.converters.ForwardedConverter
@SuppressWarnings(RoomWarnings.PRIMARY_KEY_FROM_EMBEDDED_IS_DROPPED) @SuppressWarnings(RoomWarnings.PRIMARY_KEY_FROM_EMBEDDED_IS_DROPPED)
@Entity(tableName = "messages") @Entity(tableName = "messages")
@@ -152,7 +152,7 @@ open class VKMessage() : VKModel() {
} }
fun getForwardedMessages() = ArrayList<VKMessage>().apply { fun getForwardedMessages() = ArrayList<VKMessage>().apply {
for (model in fwdMessages) add(model as VKMessage) for (model in fwdMessages) add(model)
} }
fun isFromUser() = fromId > 0 fun isFromUser() = fromId > 0
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import androidx.room.Ignore import androidx.room.Ignore
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import java.io.Serializable import java.io.Serializable
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import android.graphics.Color import android.graphics.Color
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import androidx.room.Entity import androidx.room.Entity
import androidx.room.PrimaryKey import androidx.room.PrimaryKey
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
import org.json.JSONObject import org.json.JSONObject
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.model package com.meloda.fast.api.model
class VKWall { //https://vk.com/dev/objects/post class VKWall { //https://vk.com/dev/objects/post
} }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.api.util package com.meloda.fast.api.util
import android.content.Context import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
@@ -6,20 +6,20 @@ import android.util.Log
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import com.amulyakhare.textdrawable.TextDrawable import com.amulyakhare.textdrawable.TextDrawable
import com.meloda.fast.BuildConfig
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
import com.meloda.fast.api.VKApiKeys
import com.meloda.fast.api.model.*
import com.meloda.fast.common.AppGlobal
import com.meloda.fast.common.TaskManager
import com.meloda.fast.database.MemoryCache
import com.meloda.fast.extensions.ContextExtensions.color
import com.meloda.fast.extensions.ContextExtensions.drawable
import com.meloda.fast.extensions.StringExtensions.lowerCase
import com.meloda.fast.listener.OnResponseListener
import com.meloda.fast.util.TextUtils
import org.json.JSONArray import org.json.JSONArray
import ru.melod1n.project.vkm.BuildConfig
import ru.melod1n.project.vkm.R
import ru.melod1n.project.vkm.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys
import ru.melod1n.project.vkm.api.model.*
import ru.melod1n.project.vkm.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager
import ru.melod1n.project.vkm.database.MemoryCache
import ru.melod1n.project.vkm.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.StringExtensions.lowerCase
import ru.melod1n.project.vkm.listener.OnResponseListener
import ru.melod1n.project.vkm.util.TextUtils
import java.text.SimpleDateFormat import java.text.SimpleDateFormat
import java.util.* import java.util.*
import java.util.regex.Pattern import java.util.regex.Pattern
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.base package com.meloda.fast.base
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatActivity
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.base package com.meloda.fast.base
import android.content.Context import android.content.Context
import android.os.Bundle import android.os.Bundle
@@ -8,10 +8,10 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.AdapterView import android.widget.AdapterView
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.extensions.ArrayExtensions.asArrayList import com.meloda.fast.extensions.ArrayExtensions.asArrayList
import ru.melod1n.project.vkm.listener.ItemClickListener import com.meloda.fast.listener.ItemClickListener
import ru.melod1n.project.vkm.listener.ItemLongClickListener import com.meloda.fast.listener.ItemLongClickListener
import java.io.Serializable import java.io.Serializable
import java.util.* import java.util.*
@@ -1,9 +1,9 @@
package ru.melod1n.project.vkm.base package com.meloda.fast.base
import androidx.annotation.IdRes import androidx.annotation.IdRes
import androidx.appcompat.widget.Toolbar import androidx.appcompat.widget.Toolbar
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import ru.melod1n.project.vkm.activity.MainActivity import com.meloda.fast.activity.MainActivity
abstract class BaseFragment : Fragment() { abstract class BaseFragment : Fragment() {
@@ -11,7 +11,9 @@ abstract class BaseFragment : Fragment() {
val toolbar: Toolbar = requireView().findViewById(resId) val toolbar: Toolbar = requireView().findViewById(resId)
activity?.let { activity?.let {
if (it is MainActivity && toolbar is ru.melod1n.project.vkm.widget.Toolbar) it.initToolbar(toolbar) if (it is MainActivity && toolbar is com.meloda.fast.widget.Toolbar) it.initToolbar(
toolbar
)
} }
} }
@@ -1,10 +1,10 @@
package ru.melod1n.project.vkm.base package com.meloda.fast.base
import android.os.Bundle import android.os.Bundle
import android.view.ViewGroup import android.view.ViewGroup
import android.view.WindowManager import android.view.WindowManager
import androidx.fragment.app.DialogFragment import androidx.fragment.app.DialogFragment
import ru.melod1n.project.vkm.R import com.meloda.fast.R
abstract class BaseFullscreenDialog : DialogFragment() { abstract class BaseFullscreenDialog : DialogFragment() {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.base package com.meloda.fast.base
import android.view.View import android.view.View
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
@@ -0,0 +1,6 @@
package com.meloda.fast.base
abstract class FragmentStackActivity : BaseActivity() {
}
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.common package com.meloda.fast.common
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.app.Application import android.app.Application
@@ -17,21 +17,20 @@ import androidx.core.content.pm.PackageInfoCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import androidx.room.Room import androidx.room.Room
import com.facebook.drawee.backends.pipeline.Fresco import com.facebook.drawee.backends.pipeline.Fresco
import com.meloda.fast.BuildConfig
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
import com.meloda.fast.database.AppDatabase
import com.meloda.fast.database.MemoryCache
import com.meloda.fast.fragment.FragmentSettings
import com.meloda.fast.util.AndroidUtils
import com.meloda.mvp.MvpBase
import com.microsoft.appcenter.AppCenter import com.microsoft.appcenter.AppCenter
import com.microsoft.appcenter.analytics.Analytics import com.microsoft.appcenter.analytics.Analytics
import com.microsoft.appcenter.crashes.Crashes import com.microsoft.appcenter.crashes.Crashes
import org.acra.ACRA import org.acra.ACRA
import org.acra.ReportingInteractionMode import org.acra.ReportingInteractionMode
import org.acra.annotation.ReportsCrashes import org.acra.annotation.ReportsCrashes
import ru.melod1n.project.vkm.BuildConfig
import ru.melod1n.project.vkm.R
import ru.melod1n.project.vkm.api.UserConfig
import ru.melod1n.project.vkm.api.VKApi
import ru.melod1n.project.vkm.base.mvp.MvpBase
import ru.melod1n.project.vkm.database.AppDatabase
import ru.melod1n.project.vkm.database.MemoryCache
import ru.melod1n.project.vkm.fragment.FragmentSettings
import ru.melod1n.project.vkm.util.AndroidUtils
import java.util.* import java.util.*
@SuppressLint("NonConstantResourceId") @SuppressLint("NonConstantResourceId")
@@ -117,8 +116,6 @@ class AppGlobal : Application() {
UserConfig.restore() UserConfig.restore()
VKApi.init(this)
MvpBase.init(handler) MvpBase.init(handler)
fillMemoryCache() fillMemoryCache()
@@ -147,6 +144,7 @@ class AppGlobal : Application() {
} }
fun getNightMode(nightMode: Int = -1): Int { fun getNightMode(nightMode: Int = -1): Int {
return AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
val mode = if (nightMode != -1) nightMode else preferences.getString( val mode = if (nightMode != -1) nightMode else preferences.getString(
FragmentSettings.KEY_THEME, FragmentSettings.KEY_THEME,
"-1" "-1"
@@ -1,11 +1,11 @@
package ru.melod1n.project.vkm.common package com.meloda.fast.common
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.fragment.FragmentConversations import com.meloda.fast.fragment.FragmentConversations
import ru.melod1n.project.vkm.fragment.FragmentFriends import com.meloda.fast.fragment.FragmentFriends
import ru.melod1n.project.vkm.fragment.FragmentImportant import com.meloda.fast.fragment.FragmentImportant
object FragmentSwitcher { object FragmentSwitcher {
@@ -1,18 +1,18 @@
package ru.melod1n.project.vkm.common package com.meloda.fast.common
import android.util.Log import android.util.Log
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.api.VKApi import com.meloda.fast.api.VKApi
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.api.method.MethodSetter import com.meloda.fast.api.method.MethodSetter
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKGroup import com.meloda.fast.api.model.VKGroup
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.concurrent.LowThread import com.meloda.fast.concurrent.LowThread
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.listener.OnResponseListener import com.meloda.fast.listener.OnResponseListener
import java.util.* import java.util.*
import java.util.stream.Collectors import java.util.stream.Collectors
@@ -1,8 +1,8 @@
package ru.melod1n.project.vkm.common package com.meloda.fast.common
import android.content.Context import android.content.Context
import android.content.IntentFilter import android.content.IntentFilter
import ru.melod1n.project.vkm.receiver.MinuteReceiver import com.meloda.fast.receiver.MinuteReceiver
import java.util.* import java.util.*
object TimeManager { object TimeManager {
@@ -1,12 +1,12 @@
package ru.melod1n.project.vkm.common package com.meloda.fast.common
import android.util.Log import android.util.Log
import androidx.collection.arrayMapOf import androidx.collection.arrayMapOf
import com.meloda.fast.BuildConfig
import com.meloda.fast.model.NewUpdateInfo
import com.meloda.fast.net.HttpRequest
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import ru.melod1n.project.vkm.BuildConfig
import ru.melod1n.project.vkm.model.NewUpdateInfo
import ru.melod1n.project.vkm.net.HttpRequest
object UpdateManager { object UpdateManager {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.concurrent package com.meloda.fast.concurrent
import android.os.Process import android.os.Process
@@ -1,9 +1,9 @@
package ru.melod1n.project.vkm.database package com.meloda.fast.database
import androidx.room.Database import androidx.room.Database
import androidx.room.RoomDatabase import androidx.room.RoomDatabase
import ru.melod1n.project.vkm.api.model.* import com.meloda.fast.api.model.*
import ru.melod1n.project.vkm.database.dao.* import com.meloda.fast.database.dao.*
@Database( @Database(
entities = [VKConversation::class, VKMessage::class, VKUser::class, VKGroup::class, VKFriend::class], entities = [VKConversation::class, VKMessage::class, VKUser::class, VKGroup::class, VKFriend::class],
@@ -1,9 +1,9 @@
package ru.melod1n.project.vkm.database package com.meloda.fast.database
import android.util.SparseArray import android.util.SparseArray
import androidx.annotation.WorkerThread import androidx.annotation.WorkerThread
import ru.melod1n.project.vkm.api.model.* import com.meloda.fast.api.model.*
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
object MemoryCache { object MemoryCache {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.database.dao package com.meloda.fast.database.dao
import androidx.room.* import androidx.room.*
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
@Dao @Dao
interface ConversationsDao { interface ConversationsDao {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.database.dao package com.meloda.fast.database.dao
import androidx.room.* import androidx.room.*
import ru.melod1n.project.vkm.api.model.VKFriend import com.meloda.fast.api.model.VKFriend
@Dao @Dao
interface FriendsDao { interface FriendsDao {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.database.dao package com.meloda.fast.database.dao
import androidx.room.* import androidx.room.*
import ru.melod1n.project.vkm.api.model.VKGroup import com.meloda.fast.api.model.VKGroup
@Dao @Dao
interface GroupsDao { interface GroupsDao {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.database.dao package com.meloda.fast.database.dao
import androidx.room.* import androidx.room.*
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
@Dao @Dao
interface MessagesDao { interface MessagesDao {
@@ -1,7 +1,7 @@
package ru.melod1n.project.vkm.database.dao package com.meloda.fast.database.dao
import androidx.room.* import androidx.room.*
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
@Dao @Dao
interface UsersDao { interface UsersDao {
@@ -1,9 +1,9 @@
package ru.melod1n.project.vkm.database.dao.converters package com.meloda.fast.database.dao.converters
import androidx.room.TypeConverter import androidx.room.TypeConverter
import ru.melod1n.project.vkm.api.model.VKModel import com.meloda.fast.api.model.VKModel
import ru.melod1n.project.vkm.extensions.ArrayExtensions.isNullOrEmpty import com.meloda.fast.extensions.ArrayExtensions.isNullOrEmpty
import ru.melod1n.project.vkm.util.Utils import com.meloda.fast.util.Utils
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
class ArrayListToByteArrayConverter { class ArrayListToByteArrayConverter {
@@ -1,9 +1,9 @@
package ru.melod1n.project.vkm.database.dao.converters package com.meloda.fast.database.dao.converters
import androidx.room.TypeConverter import androidx.room.TypeConverter
import ru.melod1n.project.vkm.api.model.VKMessage import com.meloda.fast.api.model.VKMessage
import ru.melod1n.project.vkm.extensions.ArrayExtensions.isNullOrEmpty import com.meloda.fast.extensions.ArrayExtensions.isNullOrEmpty
import ru.melod1n.project.vkm.util.Utils import com.meloda.fast.util.Utils
import java.util.* import java.util.*
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.dialog package com.meloda.fast.dialog
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -9,21 +9,23 @@ import android.widget.RelativeLayout
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.SettingsActivity import com.meloda.fast.activity.SettingsActivity
import ru.melod1n.project.vkm.adapter.SimpleItemAdapter import com.meloda.fast.adapter.SimpleItemAdapter
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.base.BaseFullscreenDialog import com.meloda.fast.base.BaseFullscreenDialog
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.extensions.DrawableExtensions.tint import com.meloda.fast.extensions.DrawableExtensions.tint
import ru.melod1n.project.vkm.extensions.FragmentExtensions.findViewById import com.meloda.fast.extensions.FragmentExtensions.findViewById
import ru.melod1n.project.vkm.item.SimpleMenuItem import com.meloda.fast.item.SimpleMenuItem
import ru.melod1n.project.vkm.listener.ItemClickListener import com.meloda.fast.listener.ItemClickListener
import ru.melod1n.project.vkm.util.ViewUtils import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.util.ColorUtils
import com.meloda.fast.util.ViewUtils
import com.meloda.fast.widget.Toolbar
class AccountDialog : BaseFullscreenDialog(), ItemClickListener { class AccountDialog : BaseFullscreenDialog(), ItemClickListener {
@@ -61,7 +63,7 @@ class AccountDialog : BaseFullscreenDialog(), ItemClickListener {
private fun prepareToolbar() { private fun prepareToolbar() {
toolbar.navigationIcon = requireContext().drawable(R.drawable.ic_close) toolbar.navigationIcon = requireContext().drawable(R.drawable.ic_close)
.tint(requireContext().color(R.color.accent)) .tint(ColorUtils.getColorAccent(requireContext()))
toolbar.setTitle(R.string.account_dialog_title) toolbar.setTitle(R.string.account_dialog_title)
@@ -88,7 +90,7 @@ class AccountDialog : BaseFullscreenDialog(), ItemClickListener {
SimpleMenuItem( SimpleMenuItem(
requireContext().drawable(R.drawable.ic_settings_outline) requireContext().drawable(R.drawable.ic_settings_outline)
.tint(requireContext().color(R.color.accent)), .tint(ColorUtils.getColorAccent(requireContext())),
requireContext().getString(R.string.navigation_settings) requireContext().getString(R.string.navigation_settings)
) { openSettingsScreen() }.let { items.add(it) } ) { openSettingsScreen() }.let { items.add(it) }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.dialog package com.meloda.fast.dialog
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
@@ -10,12 +10,12 @@ import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.bottomsheet.BottomSheetDialogFragment
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.adapter.SimpleItemAdapter import com.meloda.fast.adapter.SimpleItemAdapter
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.item.SimpleMenuItem import com.meloda.fast.item.SimpleMenuItem
open class ProfileDialog( open class ProfileDialog(
private val conversation: VKConversation, private val conversation: VKConversation,
@@ -0,0 +1,5 @@
package com.meloda.fast.event
import com.meloda.fast.api.VKApiKeys
class EventInfo<T> constructor(var key: VKApiKeys, var data: T? = null)
@@ -1,6 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.content.Context
object ArrayExtensions { object ArrayExtensions {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.content.Context import android.content.Context
import android.graphics.Typeface import android.graphics.Typeface
@@ -1,10 +1,7 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.content.Context
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import androidx.annotation.ColorInt import androidx.annotation.ColorInt
import androidx.annotation.DrawableRes
import androidx.core.content.ContextCompat
object DrawableExtensions { object DrawableExtensions {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import kotlin.math.roundToInt import kotlin.math.roundToInt
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.view.View import android.view.View
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
@@ -10,7 +10,7 @@ object FragmentExtensions {
} }
fun Fragment.runOnUiThread(runnable: Runnable) { fun Fragment.runOnUiThread(runnable: Runnable) {
requireActivity().runOnUiThread(runnable) activity?.runOnUiThread(runnable)
} }
} }
@@ -1,11 +1,11 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.graphics.drawable.Drawable import android.graphics.drawable.Drawable
import android.util.Log import android.util.Log
import android.widget.ImageView import android.widget.ImageView
import com.meloda.fast.BuildConfig
import com.squareup.picasso.Callback import com.squareup.picasso.Callback
import com.squareup.picasso.Picasso import com.squareup.picasso.Picasso
import ru.melod1n.project.vkm.BuildConfig
object ImageViewExtensions { object ImageViewExtensions {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import java.util.* import java.util.*
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.extensions package com.meloda.fast.extensions
import android.widget.TextView import android.widget.TextView
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -8,25 +8,26 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.LinearLayout import android.widget.LinearLayout
import android.widget.ProgressBar import android.widget.ProgressBar
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible import androidx.core.view.isVisible
import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.MessagesActivity import com.meloda.fast.activity.MessagesActivity
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.extensions.FragmentExtensions.findViewById import com.meloda.fast.extensions.FragmentExtensions.findViewById
import ru.melod1n.project.vkm.fragment.ui.presenter.ConversationsPresenter import com.meloda.fast.extensions.FragmentExtensions.runOnUiThread
import ru.melod1n.project.vkm.fragment.ui.view.ConversationsView import com.meloda.fast.fragment.ui.presenter.ConversationsPresenter
import ru.melod1n.project.vkm.util.ViewUtils import com.meloda.fast.fragment.ui.view.ConversationsView
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.util.AndroidUtils
import com.meloda.fast.util.ViewUtils
import com.meloda.fast.widget.Toolbar
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
@@ -99,15 +100,9 @@ class FragmentConversations : BaseFragment(), ConversationsView {
val decoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL) val decoration = DividerItemDecoration(requireContext(), DividerItemDecoration.VERTICAL)
decoration.setDrawable( decoration.setDrawable(
ColorDrawable( ColorDrawable(AndroidUtils.getThemeAttrColor(requireContext(), R.attr.dividerHorizontal))
ContextCompat.getColor(
requireContext(),
R.color.divider
)
)
) )
recyclerView.setHasFixedSize(true)
recyclerView.itemAnimator = null recyclerView.itemAnimator = null
recyclerView.addItemDecoration(decoration) recyclerView.addItemDecoration(decoration)
@@ -118,7 +113,7 @@ class FragmentConversations : BaseFragment(), ConversationsView {
TaskManager.execute { TaskManager.execute {
AppGlobal.database.users.getById(UserConfig.userId)?.let { AppGlobal.database.users.getById(UserConfig.userId)?.let {
if (it.photo100.isNotEmpty()) { if (it.photo100.isNotEmpty()) {
runOnUi { runOnUiThread {
toolbar.getAvatar().setImageURI(it.photo100) toolbar.getAvatar().setImageURI(it.photo100)
} }
} }
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.content.Intent import android.content.Intent
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
@@ -14,19 +14,19 @@ import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.MessagesActivity import com.meloda.fast.activity.MessagesActivity
import ru.melod1n.project.vkm.api.UserConfig import com.meloda.fast.api.UserConfig
import ru.melod1n.project.vkm.api.VKApiKeys import com.meloda.fast.api.VKApiKeys
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.event.EventInfo import com.meloda.fast.event.EventInfo
import ru.melod1n.project.vkm.extensions.FragmentExtensions.findViewById import com.meloda.fast.extensions.FragmentExtensions.findViewById
import ru.melod1n.project.vkm.fragment.ui.presenter.FriendsPresenter import com.meloda.fast.fragment.ui.presenter.FriendsPresenter
import ru.melod1n.project.vkm.fragment.ui.view.FriendsView import com.meloda.fast.fragment.ui.view.FriendsView
import ru.melod1n.project.vkm.util.ViewUtils import com.meloda.fast.util.ViewUtils
import ru.melod1n.project.vkm.widget.Toolbar import com.meloda.fast.widget.Toolbar
class FragmentFriends(private val userId: Int = 0) : BaseFragment(), FriendsView { class FragmentFriends(private val userId: Int = 0) : BaseFragment(), FriendsView {
@@ -1,11 +1,11 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
class FragmentImportant : BaseFragment() { class FragmentImportant : BaseFragment() {
@@ -1,6 +1,6 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
class FragmentSearch : BaseFragment() { class FragmentSearch : BaseFragment() {
inner class SearchConversations : BaseFragment() inner class SearchConversations : BaseFragment()
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
@@ -6,15 +6,15 @@ import androidx.appcompat.app.AlertDialog
import androidx.preference.Preference import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceScreen import androidx.preference.PreferenceScreen
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.activity.DropUserDataActivity import com.meloda.fast.activity.DropUserDataActivity
import ru.melod1n.project.vkm.activity.UpdateActivity import com.meloda.fast.activity.UpdateActivity
import ru.melod1n.project.vkm.base.BaseActivity import com.meloda.fast.base.BaseActivity
import ru.melod1n.project.vkm.common.AppGlobal import com.meloda.fast.common.AppGlobal
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.extensions.ContextExtensions.color import com.meloda.fast.extensions.ContextExtensions.color
import ru.melod1n.project.vkm.extensions.ContextExtensions.drawable import com.meloda.fast.extensions.ContextExtensions.drawable
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.fast.util.AndroidUtils
class FragmentSettings : PreferenceFragmentCompat(), class FragmentSettings : PreferenceFragmentCompat(),
Preference.OnPreferenceClickListener, Preference.OnPreferenceClickListener,
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.os.Bundle import android.os.Bundle
import android.text.Editable import android.text.Editable
@@ -10,11 +10,11 @@ import android.view.ViewGroup
import android.view.inputmethod.EditorInfo import android.view.inputmethod.EditorInfo
import android.widget.EditText import android.widget.EditText
import com.google.android.material.button.MaterialButton import com.google.android.material.button.MaterialButton
import ru.melod1n.project.vkm.R import com.meloda.fast.R
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
import ru.melod1n.project.vkm.fragment.ui.presenter.LoginPresenter import com.meloda.fast.fragment.ui.presenter.LoginPresenter
import ru.melod1n.project.vkm.fragment.ui.view.LoginView import com.meloda.fast.fragment.ui.view.LoginView
import ru.melod1n.project.vkm.util.KeyboardUtils import com.meloda.fast.util.KeyboardUtils
class LoginFragment : BaseFragment(), LoginView { class LoginFragment : BaseFragment(), LoginView {
@@ -1,4 +1,4 @@
package ru.melod1n.project.vkm.fragment package com.meloda.fast.fragment
import android.graphics.Bitmap import android.graphics.Bitmap
import android.os.Bundle import android.os.Bundle
@@ -10,8 +10,8 @@ import android.webkit.CookieManager
import android.webkit.WebView import android.webkit.WebView
import android.webkit.WebViewClient import android.webkit.WebViewClient
import androidx.core.os.bundleOf import androidx.core.os.bundleOf
import ru.melod1n.project.vkm.api.VKAuth import com.meloda.fast.api.VKAuth
import ru.melod1n.project.vkm.base.BaseFragment import com.meloda.fast.base.BaseFragment
class ValidationFragment : BaseFragment() { class ValidationFragment : BaseFragment() {
@@ -1,28 +1,27 @@
package ru.melod1n.project.vkm.fragment.ui.presenter package com.meloda.fast.fragment.ui.presenter
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.BuildConfig import com.meloda.fast.BuildConfig
import ru.melod1n.project.vkm.activity.MessagesActivity import com.meloda.fast.activity.MessagesActivity
import ru.melod1n.project.vkm.adapter.ConversationsAdapter import com.meloda.fast.adapter.ConversationsAdapter
import ru.melod1n.project.vkm.adapter.diffutil.ConversationsCallback import com.meloda.fast.adapter.diffutil.ConversationsCallback
import ru.melod1n.project.vkm.api.model.VKConversation import com.meloda.fast.api.model.VKConversation
import ru.melod1n.project.vkm.api.util.VKUtil import com.meloda.fast.api.util.VKUtil
import ru.melod1n.project.vkm.base.mvp.MvpOnLoadListener import com.meloda.fast.common.TaskManager
import ru.melod1n.project.vkm.base.mvp.MvpPresenter import com.meloda.fast.common.TimeManager
import ru.melod1n.project.vkm.common.TaskManager import com.meloda.fast.database.MemoryCache
import ru.melod1n.project.vkm.common.TimeManager import com.meloda.fast.fragment.ui.repository.ConversationsRepository
import ru.melod1n.project.vkm.database.MemoryCache import com.meloda.fast.fragment.ui.view.ConversationsView
import ru.melod1n.project.vkm.fragment.ui.repository.ConversationsRepository import com.meloda.fast.listener.ItemClickListener
import ru.melod1n.project.vkm.fragment.ui.view.ConversationsView import com.meloda.fast.listener.ItemLongClickListener
import ru.melod1n.project.vkm.listener.ItemClickListener import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.listener.ItemLongClickListener import com.meloda.fast.util.ArrayUtils
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.mvp.MvpOnLoadListener
import ru.melod1n.project.vkm.util.ArrayUtils import com.meloda.mvp.MvpPresenter
import java.util.* import java.util.*
class ConversationsPresenter(viewState: ConversationsView) : class ConversationsPresenter(viewState: ConversationsView) :
@@ -52,24 +51,26 @@ class ConversationsPresenter(viewState: ConversationsView) :
prepareViews() prepareViews()
setRecyclerViewScrollListener(recyclerView) // setRecyclerViewScrollListener(recyclerView)
setRefreshLayoutListener(refreshLayout) setRefreshLayoutListener(refreshLayout)
createAdapter() createAdapter()
TimeManager.addOnMinuteChangeListener(this) TimeManager.addOnMinuteChangeListener(this)
getCachedConversations(0, DEFAULT_CONVERSATIONS_COUNT, object : MvpOnLoadListener<Any?> { loadConversations(0, DEFAULT_CONVERSATIONS_COUNT)
override fun onResponse(response: Any?) {
setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
loadConversations(0, DEFAULT_CONVERSATIONS_COUNT)
}
override fun onError(t: Throwable) { // getCachedConversations(0, DEFAULT_CONVERSATIONS_COUNT, object : MvpOnLoadListener<Any?> {
setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING) // override fun onResponse(response: Any?) {
loadConversations(0, DEFAULT_CONVERSATIONS_COUNT) // setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
} // loadConversations(0, DEFAULT_CONVERSATIONS_COUNT)
}) // }
//
// override fun onError(t: Throwable) {
// setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
// loadConversations(0, DEFAULT_CONVERSATIONS_COUNT)
// }
// })
} }
private fun setRecyclerViewScrollListener(recyclerView: RecyclerView) { private fun setRecyclerViewScrollListener(recyclerView: RecyclerView) {
@@ -1,21 +1,20 @@
package ru.melod1n.project.vkm.fragment.ui.presenter package com.meloda.fast.fragment.ui.presenter
import android.content.Context
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import ru.melod1n.project.vkm.activity.MessagesActivity import com.meloda.fast.activity.MessagesActivity
import ru.melod1n.project.vkm.adapter.UsersAdapter import com.meloda.fast.adapter.UsersAdapter
import ru.melod1n.project.vkm.api.model.VKUser import com.meloda.fast.api.model.VKUser
import ru.melod1n.project.vkm.base.mvp.MvpOnLoadListener import com.meloda.fast.fragment.ui.repository.FriendsRepository
import ru.melod1n.project.vkm.base.mvp.MvpPresenter import com.meloda.fast.fragment.ui.view.FriendsView
import ru.melod1n.project.vkm.fragment.ui.repository.FriendsRepository import com.meloda.fast.listener.ItemClickListener
import ru.melod1n.project.vkm.fragment.ui.view.FriendsView import com.meloda.fast.util.AndroidUtils
import ru.melod1n.project.vkm.listener.ItemClickListener import com.meloda.fast.util.ArrayUtils
import ru.melod1n.project.vkm.util.AndroidUtils import com.meloda.mvp.MvpOnLoadListener
import ru.melod1n.project.vkm.util.ArrayUtils import com.meloda.mvp.MvpPresenter
class FriendsPresenter(viewState: FriendsView) : class FriendsPresenter(viewState: FriendsView) :
MvpPresenter<VKUser, FriendsRepository, FriendsView>( MvpPresenter<VKUser, FriendsRepository, FriendsView>(
@@ -51,7 +50,7 @@ class FriendsPresenter(viewState: FriendsView) :
getCachedFriends(userId, 0, DEFAULT_FRIENDS_COUNT, false, object : MvpOnLoadListener<Any?> { getCachedFriends(userId, 0, DEFAULT_FRIENDS_COUNT, false, object : MvpOnLoadListener<Any?> {
override fun onResponse(response: Any?) { override fun onResponse(response: Any?) {
setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING) setState(if (adapter.isEmpty()) MvpPresenter.ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
loadFriends(userId, 0, ConversationsPresenter.DEFAULT_CONVERSATIONS_COUNT) loadFriends(userId, 0, ConversationsPresenter.DEFAULT_CONVERSATIONS_COUNT)
} }
@@ -71,7 +70,11 @@ class FriendsPresenter(viewState: FriendsView) :
) { ) {
setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING) setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
repository.getCachedFriends(userId, offset, count, onlyOnline, repository.getCachedFriends(
userId,
offset,
count,
onlyOnline,
object : MvpOnLoadListener<ArrayList<VKUser>> { object : MvpOnLoadListener<ArrayList<VKUser>> {
override fun onResponse(response: ArrayList<VKUser>) { override fun onResponse(response: ArrayList<VKUser>) {
val friends = ArrayUtils.cut(response, offset, count) val friends = ArrayUtils.cut(response, offset, count)
@@ -105,7 +108,10 @@ class FriendsPresenter(viewState: FriendsView) :
setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING) setState(if (adapter.isEmpty()) ListState.EMPTY_LOADING else ListState.FILLED_LOADING)
} }
repository.loadFriends(userId, offset, count, repository.loadFriends(
userId,
offset,
count,
object : MvpOnLoadListener<ArrayList<VKUser>> { object : MvpOnLoadListener<ArrayList<VKUser>> {
override fun onResponse(response: ArrayList<VKUser>) { override fun onResponse(response: ArrayList<VKUser>) {
friendsCount = VKUser.friendsCount friendsCount = VKUser.friendsCount

Some files were not shown because too many files have changed in this diff Show More