diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml
index e8056bb..7c05a29 100644
--- a/.idea/assetWizardSettings.xml
+++ b/.idea/assetWizardSettings.xml
@@ -301,10 +301,24 @@
+
diff --git a/.idea/navEditor.xml b/.idea/navEditor.xml
index bda1095..4d9d068 100644
--- a/.idea/navEditor.xml
+++ b/.idea/navEditor.xml
@@ -159,6 +159,49 @@
+
+
+
+
+
+
+
diff --git a/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt b/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt
index fc89f9f..9a49ceb 100644
--- a/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt
+++ b/app/src/main/java/com/isolaatti/images/common/domain/entity/Image.kt
@@ -2,6 +2,7 @@ package com.isolaatti.images.common.domain.entity
import com.isolaatti.common.Deletable
import com.isolaatti.images.common.data.remote.ImageDto
+import com.isolaatti.markdown.Generators
import com.isolaatti.utils.UrlGen
import java.io.Serializable
@@ -15,7 +16,7 @@ data class Image(
val smallImageUrl : String get() = UrlGen.imageUrl(id, UrlGen.IMAGE_MODE_SMALL)
val reducedImageUrl: String get() = UrlGen.imageUrl(id, UrlGen.IMAGE_MODE_REDUCED)
-
+ val markdown: String get() = Generators.generateImage(imageUrl)
companion object {
fun fromDto(imageDto: ImageDto) = Image(imageDto.id, imageDto.userId, imageDto.name, imageDto.username)
diff --git a/app/src/main/java/com/isolaatti/images/image_chooser/presentation/ImageChooserViewModel.kt b/app/src/main/java/com/isolaatti/images/image_chooser/presentation/ImageChooserViewModel.kt
index 7a94837..b81fc63 100644
--- a/app/src/main/java/com/isolaatti/images/image_chooser/presentation/ImageChooserViewModel.kt
+++ b/app/src/main/java/com/isolaatti/images/image_chooser/presentation/ImageChooserViewModel.kt
@@ -1,6 +1,34 @@
package com.isolaatti.images.image_chooser.presentation
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
+import androidx.lifecycle.viewModelScope
+import com.isolaatti.auth.domain.AuthRepository
+import com.isolaatti.images.common.domain.entity.Image
+import com.isolaatti.images.common.domain.repository.ImagesRepository
+import dagger.hilt.android.lifecycle.HiltViewModel
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.flowOn
+import kotlinx.coroutines.flow.launchIn
+import kotlinx.coroutines.flow.onEach
+import kotlinx.coroutines.launch
+import javax.inject.Inject
+
+@HiltViewModel
+class ImageChooserViewModel @Inject constructor(private val authRepository: AuthRepository) : ViewModel() {
+
+ val userId: MutableLiveData = MutableLiveData()
+ var selectedImage: Image? = null
+
+ val choose: MutableLiveData = MutableLiveData()
+
+ fun getUserId() {
+ viewModelScope.launch {
+ authRepository.getUserId().onEach {
+ userId.postValue(it)
+ }.flowOn(Dispatchers.IO).launchIn(this)
+ }
+ }
-class ImageChooserViewModel : ViewModel() {
}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserActivity.kt b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserActivity.kt
index a507508..026985e 100644
--- a/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserActivity.kt
+++ b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserActivity.kt
@@ -1,18 +1,39 @@
package com.isolaatti.images.image_chooser.ui
+import android.content.Intent
import android.os.Bundle
-import android.os.PersistableBundle
-import androidx.appcompat.app.AppCompatActivity
+import androidx.activity.viewModels
+import com.isolaatti.common.IsolaattiBaseActivity
import com.isolaatti.databinding.ActivityImageChooserBinding
+import com.isolaatti.images.image_chooser.presentation.ImageChooserViewModel
+import dagger.hilt.android.AndroidEntryPoint
-class ImageChooserActivity : AppCompatActivity() {
+@AndroidEntryPoint
+class ImageChooserActivity : IsolaattiBaseActivity() {
private lateinit var binding: ActivityImageChooserBinding
- override fun onCreate(savedInstanceState: Bundle?, persistentState: PersistableBundle?) {
- super.onCreate(savedInstanceState, persistentState)
+ private val viewModel: ImageChooserViewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
binding = ActivityImageChooserBinding.inflate(layoutInflater)
setContentView(binding.root)
+ setupObservers()
+ }
+ private fun setupObservers() {
+ viewModel.choose.observe(this) {
+ if(it == true && viewModel.selectedImage != null) {
+ viewModel.choose.value = false
+ val resultIntent = Intent().apply {
+ putExtra(OUTPUT_EXTRA_IMAGE, viewModel.selectedImage)
+ }
+
+ setResult(RESULT_OK, resultIntent)
+ finish()
+ return@observe
+ }
+ }
}
companion object {
diff --git a/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserMainFragment.kt b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserMainFragment.kt
new file mode 100644
index 0000000..2103c06
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserMainFragment.kt
@@ -0,0 +1,133 @@
+package com.isolaatti.images.image_chooser.ui
+
+import android.app.Activity
+import android.content.res.Resources
+import android.net.Uri
+import android.os.Bundle
+import android.util.Log
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.activity.result.PickVisualMediaRequest
+import androidx.activity.result.contract.ActivityResultContracts
+import androidx.activity.viewModels
+import androidx.core.content.FileProvider
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.fragment.app.viewModels
+import androidx.navigation.fragment.findNavController
+import androidx.recyclerview.widget.GridLayoutManager
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import com.isolaatti.MyApplication
+import com.isolaatti.R
+import com.isolaatti.databinding.FragmentImageChooserMainBinding
+import com.isolaatti.images.common.domain.entity.Image
+import com.isolaatti.images.image_chooser.presentation.ImageChooserViewModel
+import com.isolaatti.images.image_list.presentation.ImageListViewModel
+import com.isolaatti.images.image_list.presentation.ImagesAdapter
+import com.isolaatti.images.image_maker.ui.ImageMakerContract
+import dagger.hilt.android.AndroidEntryPoint
+import java.io.File
+import java.util.Calendar
+
+@AndroidEntryPoint
+class ImageChooserMainFragment : Fragment() {
+ private lateinit var binding: FragmentImageChooserMainBinding
+ private val viewModel: ImageChooserViewModel by activityViewModels()
+ private val imagesListViewModel: ImageListViewModel by viewModels()
+ private lateinit var adapter: ImagesAdapter
+ private var cameraPhotoUri: Uri? = null
+
+ private val imageOnClick: (images: List, position: Int) -> Unit = { images, position ->
+ viewModel.selectedImage = images[position]
+ findNavController().navigate(ImageChooserMainFragmentDirections.actionImageChooserMainFragmentToImageChooserPreview())
+ }
+
+ private fun makePhotoUri(): Uri {
+ val cacheFile = File(requireContext().filesDir, "temp_picture_${Calendar.getInstance().timeInMillis}")
+ return FileProvider.getUriForFile(requireContext(), "${MyApplication.myApp.packageName}.provider", cacheFile)
+ }
+
+ private val imageMakerLauncher = registerForActivityResult(ImageMakerContract()) { image ->
+ image?.also {
+ viewModel.selectedImage = it
+ viewModel.choose.value = true
+ }
+ }
+
+ private val choosePictureLauncher = registerForActivityResult(ActivityResultContracts.PickVisualMedia()) {
+ if(it != null) {
+ imageMakerLauncher.launch(it)
+ }
+ }
+
+ private val takePhotoLauncher = registerForActivityResult(ActivityResultContracts.TakePicture()) {
+ if(it && cameraPhotoUri != null) {
+ imageMakerLauncher.launch(cameraPhotoUri)
+ }
+
+ }
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ viewModel.getUserId()
+ }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentImageChooserMainBinding.inflate(inflater)
+
+ return binding.root
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ adapter = ImagesAdapter(
+ imageOnClick = imageOnClick,
+ itemWidth = Resources.getSystem().displayMetrics.widthPixels/3
+ )
+
+ binding.recycler.layoutManager =
+ GridLayoutManager(requireContext(), 3, GridLayoutManager.VERTICAL, false)
+ binding.recycler.adapter = adapter
+
+ setupObservers()
+ setupListeners()
+ }
+
+ private fun setupListeners() {
+ binding.toolbar.setNavigationOnClickListener {
+ requireActivity().run {
+ setResult(Activity.RESULT_CANCELED)
+ finish()
+ }
+ }
+
+ binding.takePhoto.setOnClickListener {
+ cameraPhotoUri = makePhotoUri()
+ takePhotoLauncher.launch(cameraPhotoUri)
+ }
+
+ binding.uploadPhoto.setOnClickListener {
+ choosePictureLauncher.launch(PickVisualMediaRequest(ActivityResultContracts.PickVisualMedia.ImageOnly))
+ }
+ }
+
+ private fun setupObservers() {
+ viewModel.userId.observe(viewLifecycleOwner) {
+ imagesListViewModel.userId = it
+ imagesListViewModel.loadNext()
+ Log.d("*****", "Se obtiene userId $it")
+ }
+
+ imagesListViewModel.liveList.observe(viewLifecycleOwner) { imageList ->
+ Log.d("*****", "Se obtiene lista $imageList")
+ adapter.submitList(imageList)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserPreview.kt b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserPreview.kt
new file mode 100644
index 0000000..50f2414
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/images/image_chooser/ui/ImageChooserPreview.kt
@@ -0,0 +1,48 @@
+package com.isolaatti.images.image_chooser.ui
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.activityViewModels
+import androidx.navigation.fragment.findNavController
+import coil.load
+import com.isolaatti.databinding.FragmentImageChooserPreviewBinding
+import com.isolaatti.images.image_chooser.presentation.ImageChooserViewModel
+
+class ImageChooserPreview : Fragment() {
+ private lateinit var binding: FragmentImageChooserPreviewBinding
+ private val viewModel: ImageChooserViewModel by activityViewModels()
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View {
+ binding = FragmentImageChooserPreviewBinding.inflate(inflater)
+
+ return binding.root
+ }
+
+ private fun showLoading(show: Boolean) {
+ binding.chooseImageButton.visibility = if(show) View.INVISIBLE else View.VISIBLE
+ binding.progressBarLoading.visibility = if(show) View.VISIBLE else View.INVISIBLE
+ }
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+
+ binding.toolbar.setNavigationOnClickListener {
+ findNavController().popBackStack()
+ }
+
+ binding.image.load(viewModel.selectedImage?.imageUrl)
+ binding.imageDescription.text = viewModel.selectedImage?.name
+
+ binding.chooseImageButton.setOnClickListener {
+ showLoading(true)
+ viewModel.choose.value = true
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageAdapterItem.kt b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageAdapterItem.kt
new file mode 100644
index 0000000..eb9649b
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/images/image_list/presentation/ImageAdapterItem.kt
@@ -0,0 +1,29 @@
+package com.isolaatti.images.image_list.presentation
+
+import com.isolaatti.images.common.domain.entity.Image
+
+interface ImageAdapterItem {
+ val image: Image?
+ val addImage: Boolean
+
+ companion object {
+ val AddImagePlaceholder: ImageAdapterItem = object: ImageAdapterItem {
+ override val image: Image?
+ get() = null
+
+ override val addImage: Boolean
+ get() = true
+ }
+
+ fun fromImage(image: Image): ImageAdapterItem {
+ return object: ImageAdapterItem {
+ override val addImage: Boolean
+ get() = false
+
+ override val image: Image?
+ get() = image
+ }
+ }
+
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
index c721959..dce9947 100644
--- a/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
+++ b/app/src/main/java/com/isolaatti/images/image_list/ui/ImagesFragment.kt
@@ -27,6 +27,7 @@ import com.isolaatti.R
import com.isolaatti.common.ErrorMessageViewModel
import com.isolaatti.databinding.FragmentImagesBinding
import com.isolaatti.images.common.domain.entity.Image
+import com.isolaatti.images.image_list.presentation.ImageAdapterItem
import com.isolaatti.images.image_list.presentation.ImageListViewModel
import com.isolaatti.images.image_list.presentation.ImagesAdapter
import com.isolaatti.images.image_maker.ui.ImageMakerContract
diff --git a/app/src/main/java/com/isolaatti/posting/posts/presentation/CreatePostViewModel.kt b/app/src/main/java/com/isolaatti/posting/posts/presentation/CreatePostViewModel.kt
index 4193fd4..d7fdc85 100644
--- a/app/src/main/java/com/isolaatti/posting/posts/presentation/CreatePostViewModel.kt
+++ b/app/src/main/java/com/isolaatti/posting/posts/presentation/CreatePostViewModel.kt
@@ -27,7 +27,9 @@ class CreatePostViewModel @Inject constructor(private val makePost: MakePost, pr
val error: MutableLiveData = MutableLiveData()
val loading: MutableLiveData = MutableLiveData(false)
val postToEdit: MutableLiveData = MutableLiveData()
+ val liveContent: MutableLiveData = MutableLiveData()
var content: String = ""
+ set(value) {field = value; liveContent.value = value} // TODO remove this and use only liveContent
fun postDiscussion() {
viewModelScope.launch {
diff --git a/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostActivity.kt b/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostActivity.kt
index a4c3eb7..f720132 100644
--- a/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostActivity.kt
+++ b/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostActivity.kt
@@ -11,6 +11,7 @@ import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
import androidx.navigation.findNavController
import com.google.android.material.tabs.TabLayout
+import com.google.android.material.tabs.TabLayoutMediator
import com.isolaatti.R
import com.isolaatti.common.IsolaattiBaseActivity
import com.isolaatti.databinding.ActivityCreatePostBinding
@@ -84,6 +85,16 @@ class CreatePostActivity : IsolaattiBaseActivity() {
private fun setupUI() {
binding.toolbar.setTitle(if(mode == EXTRA_MODE_EDIT && postId != 0L) R.string.edit else R.string.new_post)
+ binding.pager.adapter = CreatePostFragmentStateAdapter(this)
+
+
+ TabLayoutMediator(binding.tabs, binding.pager) { tab, position ->
+ when(position) {
+ 0 -> tab.setText(R.string.markdown)
+ 1 -> tab.setText(R.string.preview)
+ }
+ }.attach()
+
}
private fun setListeners() {
@@ -100,28 +111,6 @@ class CreatePostActivity : IsolaattiBaseActivity() {
}
}
- binding.tabs.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener {
-
- override fun onTabSelected(tab: TabLayout.Tab?) {
-
- when(tab?.position) {
- 0 -> /*editing*/ {
- findNavController(binding.fragmentContainerView.id).navigate(R.id.markdownEditingFragment)
- }
- 1 -> /*preview*/ {
- findNavController(binding.fragmentContainerView.id).navigate(R.id.markdownPreviewFragment)
- }
- }
- }
-
- override fun onTabReselected(tab: TabLayout.Tab?) {
- // Handle tab reselect
- }
-
- override fun onTabUnselected(tab: TabLayout.Tab?) {
- // Handle tab unselect
- }
- })
}
private fun setObservers() {
diff --git a/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostFragmentStateAdapter.kt b/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostFragmentStateAdapter.kt
new file mode 100644
index 0000000..9deeee9
--- /dev/null
+++ b/app/src/main/java/com/isolaatti/posting/posts/ui/CreatePostFragmentStateAdapter.kt
@@ -0,0 +1,20 @@
+package com.isolaatti.posting.posts.ui
+
+import androidx.fragment.app.Fragment
+import androidx.fragment.app.FragmentActivity
+import androidx.fragment.app.FragmentManager
+import androidx.viewpager2.adapter.FragmentStateAdapter
+
+class CreatePostFragmentStateAdapter(fragmentActivity: FragmentActivity) : FragmentStateAdapter(fragmentActivity) {
+ override fun getItemCount(): Int {
+ return 2
+ }
+
+ override fun createFragment(position: Int): Fragment {
+ return if(position == 0) {
+ MarkdownEditingFragment()
+ } else {
+ MarkdownPreviewFragment()
+ }
+ }
+}
\ 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 b95a9c2..f71fc82 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
@@ -2,29 +2,29 @@ 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
class MarkdownEditingFragment : Fragment(){
private lateinit var binding: FragmentMarkdownEditingBinding
private val viewModel: CreatePostViewModel by activityViewModels()
private val imageChooserLauncher = registerForActivityResult(ImageChooserContract()) { image ->
- Log.d("MarkdownEditingFragment", "$image")
+ Log.d("MarkdownEditingFragment", "${image?.markdown}")
+
+ if(image != null) {
+ viewModel.content += "\n\n ${image.markdown}"
+ binding.filledTextField.editText?.setText(viewModel.content)
+ }
+
+
}
override fun onCreateView(
@@ -41,6 +41,11 @@ class MarkdownEditingFragment : Fragment(){
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
+ setupListeners()
+ setupObservers()
+ }
+
+ private fun setupListeners() {
binding.filledTextField.editText?.setText(viewModel.content)
binding.filledTextField.requestFocus()
binding.filledTextField.editText?.doOnTextChanged { text, _, _, _ ->
@@ -48,7 +53,12 @@ class MarkdownEditingFragment : Fragment(){
viewModel.validation.postValue(!text.isNullOrEmpty())
viewModel.content = text.toString()
}
+ binding.addImageButton.setOnClickListener {
+ insertImage()
+ }
+ }
+ private fun setupObservers(){
viewModel.postToEdit.observe(viewLifecycleOwner) {
binding.filledTextField.editText?.setText(it.content)
}
diff --git a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownPreviewFragment.kt b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownPreviewFragment.kt
index aba1e1c..f51d86b 100644
--- a/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownPreviewFragment.kt
+++ b/app/src/main/java/com/isolaatti/posting/posts/ui/MarkdownPreviewFragment.kt
@@ -56,6 +56,9 @@ class MarkdownPreviewFragment : Fragment() {
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
- markwon?.setMarkdown(binding.textView, viewModel.content)
+ viewModel.liveContent.observe(viewLifecycleOwner) {
+ markwon?.setMarkdown(binding.textView, it)
+ }
+
}
}
\ No newline at end of file
diff --git a/app/src/main/res/drawable/baseline_add_link_24.xml b/app/src/main/res/drawable/baseline_add_link_24.xml
new file mode 100644
index 0000000..ffc7f47
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_add_link_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/baseline_camera_alt_24.xml b/app/src/main/res/drawable/baseline_camera_alt_24.xml
new file mode 100644
index 0000000..43a4fd5
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_camera_alt_24.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/app/src/main/res/drawable/baseline_file_upload_24.xml b/app/src/main/res/drawable/baseline_file_upload_24.xml
new file mode 100644
index 0000000..0c2ce7d
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_file_upload_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_create_post.xml b/app/src/main/res/layout/activity_create_post.xml
index 4d8e306..68dcc89 100644
--- a/app/src/main/res/layout/activity_create_post.xml
+++ b/app/src/main/res/layout/activity_create_post.xml
@@ -36,19 +36,10 @@
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/appBarLayout">
-
-
-
-
+ app:layout_constraintTop_toBottomOf="@+id/tabs" />
-
+
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_profile.xml b/app/src/main/res/layout/activity_profile.xml
index f04ec22..4046295 100644
--- a/app/src/main/res/layout/activity_profile.xml
+++ b/app/src/main/res/layout/activity_profile.xml
@@ -1,15 +1,10 @@
-
-
-
-
\ No newline at end of file
+ android:layout_height="match_parent"
+ app:defaultNavHost="true"
+ app:navGraph="@navigation/profile_navigation" />
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_image_chooser_main.xml b/app/src/main/res/layout/fragment_image_chooser_main.xml
new file mode 100644
index 0000000..3977e57
--- /dev/null
+++ b/app/src/main/res/layout/fragment_image_chooser_main.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_image_chooser_preview.xml b/app/src/main/res/layout/fragment_image_chooser_preview.xml
new file mode 100644
index 0000000..66d82bd
--- /dev/null
+++ b/app/src/main/res/layout/fragment_image_chooser_preview.xml
@@ -0,0 +1,63 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_markdown_editing.xml b/app/src/main/res/layout/fragment_markdown_editing.xml
index afa34ae..4e50a8d 100644
--- a/app/src/main/res/layout/fragment_markdown_editing.xml
+++ b/app/src/main/res/layout/fragment_markdown_editing.xml
@@ -6,17 +6,39 @@
android:paddingBottom="100dp"
android:layout_marginTop="?attr/actionBarSize"
android:clipToPadding="false">
-
-
+
+ app:hintEnabled="false">
+
-
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_markdown_preview.xml b/app/src/main/res/layout/fragment_markdown_preview.xml
index 57cc45f..5749c84 100644
--- a/app/src/main/res/layout/fragment_markdown_preview.xml
+++ b/app/src/main/res/layout/fragment_markdown_preview.xml
@@ -8,7 +8,6 @@
android:id="@+id/textView"
android:layout_width="0dp"
android:layout_height="0dp"
- android:text="TextView"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
diff --git a/app/src/main/res/navigation/image_chooser_navigation.xml b/app/src/main/res/navigation/image_chooser_navigation.xml
new file mode 100644
index 0000000..9a7e34e
--- /dev/null
+++ b/app/src/main/res/navigation/image_chooser_navigation.xml
@@ -0,0 +1,19 @@
+
+
+
+
+
+
+
+
\ 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 a9dde6d..e3ae501 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -128,4 +128,5 @@
Markdown
Preview
Add image here
+ Choose image
\ No newline at end of file