diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index ed37e81..c149bde 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -38,6 +38,7 @@ + () { + + enum class Requester { + UserPost, SquadPost + } + override fun createIntent(context: Context, input: Requester): Intent { + return Intent(context, ImageChooserActivity::class.java).apply { + putExtra(ImageChooserActivity.INPUT_EXTRA, input) + } + } + + override fun parseResult(resultCode: Int, intent: Intent?): Image? { + if(resultCode != Activity.RESULT_OK) { return null } + + return if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { + intent?.getSerializableExtra(ImageChooserActivity.OUTPUT_EXTRA_IMAGE) as Image? + } else { + intent?.getSerializableExtra(ImageChooserActivity.OUTPUT_EXTRA_IMAGE, Image::class.java) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/markdown/Generators.kt b/app/src/main/java/com/isolaatti/markdown/Generators.kt new file mode 100644 index 0000000..36533f3 --- /dev/null +++ b/app/src/main/java/com/isolaatti/markdown/Generators.kt @@ -0,0 +1,14 @@ +package com.isolaatti.markdown + +object Generators { + fun generateImage(url: String): String { + // TODO: normalize input text to avoid conflicts with markdown syntax + return "![]($url)" + } + + + fun generateLink(text: String, url: String): String { + // TODO: normalize input text to avoid conflicts with markdown syntax + return "[${text}]($url)" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/markdown/Wrapper.kt b/app/src/main/java/com/isolaatti/markdown/Wrapper.kt new file mode 100644 index 0000000..3e72a3d --- /dev/null +++ b/app/src/main/java/com/isolaatti/markdown/Wrapper.kt @@ -0,0 +1,5 @@ +package com.isolaatti.markdown + +interface Wrapper { + val symbol: String +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/markdown/Wrappers.kt b/app/src/main/java/com/isolaatti/markdown/Wrappers.kt new file mode 100644 index 0000000..cb770ec --- /dev/null +++ b/app/src/main/java/com/isolaatti/markdown/Wrappers.kt @@ -0,0 +1,13 @@ +package com.isolaatti.markdown + +object Wrappers { + val boldWrapper = object: Wrapper { + override val symbol: String + get() = "**" + } + + val italicsWrapper = object: Wrapper { + override val symbol: String + get() = "*" + } +} \ No newline at end of file diff --git a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt index 48efb7d..c15c977 100644 --- a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt +++ b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownEditingFragment.kt @@ -1,16 +1,21 @@ package com.isolaatti.posting.posts.ui import android.os.Bundle +import android.util.Log import android.view.ActionMode import android.view.LayoutInflater import android.view.Menu +import android.view.MenuInflater import android.view.MenuItem import android.view.View import android.view.ViewGroup import androidx.core.widget.doOnTextChanged import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import com.isolaatti.R import com.isolaatti.databinding.FragmentMarkdownEditingBinding +import com.isolaatti.images.image_chooser.ui.ImageChooserActivity +import com.isolaatti.images.image_chooser.ui.ImageChooserContract import com.isolaatti.posting.posts.presentation.CreatePostViewModel import dagger.hilt.EntryPoint @@ -18,6 +23,10 @@ class MarkdownEditingFragment : Fragment(){ private lateinit var binding: FragmentMarkdownEditingBinding private val viewModel: CreatePostViewModel by activityViewModels() + private val imageChooserLauncher = registerForActivityResult(ImageChooserContract()) { image -> + Log.d("MarkdownEditingFragment", "$image") + } + override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -32,6 +41,7 @@ class MarkdownEditingFragment : Fragment(){ override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) + binding.filledTextField.editText?.setText(viewModel.content) binding.filledTextField.requestFocus() binding.filledTextField.editText?.doOnTextChanged { text, _, _, _ -> // make better validation :) @@ -49,7 +59,7 @@ class MarkdownEditingFragment : Fragment(){ } override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { - return true + return false } override fun onDestroyActionMode(mode: ActionMode?) { @@ -59,6 +69,7 @@ class MarkdownEditingFragment : Fragment(){ binding.filledTextField.editText?.customInsertionActionModeCallback = object: ActionMode.Callback { override fun onCreateActionMode(mode: ActionMode?, menu: Menu?): Boolean { + MenuInflater(requireContext()).inflate(R.menu.contextual_menu_post_content, menu) return true } @@ -67,7 +78,13 @@ class MarkdownEditingFragment : Fragment(){ } override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean { - return true + if(item?.itemId == R.id.add_image_here_menu_item) { + insertImage() + mode?.finish() + return true + } + + return false } override fun onDestroyActionMode(mode: ActionMode?) { @@ -80,4 +97,8 @@ class MarkdownEditingFragment : Fragment(){ binding.filledTextField.editText?.setText(it.content) } } + + private fun insertImage() { + imageChooserLauncher.launch(ImageChooserContract.Requester.UserPost) + } } \ No newline at end of file diff --git a/app/src/main/res/layout/activity_image_chooser.xml b/app/src/main/res/layout/activity_image_chooser.xml new file mode 100644 index 0000000..63d12a4 --- /dev/null +++ b/app/src/main/res/layout/activity_image_chooser.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/contextual_menu_post_content.xml b/app/src/main/res/menu/contextual_menu_post_content.xml new file mode 100644 index 0000000..5ff2e4e --- /dev/null +++ b/app/src/main/res/menu/contextual_menu_post_content.xml @@ -0,0 +1,9 @@ + + + + + \ 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 6031f4b..a9dde6d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -127,4 +127,5 @@ Deleting, please wait… Markdown Preview + Add image here \ No newline at end of file