diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png
index 3370f64a..d1349ddc 100644
Binary files a/app/src/main/ic_launcher-playstore.png and b/app/src/main/ic_launcher-playstore.png differ
diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt
index 0ef30970..55d3ecec 100644
--- a/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt
+++ b/app/src/main/kotlin/com/meloda/fast/api/model/VkConversation.kt
@@ -11,6 +11,7 @@ import kotlinx.parcelize.Parcelize
data class VkConversation(
@PrimaryKey(autoGenerate = false)
val id: Int,
+ val ownerId: Int?,
val title: String?,
val photo200: String?,
val type: String,
@@ -22,7 +23,8 @@ data class VkConversation(
val isMarkedUnread: Boolean,
val lastMessageId: Int,
val unreadCount: Int?,
- val membersCount: Int?
+ val membersCount: Int?,
+ val isPinned: Boolean
) : Parcelable {
@Ignore
var lastMessage: VkMessage? = null
diff --git a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt
index d69818f8..be2f3380 100644
--- a/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt
+++ b/app/src/main/kotlin/com/meloda/fast/api/model/base/BaseVkConversation.kt
@@ -51,7 +51,9 @@ data class BaseVkConversation(
isMarkedUnread = isMarkedUnread,
lastMessageId = lastMessageId,
unreadCount = unreadCount,
- membersCount = chatSettings?.membersCount
+ membersCount = chatSettings?.membersCount,
+ ownerId = chatSettings?.ownerId,
+ isPinned = sortId.majorId > 0
).apply { this.lastMessage = lastMessage }
@Parcelize
diff --git a/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt b/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt
index 0494344a..00967ddd 100644
--- a/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt
+++ b/app/src/main/kotlin/com/meloda/fast/database/AppDatabase.kt
@@ -18,7 +18,7 @@ import com.meloda.fast.database.dao.UsersDao
VkUser::class,
VkGroup::class
],
- version = 13,
+ version = 15,
exportSchema = false
)
abstract class AppDatabase : RoomDatabase() {
diff --git a/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsAdapter.kt b/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsAdapter.kt
index f89a67c5..726257c0 100644
--- a/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsAdapter.kt
+++ b/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsAdapter.kt
@@ -1,15 +1,19 @@
package com.meloda.fast.screens.conversations
import android.content.Context
+import android.content.res.ColorStateList
+import android.graphics.drawable.ColorDrawable
import android.text.SpannableString
import android.text.style.ForegroundColorSpan
import android.view.ViewGroup
import androidx.core.content.ContextCompat
import androidx.core.view.isVisible
+import androidx.core.view.setPadding
import androidx.recyclerview.widget.DiffUtil
import coil.load
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
+import com.meloda.fast.api.VKConstants
import com.meloda.fast.api.VkUtils
import com.meloda.fast.api.model.VkConversation
import com.meloda.fast.api.model.VkGroup
@@ -76,6 +80,7 @@ class ConversationsAdapter constructor(
} else null
val avatar = when {
+ conversation.ownerId == VKConstants.FAST_GROUP_ID -> null
conversation.isUser() && chatUser != null && !chatUser.photo200.isNullOrBlank() -> chatUser.photo200
conversation.isGroup() && chatGroup != null && !chatGroup.photo200.isNullOrBlank() -> chatGroup.photo200
conversation.isChat() && !conversation.photo200.isNullOrBlank() -> conversation.photo200
@@ -86,13 +91,36 @@ class ConversationsAdapter constructor(
binding.avatarPlaceholder.isVisible = avatar == null
if (avatar == null) {
- binding.avatar.setImageDrawable(null)
+ if (conversation.ownerId == VKConstants.FAST_GROUP_ID) {
+ binding.placeholderBack.setImageDrawable(
+ ColorDrawable(
+ ContextCompat.getColor(context, R.color.a1_400)
+ )
+ )
+ binding.placeholder.imageTintList =
+ ColorStateList.valueOf(ContextCompat.getColor(context, R.color.a1_0))
+ binding.placeholder.setImageResource(R.drawable.ic_fast_logo)
+ binding.placeholder.setPadding(18)
+ } else {
+ binding.placeholderBack.setImageDrawable(
+ ColorDrawable(
+ ContextCompat.getColor(context, R.color.n1_50)
+ )
+ )
+ binding.placeholder.imageTintList =
+ ColorStateList.valueOf(ContextCompat.getColor(context, R.color.n2_500))
+ binding.placeholder.setImageResource(R.drawable.ic_account_circle_cut)
+ binding.placeholder.setPadding(0)
+ binding.avatar.setImageDrawable(null)
+ }
} else {
binding.avatar.load(avatar) { crossfade(200) }
}
binding.online.isVisible = chatUser?.online == true
+ binding.pin.isVisible = conversation.isPinned
+
val actionMessage = VkUtils.getActionConversationText(
message = message,
youPrefix = youPrefix,
@@ -157,10 +185,8 @@ class ConversationsAdapter constructor(
prefix.length + coloredMessage.length,
0
)
+
binding.message.text = spanMessage
-// } else {
-// binding.message.text = messageText
-// }
binding.title.text =
getItem(position).title ?: chatUser?.toString() ?: chatGroup?.name ?: "..."
diff --git a/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsFragment.kt b/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsFragment.kt
index 006f37db..a7c4192f 100644
--- a/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsFragment.kt
+++ b/app/src/main/kotlin/com/meloda/fast/screens/conversations/ConversationsFragment.kt
@@ -8,6 +8,7 @@ import androidx.core.view.isVisible
import androidx.fragment.app.viewModels
import androidx.navigation.fragment.findNavController
import coil.load
+import com.google.android.material.appbar.AppBarLayout
import com.google.android.material.snackbar.Snackbar
import com.meloda.fast.R
import com.meloda.fast.api.UserConfig
@@ -19,6 +20,7 @@ import com.meloda.fast.base.viewmodel.VKEvent
import com.meloda.fast.databinding.FragmentConversationsBinding
import com.meloda.fast.util.AndroidUtils
import dagger.hilt.android.AndroidEntryPoint
+import kotlin.math.abs
@AndroidEntryPoint
class ConversationsFragment :
@@ -57,6 +59,19 @@ class ConversationsFragment :
UserConfig.vkUser.observe(viewLifecycleOwner) {
it?.let { user -> binding.avatar.load(user.photo200) { crossfade(100) } }
}
+
+ binding.appBar.addOnOffsetChangedListener(AppBarLayout.OnOffsetChangedListener { appBarLayout, verticalOffset ->
+ if (verticalOffset <= -100) {
+ binding.avatarContainer.alpha = 0f
+ return@OnOffsetChangedListener
+ }
+
+ val alpha = 1 - abs(verticalOffset * 0.01).toFloat()
+
+// println("offset: $verticalOffset; alpha: $alpha")
+
+ binding.avatarContainer.alpha = alpha
+ })
}
override fun onEvent(event: VKEvent) {
diff --git a/app/src/main/res/drawable/ic_fast_logo.xml b/app/src/main/res/drawable/ic_fast_logo.xml
new file mode 100644
index 00000000..23f3e85f
--- /dev/null
+++ b/app/src/main/res/drawable/ic_fast_logo.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml
index a74b6bd7..d6bc8e98 100644
--- a/app/src/main/res/drawable/ic_launcher_foreground.xml
+++ b/app/src/main/res/drawable/ic_launcher_foreground.xml
@@ -3,15 +3,23 @@
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
-
+
+ android:pathData="M371.796,170.753L288.208,298.822C280.722,310.291 288.951,325.49 302.648,325.49H371.796V170.753Z"
+ android:strokeAlpha="0.7"
+ android:fillColor="#ffffff"
+ android:fillAlpha="0.7"/>
+ android:pathData="M308.429,65.884C327.174,37.164 371.796,50.438 371.796,84.733V430.872H133.9C106.507,430.872 90.048,400.474 105.02,377.536L308.429,65.884ZM288.208,298.822L371.796,170.753V325.49H302.648C288.951,325.49 280.722,310.291 288.208,298.822Z"
+ android:strokeAlpha="0.5"
+ android:fillColor="#ffffff"
+ android:fillType="evenOdd"
+ android:fillAlpha="0.5"/>
+
diff --git a/app/src/main/res/drawable/ic_round_push_pin_24.xml b/app/src/main/res/drawable/ic_round_push_pin_24.xml
new file mode 100644
index 00000000..da0a81d6
--- /dev/null
+++ b/app/src/main/res/drawable/ic_round_push_pin_24.xml
@@ -0,0 +1,10 @@
+
+
+
diff --git a/app/src/main/res/layout/fragment_conversations.xml b/app/src/main/res/layout/fragment_conversations.xml
index b14e8b2c..732ade60 100644
--- a/app/src/main/res/layout/fragment_conversations.xml
+++ b/app/src/main/res/layout/fragment_conversations.xml
@@ -8,6 +8,7 @@
android:layout_height="match_parent">
@@ -25,9 +26,9 @@
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="?actionBarSize"
- android:background="@color/n1_50"
+ android:background="?android:windowBackground"
android:elevation="0dp"
- app:layout_collapseMode="pin"
+ app:layout_collapseMode="parallax"
app:menu="@menu/fragment_conversations" />
+ android:orientation="horizontal"
+ app:layout_collapseParallaxMultiplier="0.5">
+ android:tint="?colorSecondary3Variant" />
diff --git a/app/src/main/res/layout/fragment_messages_history.xml b/app/src/main/res/layout/fragment_messages_history.xml
index 93020318..a0ae29ea 100644
--- a/app/src/main/res/layout/fragment_messages_history.xml
+++ b/app/src/main/res/layout/fragment_messages_history.xml
@@ -195,7 +195,7 @@
android:layout_gravity="bottom"
android:layout_margin="12dp"
android:background="@drawable/ic_message_panel_background"
- android:backgroundTint="@color/a1_0"
+ android:backgroundTint="?colorSurface"
android:clickable="true"
android:elevation="3dp"
android:focusable="true"
@@ -220,7 +220,7 @@
android:layout_marginEnd="18dp"
android:background="?selectableItemBackgroundBorderless"
android:src="@drawable/ic_baseline_attach_file_24"
- android:tint="@color/a1_500" />
+ android:tint="?colorOnSurface" />
+ android:tint="?colorOnSurface" />
diff --git a/app/src/main/res/layout/item_conversation.xml b/app/src/main/res/layout/item_conversation.xml
index 359be593..7c917926 100644
--- a/app/src/main/res/layout/item_conversation.xml
+++ b/app/src/main/res/layout/item_conversation.xml
@@ -38,11 +38,13 @@
android:visibility="gone">
+ app:tint="?colorSecondary2" />
+
+
+
+
+
+
+
+
@@ -137,7 +166,7 @@
android:layout_weight="1"
android:fontFamily="@font/google_sans_regular"
android:maxLines="2"
- android:textColor="@color/n1_900"
+ android:textColor="?textColorPrimary"
android:textSize="22sp"
tools:text="Title" />
@@ -150,10 +179,10 @@
android:layout_marginEnd="4dp"
android:layout_weight="0"
android:background="@drawable/ic_back"
- android:backgroundTint="@color/a1_600"
+ android:backgroundTint="?colorSecondary3"
android:gravity="center"
android:minWidth="18dp"
- android:textColor="@color/a1_0"
+ android:textColor="?colorOnSecondary3"
android:textSize="10sp"
android:visibility="gone"
tools:text="12"
@@ -171,7 +200,7 @@
android:alpha="0.5"
android:fontFamily="@font/roboto_regular"
android:gravity="end|center_vertical"
- android:textColor="@color/n2_500"
+ android:textColor="?textColorSecondaryVariant"
tools:text="20:00" />
@@ -198,7 +227,7 @@
android:layout_marginEnd="4dp"
android:src="@drawable/ic_baseline_attach_file_24"
android:visibility="gone"
- app:tint="@color/n2_500"
+ app:tint="?textColorSecondaryVariant"
tools:visibility="visible" />
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 2d95290f..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 2d95290f..00000000
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 7aa4db3a..00000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 7aa4db3a..00000000
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index 03a242be..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 03a242be..00000000
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 13ceda1b..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 13ceda1b..00000000
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 19b32ab5..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and /dev/null differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 19b32ab5..00000000
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png and /dev/null differ
diff --git a/app/src/main/res/values-night-v31/colors.xml b/app/src/main/res/values-night-v31/colors.xml
new file mode 100644
index 00000000..d5350c0e
--- /dev/null
+++ b/app/src/main/res/values-night-v31/colors.xml
@@ -0,0 +1,26 @@
+
+
+
+ @android:color/system_accent1_0
+ @android:color/system_accent1_400
+ @android:color/system_accent1_500
+ @android:color/system_accent1_600
+
+ @android:color/system_accent2_200
+ @android:color/system_accent2_700
+
+ @android:color/system_accent3_200
+ @android:color/system_accent3_700
+
+ @android:color/system_neutral1_10
+ @android:color/system_neutral1_50
+ @android:color/system_neutral1_100
+ @android:color/system_neutral1_800
+ @android:color/system_neutral1_900
+
+ @android:color/system_neutral2_0
+ @android:color/system_neutral2_10
+ @android:color/system_neutral2_100
+ @android:color/system_neutral2_500
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/colors.xml b/app/src/main/res/values-night/colors.xml
new file mode 100644
index 00000000..a7ba55f9
--- /dev/null
+++ b/app/src/main/res/values-night/colors.xml
@@ -0,0 +1,19 @@
+
+
+
+ @color/n1_900
+
+ @color/colorBackground
+ @color/colorBackground
+ @color/n1_900
+
+ @color/a2_100
+ @color/a2_700
+ @color/a2_700
+
+ @color/n1_100
+ @color/n1_100
+
+ @color/a1_0
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml
index 4edb3e22..fbf2abae 100644
--- a/app/src/main/res/values-night/themes.xml
+++ b/app/src/main/res/values-night/themes.xml
@@ -2,19 +2,26 @@
\ No newline at end of file
diff --git a/app/src/main/res/values-v31/colors.xml b/app/src/main/res/values-v31/colors.xml
index 6c942c29..d48c5157 100644
--- a/app/src/main/res/values-v31/colors.xml
+++ b/app/src/main/res/values-v31/colors.xml
@@ -2,11 +2,15 @@
@android:color/system_accent1_0
+ @android:color/system_accent1_200
+ @android:color/system_accent1_400
@android:color/system_accent1_500
@android:color/system_accent1_600
+ @android:color/system_accent2_100
@android:color/system_accent2_200
@android:color/system_accent2_700
+ @android:color/system_accent2_1000
@android:color/system_accent3_200
@android:color/system_accent3_700
diff --git a/app/src/main/res/values/attrs.xml b/app/src/main/res/values/attrs.xml
index 9a6c0402..68202721 100644
--- a/app/src/main/res/values/attrs.xml
+++ b/app/src/main/res/values/attrs.xml
@@ -1,6 +1,18 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 9ed74021..dbcf47c4 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,13 +1,42 @@
+ @color/n1_50
+
+ @color/colorBackground
+ @color/colorBackground
+ @color/n1_900
+
+ @color/a2_200
+ @color/a2_700
+ @color/a2_700
+
+ @color/a3_200
+ @color/a3_100
+ @color/a3_700
+
+ @color/a1_600
+ @color/a1_500
+ @color/a1_0
+
+ @color/n1_900
+ @color/n1_900
+ @color/n2_500
+
+ @color/a1_0
+
#FFFFFF
+ #B1C6FA
+ #4184F5
#3771DF
#2559BC
+ #000000
+ #DCE1F7
#C0C6DA
#414757
+ #F8D6FC
#DEBAE5
#583C61
diff --git a/app/src/main/res/values/ic_launcher_background.xml b/app/src/main/res/values/ic_launcher_background.xml
index 70a24a75..f1503161 100644
--- a/app/src/main/res/values/ic_launcher_background.xml
+++ b/app/src/main/res/values/ic_launcher_background.xml
@@ -1,4 +1,4 @@
- #4284F4
+ #4184F5
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index fffc5c4b..b5a6103c 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -2,23 +2,42 @@