WIP editor de publicaciones y agregar imagen en publicacion
This commit is contained in:
parent
5a26cdbfb9
commit
08d6791410
@ -38,6 +38,7 @@
|
||||
<activity android:name=".images.picture_viewer.ui.PictureViewerActivity" android:theme="@style/Theme.Isolaatti"/>
|
||||
<activity android:name=".sign_up.ui.SignUpActivity" android:theme="@style/Theme.Isolaatti"/>
|
||||
<activity android:name=".images.image_maker.ui.ImageMakerActivity" android:theme="@style/Theme.Isolaatti"/>
|
||||
<activity android:name=".images.image_chooser.ui.ImageChooserActivity" android:theme="@style/Theme.Isolaatti"/>
|
||||
<provider
|
||||
android:authorities="com.isolaatti.provider"
|
||||
android:name="androidx.core.content.FileProvider"
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
package com.isolaatti.images.image_chooser.presentation
|
||||
|
||||
import androidx.lifecycle.ViewModel
|
||||
|
||||
class ImageChooserViewModel : ViewModel() {
|
||||
}
|
||||
@ -0,0 +1,22 @@
|
||||
package com.isolaatti.images.image_chooser.ui
|
||||
|
||||
import android.os.Bundle
|
||||
import android.os.PersistableBundle
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import com.isolaatti.databinding.ActivityImageChooserBinding
|
||||
|
||||
class ImageChooserActivity : AppCompatActivity() {
|
||||
private lateinit var binding: ActivityImageChooserBinding
|
||||
override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
|
||||
super.onCreate(savedInstanceState, persistentState)
|
||||
binding = ActivityImageChooserBinding.inflate(layoutInflater)
|
||||
|
||||
setContentView(binding.root)
|
||||
|
||||
}
|
||||
|
||||
companion object {
|
||||
const val INPUT_EXTRA = "requester"
|
||||
const val OUTPUT_EXTRA_IMAGE = "output_image"
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,30 @@
|
||||
package com.isolaatti.images.image_chooser.ui
|
||||
|
||||
import android.app.Activity
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.os.Build
|
||||
import androidx.activity.result.contract.ActivityResultContract
|
||||
import com.isolaatti.images.common.domain.entity.Image
|
||||
|
||||
class ImageChooserContract : ActivityResultContract<ImageChooserContract.Requester, Image?>() {
|
||||
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
14
app/src/main/java/com/isolaatti/markdown/Generators.kt
Normal file
14
app/src/main/java/com/isolaatti/markdown/Generators.kt
Normal file
@ -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 ""
|
||||
}
|
||||
|
||||
|
||||
fun generateLink(text: String, url: String): String {
|
||||
// TODO: normalize input text to avoid conflicts with markdown syntax
|
||||
return "[${text}]($url)"
|
||||
}
|
||||
}
|
||||
5
app/src/main/java/com/isolaatti/markdown/Wrapper.kt
Normal file
5
app/src/main/java/com/isolaatti/markdown/Wrapper.kt
Normal file
@ -0,0 +1,5 @@
|
||||
package com.isolaatti.markdown
|
||||
|
||||
interface Wrapper {
|
||||
val symbol: String
|
||||
}
|
||||
13
app/src/main/java/com/isolaatti/markdown/Wrappers.kt
Normal file
13
app/src/main/java/com/isolaatti/markdown/Wrappers.kt
Normal file
@ -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() = "*"
|
||||
}
|
||||
}
|
||||
@ -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,9 +78,15 @@ class MarkdownEditingFragment : Fragment(){
|
||||
}
|
||||
|
||||
override fun onActionItemClicked(mode: ActionMode?, item: MenuItem?): Boolean {
|
||||
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)
|
||||
}
|
||||
}
|
||||
7
app/src/main/res/layout/activity_image_chooser.xml
Normal file
7
app/src/main/res/layout/activity_image_chooser.xml
Normal file
@ -0,0 +1,7 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
|
||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||
9
app/src/main/res/menu/contextual_menu_post_content.xml
Normal file
9
app/src/main/res/menu/contextual_menu_post_content.xml
Normal file
@ -0,0 +1,9 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
|
||||
<item
|
||||
android:id="@+id/add_image_here_menu_item"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:title="@string/add_image_here" />
|
||||
</menu>
|
||||
@ -127,4 +127,5 @@
|
||||
<string name="deleting_please_wait">Deleting, please wait…</string>
|
||||
<string name="markdown">Markdown</string>
|
||||
<string name="preview">Preview</string>
|
||||
<string name="add_image_here">Add image here</string>
|
||||
</resources>
|
||||
Loading…
x
Reference in New Issue
Block a user