140 lines
4.7 KiB
Kotlin
140 lines
4.7 KiB
Kotlin
package com.isolaatti.home.ui
|
|
|
|
import android.content.Intent
|
|
import android.os.Bundle
|
|
import androidx.fragment.app.Fragment
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import android.widget.ImageView
|
|
import android.widget.TextView
|
|
import android.widget.Toast
|
|
import androidx.constraintlayout.widget.ConstraintLayout
|
|
import androidx.fragment.app.activityViewModels
|
|
import androidx.lifecycle.Lifecycle
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.lifecycle.repeatOnLifecycle
|
|
import androidx.navigation.findNavController
|
|
import androidx.navigation.fragment.NavHostFragment
|
|
import androidx.navigation.fragment.findNavController
|
|
import coil.load
|
|
import com.google.android.material.card.MaterialCardView
|
|
import com.isolaatti.R
|
|
import com.isolaatti.about.AboutActivity
|
|
import com.isolaatti.common.CoilImageLoader.imageLoader
|
|
import com.isolaatti.common.ErrorMessageViewModel
|
|
import com.isolaatti.databinding.FragmentFeedBinding
|
|
import com.isolaatti.home.presentation.FeedViewModel
|
|
import com.isolaatti.posting.posts.presentation.CreatePostContract
|
|
import com.isolaatti.posting.posts.ui.PostListingFragment
|
|
import com.isolaatti.profile.ui.ProfileActivity
|
|
import com.isolaatti.settings.ui.SettingsActivity
|
|
import com.isolaatti.utils.UrlGen
|
|
import dagger.hilt.android.AndroidEntryPoint
|
|
import kotlinx.coroutines.launch
|
|
|
|
@AndroidEntryPoint
|
|
class FeedFragment : Fragment() {
|
|
|
|
companion object {
|
|
fun newInstance() = FeedFragment()
|
|
const val CALLER_ID = 20
|
|
}
|
|
|
|
private val errorViewModel: ErrorMessageViewModel by activityViewModels()
|
|
private val viewModel: FeedViewModel by activityViewModels()
|
|
|
|
private var currentUserId = 0
|
|
|
|
private lateinit var viewBinding: FragmentFeedBinding
|
|
|
|
private val createDiscussion = registerForActivityResult(CreatePostContract()) {
|
|
if(it != null) {
|
|
Toast.makeText(requireContext(), R.string.posted_successfully, Toast.LENGTH_SHORT).show()
|
|
}
|
|
}
|
|
|
|
override fun onCreateView(
|
|
inflater: LayoutInflater, container: ViewGroup?,
|
|
savedInstanceState: Bundle?
|
|
): View? {
|
|
viewBinding = FragmentFeedBinding.inflate(inflater)
|
|
|
|
return viewBinding.root
|
|
}
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
viewBinding.topAppBar.setNavigationOnClickListener {
|
|
viewBinding.drawerLayout?.openDrawer(viewBinding.homeDrawer)
|
|
}
|
|
|
|
|
|
viewBinding.homeDrawer.setNavigationItemSelectedListener {
|
|
when(it.itemId) {
|
|
R.id.settings_menu_item -> {
|
|
startActivity(Intent(requireActivity(), SettingsActivity::class.java))
|
|
true
|
|
}
|
|
R.id.about_menu_item -> {
|
|
startActivity(Intent(requireActivity(), AboutActivity::class.java))
|
|
true
|
|
}
|
|
else -> {true}
|
|
}
|
|
}
|
|
|
|
|
|
viewBinding.topAppBar.setOnMenuItemClickListener {
|
|
when(it.itemId) {
|
|
R.id.menu_item_new_discussion -> {
|
|
createDiscussion.launch(Unit)
|
|
true
|
|
}
|
|
else -> {
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
// show feed
|
|
|
|
(childFragmentManager.findFragmentById(R.id.post_list_fragment_container) as NavHostFragment).navController.setGraph(R.navigation.post_listing_navigation)
|
|
|
|
viewModel.userProfile.observe(viewLifecycleOwner) {
|
|
val header = viewBinding.homeDrawer.getHeaderView(0) as? ConstraintLayout
|
|
|
|
val image: ImageView? = header?.findViewById(R.id.profileImageView)
|
|
val textViewName: TextView? = header?.findViewById(R.id.textViewName)
|
|
val textViewEmail: TextView? = header?.findViewById(R.id.textViewEmail)
|
|
val textViewUsername: TextView? = header?.findViewById(R.id.textViewUsername)
|
|
|
|
image?.load(UrlGen.userProfileImage(it.userId), imageLoader)
|
|
|
|
val card: MaterialCardView? = header?.findViewById(R.id.drawer_header_card)
|
|
card?.setOnClickListener {
|
|
ProfileActivity.startActivity(requireContext(), currentUserId)
|
|
}
|
|
|
|
textViewName?.text = it.name
|
|
textViewEmail?.text = it.email
|
|
textViewUsername?.text = "@${it.uniqueUsername}"
|
|
currentUserId = it.userId
|
|
}
|
|
|
|
|
|
|
|
|
|
viewModel.getProfile()
|
|
|
|
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch {
|
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
|
errorViewModel.retry.collect {
|
|
viewModel.retry()
|
|
errorViewModel.handleRetry()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |