114 lines
4.4 KiB
Kotlin
Raw Normal View History

2023-07-08 02:17:19 -06:00
package com.isolaatti.feed.ui
2023-02-06 13:44:27 -06:00
2023-02-11 23:41:23 -06:00
import android.content.Intent
2023-02-06 13:44:27 -06:00
import android.os.Bundle
2023-07-08 02:17:19 -06:00
import android.util.Log
2023-02-06 13:44:27 -06:00
import androidx.fragment.app.Fragment
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
2023-02-11 23:41:23 -06:00
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.LinearLayoutManager
2023-02-06 13:44:27 -06:00
import com.isolaatti.R
import com.isolaatti.databinding.FragmentFeedBinding
2023-07-08 02:17:19 -06:00
import com.isolaatti.posting.posts.presentation.PostsViewModel
import com.isolaatti.posting.comments.presentation.BottomSheetPostComments
import com.isolaatti.posting.common.domain.OnUserInteractedWithPostCallback
import com.isolaatti.posting.common.options_bottom_sheet.ui.BottomSheetPostOptionsFragment
import com.isolaatti.posting.posts.presentation.PostsRecyclerViewAdapter
2023-02-11 23:41:23 -06:00
import com.isolaatti.profile.ui.ProfileActivity
import com.isolaatti.settings.ui.SettingsActivity
import com.isolaatti.utils.PicassoImagesPluginDef
import dagger.hilt.android.AndroidEntryPoint
import io.noties.markwon.AbstractMarkwonPlugin
import io.noties.markwon.Markwon
import io.noties.markwon.MarkwonConfiguration
import io.noties.markwon.image.destination.ImageDestinationProcessorRelativeToAbsolute
import io.noties.markwon.linkify.LinkifyPlugin
2023-02-06 13:44:27 -06:00
2023-02-11 23:41:23 -06:00
@AndroidEntryPoint
2023-07-08 02:17:19 -06:00
class FeedFragment : Fragment(), OnUserInteractedWithPostCallback {
2023-02-06 13:44:27 -06:00
companion object {
fun newInstance() = FeedFragment()
}
2023-07-08 02:17:19 -06:00
private val viewModel: PostsViewModel by activityViewModels()
2023-02-06 13:44:27 -06:00
private lateinit var viewBinding: FragmentFeedBinding
2023-07-08 02:17:19 -06:00
private lateinit var adapter: PostsRecyclerViewAdapter
2023-02-06 13:44:27 -06:00
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
viewBinding = FragmentFeedBinding.inflate(inflater)
return viewBinding.root
}
2023-02-11 23:41:23 -06:00
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
viewBinding.topAppBar.setNavigationOnClickListener {
2023-07-08 02:17:19 -06:00
viewBinding.drawerLayout?.openDrawer(viewBinding.homeDrawer)
2023-02-11 23:41:23 -06:00
}
2023-07-08 02:17:19 -06:00
2023-02-11 23:41:23 -06:00
viewBinding.homeDrawer.setNavigationItemSelectedListener {
when(it.itemId) {
R.id.my_profile_menu_item -> {
startActivity(Intent(requireActivity(), ProfileActivity::class.java))
true
}
R.id.settings_menu_item -> {
startActivity(Intent(requireActivity(), SettingsActivity::class.java))
true
}
else -> {true}
}
}
val markwon = Markwon.builder(requireContext())
.usePlugin(object: AbstractMarkwonPlugin() {
override fun configureConfiguration(builder: MarkwonConfiguration.Builder) {
builder
.imageDestinationProcessor(ImageDestinationProcessorRelativeToAbsolute
.create("https://isolaatti.com/"))
}
})
.usePlugin(PicassoImagesPluginDef.picassoImagePlugin)
.usePlugin(LinkifyPlugin.create())
.build()
2023-07-08 02:17:19 -06:00
adapter = PostsRecyclerViewAdapter(markwon, this, listOf())
2023-02-11 23:41:23 -06:00
viewBinding.feedRecyclerView.adapter = adapter
viewBinding.feedRecyclerView.layoutManager = LinearLayoutManager(requireContext())
2023-07-08 02:17:19 -06:00
viewModel.posts.observe(viewLifecycleOwner){
Log.d("recycler", it.data.toString())
adapter.updateList(it.data.toList(),null)
2023-02-11 23:41:23 -06:00
}
2023-07-08 02:17:19 -06:00
viewModel.postLiked.observe(viewLifecycleOwner) {
adapter.updateList(viewModel.posts.value?.data, PostsRecyclerViewAdapter.UpdateEvent(
PostsRecyclerViewAdapter.UpdateEvent.UpdateType.POST_LIKED, it.postId))
}
}
override fun onLiked(postId: Long) = viewModel.likePost(postId)
2023-02-11 23:41:23 -06:00
2023-07-08 02:17:19 -06:00
override fun onUnLiked(postId: Long) = viewModel.unLikePost(postId)
override fun onOptions(postId: Long) {
val modalBottomSheet = BottomSheetPostOptionsFragment()
modalBottomSheet.show(requireActivity().supportFragmentManager, BottomSheetPostOptionsFragment.TAG)
}
override fun onComment(postId: Long) {
val modalBottomSheet = BottomSheetPostComments.getInstance(postId)
modalBottomSheet.show(requireActivity().supportFragmentManager, BottomSheetPostComments.TAG)
2023-02-06 13:44:27 -06:00
}
2023-07-08 02:17:19 -06:00
override fun onProfileClick(userId: Int) {
TODO("Not yet implemented")
}
2023-02-06 13:44:27 -06:00
}