* creador de links
This commit is contained in:
parent
dd6c981b02
commit
8c8219f5d8
@ -0,0 +1,15 @@
|
||||
package com.isolaatti.posting.link_creator.presentation
|
||||
|
||||
import androidx.lifecycle.MutableLiveData
|
||||
import androidx.lifecycle.ViewModel
|
||||
import com.isolaatti.markdown.Generators
|
||||
|
||||
class LinkCreatorViewModel : ViewModel() {
|
||||
val liveMarkdown: MutableLiveData<String> = MutableLiveData()
|
||||
val markdown: String get() = liveMarkdown.value ?: ""
|
||||
val inserted: MutableLiveData<Boolean> = MutableLiveData()
|
||||
|
||||
fun generateMarkdown(text: String, url: String) {
|
||||
liveMarkdown.value = Generators.generateLink(text, url)
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,74 @@
|
||||
package com.isolaatti.posting.link_creator.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.core.widget.doOnTextChanged
|
||||
import androidx.fragment.app.viewModels
|
||||
import com.google.android.material.bottomsheet.BottomSheetDialogFragment
|
||||
import com.google.android.material.dialog.MaterialAlertDialogBuilder
|
||||
import com.isolaatti.R
|
||||
import com.isolaatti.databinding.FragmentDialogLinkCreatorBinding
|
||||
import com.isolaatti.posting.link_creator.presentation.LinkCreatorViewModel
|
||||
import io.noties.markwon.Markwon
|
||||
import io.noties.markwon.linkify.LinkifyPlugin
|
||||
|
||||
class LinkCreatorFragment : BottomSheetDialogFragment() {
|
||||
|
||||
private lateinit var binding: FragmentDialogLinkCreatorBinding
|
||||
private val viewModel: LinkCreatorViewModel by viewModels( { requireParentFragment() })
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
}
|
||||
override fun onCreateView(
|
||||
inflater: LayoutInflater,
|
||||
container: ViewGroup?,
|
||||
savedInstanceState: Bundle?
|
||||
): View {
|
||||
binding = FragmentDialogLinkCreatorBinding.inflate(inflater)
|
||||
return binding.root
|
||||
}
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
super.onViewCreated(view, savedInstanceState)
|
||||
|
||||
setupListeners()
|
||||
setupObservers()
|
||||
}
|
||||
|
||||
private fun setupObservers() {
|
||||
viewModel.liveMarkdown.observe(viewLifecycleOwner) { markdown ->
|
||||
binding.markdownTextView.text = markdown
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupListeners() {
|
||||
binding.text.editText?.doOnTextChanged { text, start, before, count ->
|
||||
viewModel.generateMarkdown(text.toString(), binding.url.editText?.text.toString())
|
||||
}
|
||||
|
||||
binding.url.editText?.doOnTextChanged { text, start, before, count ->
|
||||
viewModel.generateMarkdown(binding.text.editText?.text.toString(), text.toString())
|
||||
}
|
||||
|
||||
binding.card.setOnClickListener {
|
||||
showMarkdownDialog()
|
||||
}
|
||||
|
||||
binding.button.setOnClickListener {
|
||||
viewModel.inserted.value = true
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
|
||||
private fun showMarkdownDialog() {
|
||||
MaterialAlertDialogBuilder(requireContext())
|
||||
.setMessage(viewModel.markdown)
|
||||
.setNegativeButton(R.string.close, null)
|
||||
.show()
|
||||
}
|
||||
|
||||
}
|
||||
@ -8,13 +8,17 @@ import android.view.ViewGroup
|
||||
import androidx.core.widget.doOnTextChanged
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.fragment.app.activityViewModels
|
||||
import androidx.fragment.app.viewModels
|
||||
import com.isolaatti.databinding.FragmentMarkdownEditingBinding
|
||||
import com.isolaatti.images.image_chooser.ui.ImageChooserContract
|
||||
import com.isolaatti.posting.link_creator.presentation.LinkCreatorViewModel
|
||||
import com.isolaatti.posting.link_creator.ui.LinkCreatorFragment
|
||||
import com.isolaatti.posting.posts.presentation.CreatePostViewModel
|
||||
|
||||
class MarkdownEditingFragment : Fragment(){
|
||||
private lateinit var binding: FragmentMarkdownEditingBinding
|
||||
private val viewModel: CreatePostViewModel by activityViewModels()
|
||||
private val linkCreatorViewModel: LinkCreatorViewModel by viewModels()
|
||||
|
||||
private val imageChooserLauncher = registerForActivityResult(ImageChooserContract()) { image ->
|
||||
Log.d("MarkdownEditingFragment", "${image?.markdown}")
|
||||
@ -56,15 +60,29 @@ class MarkdownEditingFragment : Fragment(){
|
||||
binding.addImageButton.setOnClickListener {
|
||||
insertImage()
|
||||
}
|
||||
binding.addLinkButton.setOnClickListener {
|
||||
insertLink()
|
||||
}
|
||||
}
|
||||
|
||||
private fun setupObservers(){
|
||||
viewModel.postToEdit.observe(viewLifecycleOwner) {
|
||||
binding.filledTextField.editText?.setText(it.content)
|
||||
}
|
||||
linkCreatorViewModel.inserted.observe(viewLifecycleOwner) {
|
||||
if(it) {
|
||||
viewModel.content += " ${linkCreatorViewModel.markdown}"
|
||||
binding.filledTextField.editText?.setText(viewModel.content)
|
||||
linkCreatorViewModel.inserted.value = false
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun insertImage() {
|
||||
imageChooserLauncher.launch(ImageChooserContract.Requester.UserPost)
|
||||
}
|
||||
|
||||
private fun insertLink() {
|
||||
LinkCreatorFragment().show(childFragmentManager, null)
|
||||
}
|
||||
}
|
||||
84
app/src/main/res/layout/fragment_dialog_link_creator.xml
Normal file
84
app/src/main/res/layout/fragment_dialog_link_creator.xml
Normal file
@ -0,0 +1,84 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<com.google.android.material.bottomsheet.BottomSheetDragHandleView
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginBottom="16dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/card"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
<com.google.android.material.card.MaterialCardView
|
||||
android:id="@+id/card"
|
||||
style="@style/Widget.Material3.CardView.Filled"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:padding="8dp"
|
||||
app:layout_constraintBottom_toTopOf="@+id/text"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/markdown_text_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:lines="3"
|
||||
android:layout_margin="8dp"/>
|
||||
</com.google.android.material.card.MaterialCardView>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/text"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:hint="@string/text"
|
||||
app:layout_constraintBottom_toTopOf="@+id/url"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.textfield.TextInputLayout
|
||||
android:id="@+id/url"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="24dp"
|
||||
android:layout_marginEnd="24dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:hint="@string/url"
|
||||
app:layout_constraintBottom_toTopOf="@+id/button"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent">
|
||||
|
||||
<com.google.android.material.textfield.TextInputEditText
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent" />
|
||||
</com.google.android.material.textfield.TextInputLayout>
|
||||
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/button"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="16dp"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/insert_url"
|
||||
style="@style/Widget.Material3.Button"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent" />
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
@ -33,12 +33,12 @@
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Widget.Material3.Button.IconButton"
|
||||
app:icon="@drawable/baseline_image_24" />
|
||||
<!-- <com.google.android.material.button.MaterialButton-->
|
||||
<!-- android:id="@+id/add_link_button"-->
|
||||
<!-- android:layout_width="wrap_content"-->
|
||||
<!-- android:layout_height="wrap_content"-->
|
||||
<!-- style="@style/Widget.Material3.Button.IconButton"-->
|
||||
<!-- app:icon="@drawable/baseline_add_link_24" />-->
|
||||
<com.google.android.material.button.MaterialButton
|
||||
android:id="@+id/add_link_button"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
style="@style/Widget.Material3.Button.IconButton"
|
||||
app:icon="@drawable/baseline_add_link_24" />
|
||||
</LinearLayout>
|
||||
</LinearLayout>
|
||||
</androidx.core.widget.NestedScrollView>
|
||||
@ -129,4 +129,7 @@
|
||||
<string name="preview">Preview</string>
|
||||
<string name="add_image_here">Add image here</string>
|
||||
<string name="choose_image">Choose image</string>
|
||||
<string name="url">Url</string>
|
||||
<string name="text">Text</string>
|
||||
<string name="insert_url">Insert url</string>
|
||||
</resources>
|
||||
@ -12,8 +12,8 @@ buildscript {
|
||||
}
|
||||
}
|
||||
plugins {
|
||||
id 'com.android.application' version '8.2.0' apply false
|
||||
id 'com.android.library' version '8.2.0' apply false
|
||||
id 'com.android.application' version '8.2.1' apply false
|
||||
id 'com.android.library' version '8.2.1' apply false
|
||||
id 'org.jetbrains.kotlin.android' version '1.8.0' apply false
|
||||
id 'com.google.dagger.hilt.android' version '2.47' apply false
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user