diff --git a/app/src/main/java/org/futo/circles/feature/timeline/InternalLinkMovementMethod.kt b/app/src/main/java/org/futo/circles/feature/timeline/InternalLinkMovementMethod.kt
new file mode 100644
index 0000000000000000000000000000000000000000..6392c6c69fb2ea6e830e34e352cb0e1cd73c7f49
--- /dev/null
+++ b/app/src/main/java/org/futo/circles/feature/timeline/InternalLinkMovementMethod.kt
@@ -0,0 +1,46 @@
+package org.futo.circles.feature.timeline
+
+import android.text.Spannable
+import android.text.method.LinkMovementMethod
+import android.text.style.URLSpan
+import android.util.Patterns
+import android.view.MotionEvent
+import android.widget.TextView
+import org.futo.circles.feature.timeline.list.OnLinkClickedListener
+import org.matrix.android.sdk.api.extensions.tryOrNull
+
+class InternalLinkMovementMethod(private val onLinkClickedListener: OnLinkClickedListener) :
+    LinkMovementMethod() {
+    override fun onTouchEvent(widget: TextView, buffer: Spannable, event: MotionEvent): Boolean {
+        val action = event.action
+
+        if (action == MotionEvent.ACTION_UP) {
+            var x = event.x.toInt()
+            var y = event.y.toInt()
+            x -= widget.totalPaddingLeft
+            y -= widget.totalPaddingTop
+            x += widget.scrollX
+            y += widget.scrollY
+            val layout = widget.layout
+            val line = layout.getLineForVertical(y)
+            val off = layout.getOffsetForHorizontal(line, x.toFloat())
+            val link = buffer.getSpans(off, off, URLSpan::class.java)
+
+            link.getOrNull(0)?.let { span ->
+                val spanStart = buffer.getSpanStart(span)
+                val spanEnd = buffer.getSpanEnd(span)
+                val message = tryOrNull { buffer.subSequence(spanStart, spanEnd).toString() }
+                val url = span.url
+                return if (message != url && !url.startsWith("tel")) {
+                    onLinkClickedListener.onLinkClicked(url)
+                    true
+                } else {
+                    super.onTouchEvent(widget, buffer, event)
+                }
+
+            }
+        }
+        return super.onTouchEvent(widget, buffer, event)
+    }
+}
+
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/list/OnLinkClickedListener.kt b/app/src/main/java/org/futo/circles/feature/timeline/list/OnLinkClickedListener.kt
new file mode 100644
index 0000000000000000000000000000000000000000..79507c5732303e1408a512b35a82ced10250f143
--- /dev/null
+++ b/app/src/main/java/org/futo/circles/feature/timeline/list/OnLinkClickedListener.kt
@@ -0,0 +1,6 @@
+package org.futo.circles.feature.timeline.list
+
+
+interface OnLinkClickedListener {
+    fun onLinkClicked(url: String)
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
index 699b0b1d8bae49b3f9f3db832e4276097c46ba42..fd2366a96746e65a7cb701a4e0ae2531dac2a95f 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/list/TimelineViewHolder.kt
@@ -1,13 +1,17 @@
 package org.futo.circles.feature.timeline.list
 
 import android.annotation.SuppressLint
-import android.text.method.LinkMovementMethod
+import android.content.Context
+import android.content.Intent
+import android.net.Uri
 import android.view.MotionEvent
 import android.view.View
 import android.view.ViewGroup
 import android.widget.TextView
 import androidx.core.view.updateLayoutParams
 import androidx.recyclerview.widget.RecyclerView
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import org.futo.circles.R
 import org.futo.circles.core.base.list.ViewBindingHolder
 import org.futo.circles.core.extensions.gone
 import org.futo.circles.core.extensions.loadEncryptedThumbOrFullIntoWithAspect
@@ -20,9 +24,11 @@ import org.futo.circles.core.model.Post
 import org.futo.circles.core.model.TextContent
 import org.futo.circles.databinding.ViewPollPostBinding
 import org.futo.circles.databinding.ViewTextMediaPostBinding
-import org.futo.circles.model.*
+import org.futo.circles.feature.timeline.InternalLinkMovementMethod
+import org.futo.circles.model.PostItemPayload
 import org.futo.circles.view.PostLayout
 import org.futo.circles.view.PostOptionsListener
+import org.matrix.android.sdk.api.extensions.tryOrNull
 
 
 sealed class PostViewHolder(view: View, private val isThread: Boolean) :
@@ -60,7 +66,11 @@ class TextMediaPostViewHolder(
     @SuppressLint("ClickableViewAccessibility")
     private fun handleTextClick() {
         binding.tvTextContent.apply {
-            movementMethod = LinkMovementMethod.getInstance()
+            movementMethod = InternalLinkMovementMethod(object : OnLinkClickedListener {
+                override fun onLinkClicked(url: String) {
+                    showLinkConfirmation(context, url)
+                }
+            })
             setOnTouchListener { v, event ->
                 if (event.action == MotionEvent.ACTION_DOWN) v.requestFocus()
                 false
@@ -68,6 +78,22 @@ class TextMediaPostViewHolder(
         }
     }
 
+    private fun showLinkConfirmation(context: Context, url: String) {
+        MaterialAlertDialogBuilder(context)
+            .setTitle(R.string.do_you_want_to_open_this_url)
+            .setMessage(url)
+            .setPositiveButton(android.R.string.ok) { dialogInterface, _ ->
+                tryOrNull {
+                    context.startActivity(Intent(Intent.ACTION_VIEW, Uri.parse(url)))
+                }
+                dialogInterface.dismiss()
+            }
+            .setNegativeButton(android.R.string.cancel) { dialogInterface, _ ->
+                dialogInterface.dismiss()
+            }
+            .show()
+    }
+
     override fun bind(post: Post, userPowerLevel: Int) {
         super.bind(post, userPowerLevel)
         binding.vLoadingView.gone()
diff --git a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt
index 37b629d3aaeda0588c4623ce8598d9d707f9e43d..c333babbd9e0e75299e7a082673372b0eab7343f 100644
--- a/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt
+++ b/app/src/main/java/org/futo/circles/feature/timeline/post/create/CreatePostDialogFragment.kt
@@ -1,17 +1,24 @@
 package org.futo.circles.feature.timeline.post.create
 
+import android.app.Dialog
 import android.content.Context
+import android.content.DialogInterface
+import android.graphics.Color
 import android.net.Uri
 import android.os.Bundle
+import android.view.LayoutInflater
 import android.view.View
+import android.view.ViewGroup
 import android.view.WindowManager
 import androidx.fragment.app.viewModels
 import androidx.navigation.fragment.findNavController
 import androidx.navigation.fragment.navArgs
+import com.google.android.material.bottomsheet.BottomSheetBehavior
+import com.google.android.material.bottomsheet.BottomSheetDialog
+import com.google.android.material.bottomsheet.BottomSheetDialogFragment
 import dagger.hilt.android.AndroidEntryPoint
 import org.futo.circles.R
 import org.futo.circles.core.base.NetworkObserver
-import org.futo.circles.core.base.fragment.BaseFullscreenDialogFragment
 import org.futo.circles.core.extensions.navigateSafe
 import org.futo.circles.core.extensions.observeData
 import org.futo.circles.core.extensions.showError
@@ -23,17 +30,13 @@ import org.futo.circles.core.model.TextContent
 import org.futo.circles.databinding.DialogFragmentCreatePostBinding
 import org.futo.circles.feature.timeline.post.emoji.EmojiPickerListener
 import org.futo.circles.model.CreatePostContent
-import java.util.*
 
 @AndroidEntryPoint
-class CreatePostDialogFragment :
-    BaseFullscreenDialogFragment(DialogFragmentCreatePostBinding::inflate),
-    PreviewPostListener, EmojiPickerListener {
+class CreatePostDialogFragment : BottomSheetDialogFragment(), PreviewPostListener,
+    EmojiPickerListener {
 
+    private var binding: DialogFragmentCreatePostBinding? = null
     private val args: CreatePostDialogFragmentArgs by navArgs()
-    private val binding by lazy {
-        getBinding() as DialogFragmentCreatePostBinding
-    }
     private val viewModel by viewModels<CreatePostViewModel>()
 
     private val mediaPickerHelper = MediaPickerHelper(this, isVideoAvailable = true)
@@ -45,6 +48,40 @@ class CreatePostDialogFragment :
             parentFragmentManager.fragments.lastOrNull { it is CreatePostListener } as? CreatePostListener
     }
 
+    override fun onCreateView(
+        inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?
+    ): View? {
+        binding = DialogFragmentCreatePostBinding.inflate(inflater, container, false)
+        return binding?.root
+    }
+
+    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+        val dialog = super.onCreateDialog(savedInstanceState) as BottomSheetDialog
+        dialog.setOnShowListener { setupBottomSheet(it) }
+        return dialog
+    }
+
+    private fun setupBottomSheet(dialogInterface: DialogInterface) {
+        val bottomSheetDialog = dialogInterface as BottomSheetDialog
+        val bottomSheet = bottomSheetDialog.findViewById<View>(
+            com.google.android.material.R.id.design_bottom_sheet
+        ) ?: return
+        bottomSheet.setBackgroundColor(Color.TRANSPARENT)
+        bottomSheet.layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT
+        BottomSheetBehavior.from(bottomSheet).apply {
+            peekHeight = resources.displayMetrics.heightPixels
+            state = BottomSheetBehavior.STATE_EXPANDED
+            addBottomSheetCallback(object : BottomSheetBehavior.BottomSheetCallback() {
+                override fun onStateChanged(bottomSheet: View, newState: Int) {
+                    if (newState == BottomSheetBehavior.STATE_HALF_EXPANDED) dismiss()
+                }
+
+                override fun onSlide(bottomSheet: View, slideOffset: Float) {}
+
+            })
+        }
+    }
+
     @Suppress("DEPRECATION")
     override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
         super.onViewCreated(view, savedInstanceState)
@@ -55,31 +92,30 @@ class CreatePostDialogFragment :
 
     private fun setupViews() {
         setToolbarTitle()
-        with(binding) {
-            vPostPreview.setup(this@CreatePostDialogFragment, args.roomId, args.isEdit)
-        }
+        binding?.btnClose?.setOnClickListener { dismiss() }
+        binding?.vPostPreview?.setup(this@CreatePostDialogFragment, args.roomId, args.isEdit)
     }
 
     private fun setupObservers() {
         viewModel.postToEditContentLiveData.observeData(this) {
             when (it.type) {
                 PostContentType.IMAGE_CONTENT, PostContentType.VIDEO_CONTENT ->
-                    binding.vPostPreview.setMediaFromExistingPost(it as MediaContent)
+                    binding?.vPostPreview?.setMediaFromExistingPost(it as MediaContent)
 
-                else -> binding.vPostPreview.setText((it as TextContent).message)
+                else -> binding?.vPostPreview?.setText((it as TextContent).message)
             }
         }
     }
 
     private fun setToolbarTitle() {
-        binding.toolbar.title = when {
+        binding?.tvTitle?.text = when {
             args.isEdit -> getString(R.string.edit_post)
             else -> getString(R.string.create_post)
         }
     }
 
     private fun onMediaSelected(uri: Uri, type: MediaType) {
-        binding.vPostPreview.setMedia(uri, type)
+        binding?.vPostPreview?.setMedia(uri, type)
     }
 
     private fun sendPost(content: CreatePostContent) {
@@ -109,7 +145,7 @@ class CreatePostDialogFragment :
 
     override fun onAddLinkClicked() {
         AddLinkDialog(requireContext()) { title, link ->
-            binding.vPostPreview.insertLink(title, link)
+            binding?.vPostPreview?.insertLink(title, link)
         }.show()
     }
 
@@ -123,6 +159,11 @@ class CreatePostDialogFragment :
     }
 
     override fun onEmojiSelected(roomId: String?, eventId: String?, emoji: String) {
-        binding.vPostPreview.insertEmoji(emoji)
+        binding?.vPostPreview?.insertEmoji(emoji)
+    }
+
+    override fun onDestroyView() {
+        super.onDestroyView()
+        binding = null
     }
 }
\ No newline at end of file
diff --git a/app/src/main/res/layout/dialog_fragment_create_post.xml b/app/src/main/res/layout/dialog_fragment_create_post.xml
index ac9ce83e80201a992489b57dc0f8e32cbc3ba6c5..f3c76d3a8f4cc348d95b94b21691390c67a07dc7 100644
--- a/app/src/main/res/layout/dialog_fragment_create_post.xml
+++ b/app/src/main/res/layout/dialog_fragment_create_post.xml
@@ -1,52 +1,60 @@
 <?xml version="1.0" encoding="utf-8"?>
-<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:background="@drawable/bg_top_rounded_corners"
     android:orientation="vertical">
 
-    <com.google.android.material.appbar.MaterialToolbar
-        android:id="@+id/toolbar"
-        android:layout_width="0dp"
-        android:layout_height="?attr/actionBarSize"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent"
-        app:navigationIcon="?attr/homeAsUpIndicator"
-        app:title="@string/create_post"
-        app:titleCentered="true" />
+    <View
+        android:id="@+id/vTopLine"
+        android:layout_width="48dp"
+        android:layout_height="2dp"
+        android:layout_gravity="center"
+        android:layout_marginTop="4dp"
+        android:background="@color/divider_color" />
+
+    <FrameLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal">
+
+        <TextView
+            android:id="@+id/tvTitle"
+            style="@style/title2"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="center"
+            android:text="@string/create_post" />
+
+        <ImageButton
+            android:id="@+id/btnClose"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_gravity="end|center"
+            android:background="?selectableItemBackgroundBorderless"
+            android:padding="6dp"
+            android:src="@drawable/ic_close" />
+
+    </FrameLayout>
+
 
     <View
         android:id="@+id/divider"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="@dimen/divider_height"
-        android:background="@color/divider_color"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/toolbar" />
+        android:layout_marginTop="4dp"
+        android:background="@color/divider_color" />
+
 
-    <androidx.constraintlayout.widget.ConstraintLayout
+    <org.futo.circles.view.PreviewPostView
+        android:id="@+id/vPostPreview"
         android:layout_width="match_parent"
-        android:layout_height="0dp"
-        android:clipChildren="false"
-        android:clipToPadding="false"
-        android:orientation="vertical"
+        android:layout_height="match_parent"
         app:layout_constraintBottom_toBottomOf="parent"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toBottomOf="@id/divider">
-
-        <org.futo.circles.view.PreviewPostView
-            android:id="@+id/vPostPreview"
-            android:layout_width="match_parent"
-            android:layout_height="0dp"
-            app:layout_constraintBottom_toBottomOf="parent"
-            app:layout_constraintEnd_toEndOf="parent"
-            app:layout_constraintStart_toStartOf="parent"
-            app:layout_constraintTop_toTopOf="parent" />
-
-
-    </androidx.constraintlayout.widget.ConstraintLayout>
+        app:layout_constraintTop_toBottomOf="@id/divider" />
 
 
-</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file
+</LinearLayout>
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4e073536a5f31ded2d8192ba00c8317dd78f5720..6671828e677883d1c4e0a2af91ad4427954b89fb 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -60,6 +60,7 @@
     <string name="request_to_follow">Request to follow</string>
     <string name="select_circles_in_which_you_want_to_follow_this_timeline">Select circles in which you want to follow this timeline</string>
     <string name="accept_invite">Accept invite</string>
+    <string name="do_you_want_to_open_this_url">Do you want to open this url?</string>
     <string name="save_to_device">Save to device</string>
     <string name="save_to_gallery">Save to gallery</string>
     <string name="notifications">Notifications</string>
diff --git a/core/build.gradle b/core/build.gradle
index c57fdb924f37507989c23897316d10e0496200fb..0847aa87598b3631bc84606b763ff472b1c205ab 100644
--- a/core/build.gradle
+++ b/core/build.gradle
@@ -112,7 +112,7 @@ dependencies {
     api "io.noties.markwon:ext-strikethrough:$markwon_version"
     api "io.noties.markwon:ext-tasklist:$markwon_version"
 
-    api 'io.element.android:wysiwyg:2.32.0'
+    api 'io.element.android:wysiwyg:2.33.0'
 
     //Shake detection
     implementation 'com.squareup:seismic:1.0.3'
diff --git a/core/src/main/java/org/futo/circles/core/base/fragment/BaseFullscreenDialogFragment.kt b/core/src/main/java/org/futo/circles/core/base/fragment/BaseFullscreenDialogFragment.kt
index 9019e7d4e3e7a25cd45303ace473fa2640c027a2..d744f45575062dd8ccaf57e956ba24836882e1e4 100644
--- a/core/src/main/java/org/futo/circles/core/base/fragment/BaseFullscreenDialogFragment.kt
+++ b/core/src/main/java/org/futo/circles/core/base/fragment/BaseFullscreenDialogFragment.kt
@@ -9,8 +9,8 @@ import android.view.WindowManager
 import androidx.appcompat.app.AppCompatDialogFragment
 import androidx.viewbinding.ViewBinding
 import com.google.android.material.appbar.MaterialToolbar
-import org.futo.circles.core.base.NoInternetConnectionViewPresenter
 import org.futo.circles.core.R
+import org.futo.circles.core.base.NoInternetConnectionViewPresenter
 import org.futo.circles.core.extensions.onBackPressed
 
 
@@ -32,6 +32,7 @@ abstract class BaseFullscreenDialogFragment(
     ): View? {
         _binding = inflate.invoke(inflater, container, false)
         dialog?.window?.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN)
+        dialog?.window?.attributes?.windowAnimations = R.style.DialogSlideAnimation
         return _binding?.root
     }
 
diff --git a/core/src/main/java/org/futo/circles/core/view/LoadingRecyclerView.kt b/core/src/main/java/org/futo/circles/core/view/LoadingRecyclerView.kt
index 63a3ba757898c3e5e52ac8e5796568decd25fa29..6d9c50ee26cd9dd7b38bc9bd253039dcfdb0e4b9 100644
--- a/core/src/main/java/org/futo/circles/core/view/LoadingRecyclerView.kt
+++ b/core/src/main/java/org/futo/circles/core/view/LoadingRecyclerView.kt
@@ -4,7 +4,7 @@ import android.content.Context
 import android.util.AttributeSet
 import android.view.LayoutInflater
 import android.view.View
-import androidx.constraintlayout.widget.ConstraintLayout
+import android.widget.FrameLayout
 import androidx.recyclerview.widget.RecyclerView
 import androidx.recyclerview.widget.RecyclerView.ItemDecoration
 import com.google.android.material.floatingactionbutton.FloatingActionButton
@@ -18,7 +18,7 @@ import org.matrix.android.sdk.api.extensions.tryOrNull
 class LoadingRecyclerView(
     context: Context,
     attrs: AttributeSet? = null
-) : ConstraintLayout(context, attrs) {
+) : FrameLayout(context, attrs) {
 
     private val binding = ViewLoadingRecyclerBinding.inflate(LayoutInflater.from(context), this)
 
@@ -62,7 +62,7 @@ class LoadingRecyclerView(
 
     fun bindToFab(fab: FloatingActionButton) = binding.rvList.bindToFab(fab)
 
-    fun setIsPageLoading(isLoading:Boolean) = binding.pageLoading.setIsVisible(isLoading)
+    fun setIsPageLoading(isLoading: Boolean) = binding.pageLoading.setIsVisible(isLoading)
 
     private fun setupDataObserver() {
         with(binding) {
diff --git a/core/src/main/res/anim/alpha_show.xml b/core/src/main/res/anim/alpha_show.xml
new file mode 100644
index 0000000000000000000000000000000000000000..8731e7dbc74d84f18bb17c413f05df5b24f632a5
--- /dev/null
+++ b/core/src/main/res/anim/alpha_show.xml
@@ -0,0 +1,8 @@
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shareInterpolator="false">
+    <alpha
+        android:duration="@android:integer/config_shortAnimTime"
+        android:fromAlpha="0"
+        android:interpolator="@android:anim/linear_interpolator"
+        android:toAlpha="1" />
+</set>
\ No newline at end of file
diff --git a/core/src/main/res/anim/slide_out.xml b/core/src/main/res/anim/slide_out.xml
new file mode 100644
index 0000000000000000000000000000000000000000..092cb1ecedd047e38bf2f809ae3523776688a4f5
--- /dev/null
+++ b/core/src/main/res/anim/slide_out.xml
@@ -0,0 +1,8 @@
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shareInterpolator="false">
+    <translate
+        android:duration="@android:integer/config_shortAnimTime"
+        android:fromXDelta="0%"
+        android:interpolator="@android:anim/linear_interpolator"
+        android:toXDelta="100%" />
+</set>
\ No newline at end of file
diff --git a/core/src/main/res/drawable/bg_top_rounded_corners.xml b/core/src/main/res/drawable/bg_top_rounded_corners.xml
new file mode 100644
index 0000000000000000000000000000000000000000..06ea43007348afcfc944ba72f91d61926c8953ed
--- /dev/null
+++ b/core/src/main/res/drawable/bg_top_rounded_corners.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android">
+    <solid android:color="?android:colorBackground" />
+    <corners
+        android:bottomLeftRadius="0dp"
+        android:bottomRightRadius="0dp"
+        android:topLeftRadius="16dp"
+        android:topRightRadius="16dp" />
+</shape>
\ No newline at end of file
diff --git a/core/src/main/res/layout/view_loading_recycler.xml b/core/src/main/res/layout/view_loading_recycler.xml
index 34a975989c8d996dd3ea8ba3ab804b01fc0bcc8c..a8fb03b3b2351b51723a8eba1331075ea8b5443c 100644
--- a/core/src/main/res/layout/view_loading_recycler.xml
+++ b/core/src/main/res/layout/view_loading_recycler.xml
@@ -4,27 +4,23 @@
     xmlns:tools="http://schemas.android.com/tools"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
-    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout">
+    android:orientation="vertical"
+    tools:parentTag="android.widget.FrameLayout">
 
     <androidx.recyclerview.widget.RecyclerView
         android:id="@+id/rvList"
-        android:layout_width="0dp"
-        android:layout_height="0dp"
-        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
 
     <FrameLayout
         android:id="@+id/pageLoading"
-        android:layout_width="0dp"
+        android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
         android:background="?android:colorBackground"
         android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent">
+        tools:visibility="visible">
 
         <ProgressBar
             android:layout_width="wrap_content"
@@ -39,20 +35,13 @@
         android:layout_height="wrap_content"
         android:layout_gravity="center"
         android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="@id/rvList"
-        app:layout_constraintEnd_toEndOf="@id/rvList"
-        app:layout_constraintStart_toStartOf="@id/rvList"
-        app:layout_constraintTop_toTopOf="@id/rvList"
         tools:visibility="visible" />
 
     <FrameLayout
         android:id="@+id/lEmptyViewContainer"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
-        android:visibility="gone"
-        app:layout_constraintBottom_toBottomOf="parent"
-        app:layout_constraintEnd_toEndOf="parent"
-        app:layout_constraintStart_toStartOf="parent"
-        app:layout_constraintTop_toTopOf="parent" />
+        android:layout_gravity="center"
+        android:visibility="gone" />
 
 </merge>
\ No newline at end of file
diff --git a/core/src/main/res/values/styles.xml b/core/src/main/res/values/styles.xml
index 5fa6d0b130729f2b23b3bd1ec6d48bef3c955eab..abbec47bfc87fc89001c3a34d38596c4837accc3 100644
--- a/core/src/main/res/values/styles.xml
+++ b/core/src/main/res/values/styles.xml
@@ -91,4 +91,9 @@
         <item name="android:paddingTop">8dp</item>
     </style>
 
+    <style name="DialogSlideAnimation">
+        <item name="android:windowEnterAnimation">@anim/alpha_show</item>
+        <item name="android:windowExitAnimation">@anim/slide_out</item>
+    </style>
+
 </resources>
\ No newline at end of file
diff --git a/fastlane/metadata/android/en-US/changelogs/3801.txt b/fastlane/metadata/android/en-US/changelogs/3801.txt
new file mode 100644
index 0000000000000000000000000000000000000000..367de86d33dbf663f9ba87660093d9dad964c3f1
--- /dev/null
+++ b/fastlane/metadata/android/en-US/changelogs/3801.txt
@@ -0,0 +1,3 @@
+- Circle's timelines filter
+- Screens animation
+- Bug fixes and performance improvements
\ No newline at end of file