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