PixelDroid-App-Android/app/src/main/java/org/pixeldroid/app/posts/feeds/uncachedFeeds/UncachedPostsFragment.kt

93 lines
3.3 KiB
Kotlin
Raw Normal View History

2021-06-07 22:23:59 +02:00
package org.pixeldroid.app.posts.feeds.uncachedFeeds
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.paging.ExperimentalPagingApi
import androidx.paging.PagingDataAdapter
import androidx.recyclerview.widget.RecyclerView
2021-04-22 11:47:18 +02:00
import org.pixeldroid.app.R
import org.pixeldroid.app.posts.StatusViewHolder
2022-10-24 11:53:44 +02:00
import org.pixeldroid.app.posts.feeds.UIMODEL_STATUS_COMPARATOR
2021-06-07 22:23:59 +02:00
import org.pixeldroid.app.posts.feeds.uncachedFeeds.hashtags.HashTagContentRepository
import org.pixeldroid.app.posts.feeds.uncachedFeeds.search.SearchContentRepository
2021-04-22 11:47:18 +02:00
import org.pixeldroid.app.utils.api.objects.Results
import org.pixeldroid.app.utils.api.objects.Status
2021-06-07 22:23:59 +02:00
import org.pixeldroid.app.utils.api.objects.Tag.Companion.HASHTAG_TAG
2021-04-22 11:47:18 +02:00
import org.pixeldroid.app.utils.displayDimensionsInPx
/**
2021-06-07 22:23:59 +02:00
* Fragment to show a list of [Status]es, as a result of a search or a hashtag.
*/
2021-06-07 22:23:59 +02:00
class UncachedPostsFragment : UncachedFeedFragment<Status>() {
2021-06-07 22:23:59 +02:00
private var hashtagOrQuery: String? = null
private var search: Boolean = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
adapter = PostsAdapter(requireContext().displayDimensionsInPx())
2021-06-07 22:23:59 +02:00
hashtagOrQuery = arguments?.getString(HASHTAG_TAG)
2021-06-07 22:23:59 +02:00
if(hashtagOrQuery == null){
search = true
hashtagOrQuery = arguments?.getString("searchFeed")!!
}
}
2021-11-26 16:54:29 +01:00
@OptIn(ExperimentalPagingApi::class)
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val view = super.onCreateView(inflater, container, savedInstanceState)
// get the view model
@Suppress("UNCHECKED_CAST")
2021-06-07 22:23:59 +02:00
viewModel = if(search) {
ViewModelProvider(
requireActivity(), ViewModelFactory(
SearchContentRepository<Status>(
apiHolder.setToCurrentUser(),
Results.SearchType.statuses,
hashtagOrQuery!!
)
)
2021-11-26 16:54:29 +01:00
)["searchPosts", FeedViewModel::class.java] as FeedViewModel<Status>
2021-06-07 22:23:59 +02:00
} else {
ViewModelProvider(requireActivity(), ViewModelFactory(
HashTagContentRepository(
apiHolder.setToCurrentUser(),
hashtagOrQuery!!
)
)
2021-11-26 16:54:29 +01:00
)[HASHTAG_TAG, FeedViewModel::class.java] as FeedViewModel<Status>
2021-06-07 22:23:59 +02:00
}
launch()
initSearch()
return view
}
2022-10-24 11:53:44 +02:00
inner class PostsAdapter(private val displayDimensionsInPx: Pair<Int, Int>)
: PagingDataAdapter<Status, RecyclerView.ViewHolder>(UIMODEL_STATUS_COMPARATOR) {
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
return StatusViewHolder.create(parent)
}
override fun getItemViewType(position: Int): Int = R.layout.post_fragment
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
getItem(position)?.let {
(holder as StatusViewHolder).bind(it, apiHolder, db, lifecycleScope, displayDimensionsInPx)
}
}
}
}