Grid vs feed done
This commit is contained in:
parent
35948439e9
commit
ab959db5f1
|
@ -32,6 +32,7 @@ import org.pixeldroid.app.R
|
|||
import org.pixeldroid.app.databinding.ActivityProfileBinding
|
||||
import org.pixeldroid.app.databinding.FragmentProfilePostsBinding
|
||||
import org.pixeldroid.app.posts.PostActivity
|
||||
import org.pixeldroid.app.posts.StatusViewHolder
|
||||
import org.pixeldroid.app.posts.feeds.initAdapter
|
||||
import org.pixeldroid.app.posts.feeds.launch
|
||||
import org.pixeldroid.app.posts.feeds.uncachedFeeds.FeedViewModel
|
||||
|
@ -73,16 +74,6 @@ class ProfileActivity : BaseThemedWithBarActivity() {
|
|||
val account = intent.getSerializableExtra(Account.ACCOUNT_TAG) as Account?
|
||||
accountId = account?.id ?: user!!.user_id
|
||||
|
||||
// get the view model
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
viewModel = ViewModelProvider(this, ProfileViewModelFactory(
|
||||
ProfileContentRepository(
|
||||
apiHolder.setToCurrentUser(),
|
||||
accountId
|
||||
)
|
||||
)
|
||||
)[FeedViewModel::class.java] as FeedViewModel<Status>
|
||||
|
||||
val tabs = createSearchTabs(account)
|
||||
setupTabs(tabs)
|
||||
setContent(account)
|
||||
|
@ -93,11 +84,15 @@ class ProfileActivity : BaseThemedWithBarActivity() {
|
|||
val profileGridFragment = ProfileFeedFragment()
|
||||
val profileFeedFragment = ProfileFeedFragment()
|
||||
val profileBookmarksFragment = ProfileFeedFragment() // TODO: bookmark fragment
|
||||
val arguments = Bundle()
|
||||
arguments.putSerializable(Account.ACCOUNT_TAG, account)
|
||||
profileGridFragment.arguments = arguments
|
||||
profileFeedFragment.arguments = arguments
|
||||
profileBookmarksFragment.arguments = arguments
|
||||
val argumentsGrid = Bundle()
|
||||
val argumentsFeed = Bundle()
|
||||
argumentsGrid.putSerializable(Account.ACCOUNT_TAG, account)
|
||||
argumentsFeed.putSerializable(Account.ACCOUNT_TAG, account)
|
||||
argumentsGrid.putSerializable(ProfileFeedFragment.PROFILE_GRID, true)
|
||||
argumentsFeed.putSerializable(ProfileFeedFragment.PROFILE_GRID, false)
|
||||
profileGridFragment.arguments = argumentsGrid
|
||||
profileFeedFragment.arguments = argumentsFeed
|
||||
profileBookmarksFragment.arguments = argumentsGrid
|
||||
return arrayOf(
|
||||
profileGridFragment,
|
||||
profileFeedFragment,
|
||||
|
@ -363,20 +358,6 @@ class ProfileActivity : BaseThemedWithBarActivity() {
|
|||
}
|
||||
|
||||
|
||||
class ProfileViewModelFactory @ExperimentalPagingApi constructor(
|
||||
private val searchContentRepository: UncachedContentRepository<Status>
|
||||
) : ViewModelProvider.Factory {
|
||||
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(FeedViewModel::class.java)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return FeedViewModel(searchContentRepository) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ProfilePostsViewHolder(binding: FragmentProfilePostsBinding) : RecyclerView.ViewHolder(binding.root) {
|
||||
private val postPreview: ImageView = binding.postPreview
|
||||
private val albumIcon: ImageView = binding.albumIcon
|
||||
|
@ -435,33 +416,3 @@ class ProfilePostsViewHolder(binding: FragmentProfilePostsBinding) : RecyclerVie
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ProfilePostsAdapter : PagingDataAdapter<Status, RecyclerView.ViewHolder>(
|
||||
UIMODEL_COMPARATOR
|
||||
) {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
return ProfilePostsViewHolder.create(parent)
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
val post = getItem(position)
|
||||
|
||||
post?.let {
|
||||
(holder as ProfilePostsViewHolder).bind(it)
|
||||
}
|
||||
}
|
||||
|
||||
companion object {
|
||||
private val UIMODEL_COMPARATOR = object : DiffUtil.ItemCallback<Status>() {
|
||||
override fun areItemsTheSame(oldItem: Status, newItem: Status): Boolean {
|
||||
return oldItem.id == newItem.id
|
||||
}
|
||||
|
||||
override fun areContentsTheSame(oldItem: Status, newItem: Status): Boolean =
|
||||
oldItem.content == newItem.content
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -4,26 +4,40 @@ import android.os.Bundle
|
|||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
import androidx.lifecycle.ViewModel
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.lifecycle.lifecycleScope
|
||||
import androidx.paging.ExperimentalPagingApi
|
||||
import androidx.paging.PagingDataAdapter
|
||||
import androidx.recyclerview.widget.DiffUtil
|
||||
import androidx.recyclerview.widget.GridLayoutManager
|
||||
import androidx.recyclerview.widget.RecyclerView
|
||||
import org.pixeldroid.app.posts.StatusViewHolder
|
||||
import org.pixeldroid.app.posts.feeds.uncachedFeeds.*
|
||||
import org.pixeldroid.app.posts.feeds.uncachedFeeds.profile.ProfileContentRepository
|
||||
import org.pixeldroid.app.utils.api.objects.Account
|
||||
import org.pixeldroid.app.utils.api.objects.Status
|
||||
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
|
||||
import org.pixeldroid.app.utils.displayDimensionsInPx
|
||||
|
||||
/**
|
||||
* Fragment to show a list of [Account]s, as a result of a search.
|
||||
*/
|
||||
class ProfileFeedFragment : UncachedFeedFragment<Status>() {
|
||||
|
||||
companion object {
|
||||
const val PROFILE_GRID = "ProfileGrid"
|
||||
}
|
||||
|
||||
private lateinit var accountId : String
|
||||
private var user: UserDatabaseEntity? = null
|
||||
private var grid: Boolean = false
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
super.onCreate(savedInstanceState)
|
||||
|
||||
adapter = ProfilePostsAdapter()
|
||||
grid = arguments?.getSerializable(PROFILE_GRID) as Boolean
|
||||
adapter = ProfilePostsAdapter(grid)
|
||||
|
||||
//get the currently active user
|
||||
user = db.userDao().getActiveUser()
|
||||
|
@ -40,6 +54,10 @@ class ProfileFeedFragment : UncachedFeedFragment<Status>() {
|
|||
|
||||
val view = super.onCreateView(inflater, container, savedInstanceState)
|
||||
|
||||
if(grid) {
|
||||
binding.list.layoutManager = GridLayoutManager(context, 3)
|
||||
}
|
||||
|
||||
// Get the view model
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
viewModel = ViewModelProvider(requireActivity(), ProfileViewModelFactory(
|
||||
|
@ -55,4 +73,55 @@ class ProfileFeedFragment : UncachedFeedFragment<Status>() {
|
|||
|
||||
return view
|
||||
}
|
||||
|
||||
private val UIMODEL_COMPARATOR = object : DiffUtil.ItemCallback<Status>() {
|
||||
override fun areItemsTheSame(oldItem: Status, newItem: Status): Boolean {
|
||||
return oldItem.id == newItem.id
|
||||
}
|
||||
|
||||
override fun areContentsTheSame(oldItem: Status, newItem: Status): Boolean =
|
||||
oldItem.content == newItem.content
|
||||
}
|
||||
|
||||
inner class ProfilePostsAdapter(
|
||||
private val grid: Boolean
|
||||
) : PagingDataAdapter<Status, RecyclerView.ViewHolder>(
|
||||
UIMODEL_COMPARATOR
|
||||
) {
|
||||
|
||||
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
|
||||
return if(grid) {
|
||||
ProfilePostsViewHolder.create(parent)
|
||||
} else {
|
||||
StatusViewHolder.create(parent)
|
||||
}
|
||||
}
|
||||
|
||||
override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
|
||||
val post = getItem(position)
|
||||
|
||||
post?.let {
|
||||
if(grid) {
|
||||
(holder as ProfilePostsViewHolder).bind(it)
|
||||
} else {
|
||||
(holder as StatusViewHolder).bind(it, apiHolder, db,
|
||||
lifecycleScope, requireContext().displayDimensionsInPx())
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
class ProfileViewModelFactory @ExperimentalPagingApi constructor(
|
||||
private val searchContentRepository: UncachedContentRepository<Status>
|
||||
) : ViewModelProvider.Factory {
|
||||
|
||||
override fun <T : ViewModel> create(modelClass: Class<T>): T {
|
||||
if (modelClass.isAssignableFrom(FeedViewModel::class.java)) {
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
return FeedViewModel(searchContentRepository) as T
|
||||
}
|
||||
throw IllegalArgumentException("Unknown ViewModel class")
|
||||
}
|
||||
}
|
|
@ -1,48 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<androidx.coordinatorlayout.widget.CoordinatorLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<ProgressBar
|
||||
android:id="@+id/profileProgressBar"
|
||||
style="?android:attr/progressBarStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_gravity="center"
|
||||
android:layout_marginTop="16dp" />
|
||||
|
||||
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
|
||||
android:id="@+id/profileRefreshLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
app:layout_behavior="@string/appbar_scrolling_view_behavior">
|
||||
|
||||
<androidx.constraintlayout.motion.widget.MotionLayout
|
||||
android:id="@+id/motionLayout"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_marginTop="8dp"
|
||||
android:visibility="visible"
|
||||
app:layoutDescription="@xml/error_layout_xml_error_scene">
|
||||
|
||||
<include
|
||||
android:id="@+id/errorLayout"
|
||||
layout="@layout/error_layout"
|
||||
tools:layout_editor_absoluteX="50dp" />
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
android:id="@+id/profilePostsRecyclerView"
|
||||
android:visibility="visible"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
app:layoutManager="LinearLayoutManager"
|
||||
app:layout_constraintTop_toBottomOf="@id/errorLayout"
|
||||
tools:listitem="@layout/fragment_profile_posts" />
|
||||
|
||||
</androidx.constraintlayout.motion.widget.MotionLayout>
|
||||
|
||||
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
|
||||
|
||||
</androidx.coordinatorlayout.widget.CoordinatorLayout>
|
Loading…
Reference in New Issue