Skip to content
Snippets Groups Projects
Commit 7333cb83 authored by Taras's avatar Taras
Browse files

Change create post to BottomSheetDialogFragment

parent 52f25773
No related branches found
No related tags found
No related merge requests found
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
<?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
<?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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment