diff --git a/app/src/main/java/org/pixeldroid/app/profile/ProfileActivity.kt b/app/src/main/java/org/pixeldroid/app/profile/ProfileActivity.kt index c72ce69a..44ce47fe 100644 --- a/app/src/main/java/org/pixeldroid/app/profile/ProfileActivity.kt +++ b/app/src/main/java/org/pixeldroid/app/profile/ProfileActivity.kt @@ -57,30 +57,38 @@ class ProfileActivity : BaseThemedWithBarActivity() { val account = intent.getSerializableExtra(Account.ACCOUNT_TAG) as Account? accountId = account?.id ?: user!!.user_id - val tabs = createSearchTabs(account) + val tabs = createProfileTabs(account) setupTabs(tabs) setContent(account) } - private fun createSearchTabs(account: Account?): Array{ + private fun createProfileTabs(account: Account?): Array{ - val arguments = Bundle().apply { + val profileFeedFragment = ProfileFeedFragment() + val argumentsFeed = Bundle().apply { putSerializable(Account.ACCOUNT_TAG, account) putSerializable(ProfileFeedFragment.PROFILE_GRID, false) putSerializable(ProfileFeedFragment.BOOKMARKS, false) } - val profileFeedFragment = ProfileFeedFragment() - profileFeedFragment.arguments = arguments.deepCopy() + profileFeedFragment.arguments = argumentsFeed - arguments.putSerializable(ProfileFeedFragment.PROFILE_GRID, true) val profileGridFragment = ProfileFeedFragment() - profileGridFragment.arguments = arguments.deepCopy() + val argumentsGrid = Bundle().apply { + putSerializable(Account.ACCOUNT_TAG, account) + putSerializable(ProfileFeedFragment.PROFILE_GRID, true) + putSerializable(ProfileFeedFragment.BOOKMARKS, false) + } + profileGridFragment.arguments = argumentsGrid // If we are viewing our own account, show bookmarks if(account == null || account.id == user?.user_id) { val profileBookmarksFragment = ProfileFeedFragment() - arguments.putSerializable(ProfileFeedFragment.BOOKMARKS, true) - profileBookmarksFragment.arguments = arguments.deepCopy() + val argumentsBookmarks = Bundle().apply { + putSerializable(Account.ACCOUNT_TAG, account) + putSerializable(ProfileFeedFragment.PROFILE_GRID, true) + putSerializable(ProfileFeedFragment.BOOKMARKS, true) + } + profileBookmarksFragment.arguments = argumentsBookmarks return arrayOf( profileGridFragment, profileFeedFragment, @@ -349,63 +357,3 @@ class ProfileActivity : BaseThemedWithBarActivity() { } } } - - -class ProfilePostsViewHolder(binding: FragmentProfilePostsBinding) : RecyclerView.ViewHolder(binding.root) { - private val postPreview: ImageView = binding.postPreview - private val albumIcon: ImageView = binding.albumIcon - private val videoIcon: ImageView = binding.videoIcon - - fun bind(post: Status) { - - if ((post.media_attachments?.size ?: 0) == 0){ - //No media in this post, so put a little icon there - postPreview.scaleX = 0.3f - postPreview.scaleY = 0.3f - Glide.with(postPreview).load(R.drawable.ic_comment_empty).into(postPreview) - albumIcon.visibility = View.GONE - videoIcon.visibility = View.GONE - } else { - postPreview.scaleX = 1f - postPreview.scaleY = 1f - if (post.sensitive != false) { - Glide.with(postPreview) - .load(post.media_attachments?.firstOrNull()?.blurhash?.let { - BlurHashDecoder.blurHashBitmap(itemView.resources, it, 32, 32) - } - ).placeholder(R.drawable.ic_sensitive).apply(RequestOptions().centerCrop()) - .into(postPreview) - } else { - setSquareImageFromURL(postPreview, - post.getPostPreviewURL(), - postPreview, - post.media_attachments?.firstOrNull()?.blurhash) - } - if ((post.media_attachments?.size ?: 0) > 1) { - albumIcon.visibility = View.VISIBLE - videoIcon.visibility = View.GONE - } else { - albumIcon.visibility = View.GONE - if (post.media_attachments?.getOrNull(0)?.type == Attachment.AttachmentType.video) { - videoIcon.visibility = View.VISIBLE - } else videoIcon.visibility = View.GONE - - } - } - - postPreview.setOnClickListener { - val intent = Intent(postPreview.context, PostActivity::class.java) - intent.putExtra(Status.POST_TAG, post) - postPreview.context.startActivity(intent) - } - } - - companion object { - fun create(parent: ViewGroup): ProfilePostsViewHolder { - val itemBinding = FragmentProfilePostsBinding.inflate( - LayoutInflater.from(parent.context), parent, false - ) - return ProfilePostsViewHolder(itemBinding) - } - } -} diff --git a/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt b/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt index 89283131..45be30a6 100644 --- a/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt +++ b/app/src/main/java/org/pixeldroid/app/profile/ProfileFeedFragment.kt @@ -1,9 +1,11 @@ package org.pixeldroid.app.profile +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.ImageView import androidx.lifecycle.ViewModel import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope @@ -11,14 +13,22 @@ import androidx.paging.ExperimentalPagingApi import androidx.paging.PagingDataAdapter import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.bumptech.glide.Glide +import com.bumptech.glide.request.RequestOptions +import org.pixeldroid.app.R +import org.pixeldroid.app.databinding.FragmentProfilePostsBinding +import org.pixeldroid.app.posts.PostActivity import org.pixeldroid.app.posts.StatusViewHolder import org.pixeldroid.app.posts.feeds.UIMODEL_STATUS_COMPARATOR import org.pixeldroid.app.posts.feeds.uncachedFeeds.* import org.pixeldroid.app.posts.feeds.uncachedFeeds.profile.ProfileContentRepository +import org.pixeldroid.app.utils.BlurHashDecoder import org.pixeldroid.app.utils.api.objects.Account +import org.pixeldroid.app.utils.api.objects.Attachment import org.pixeldroid.app.utils.api.objects.Status import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity import org.pixeldroid.app.utils.displayDimensionsInPx +import org.pixeldroid.app.utils.setSquareImageFromURL /** * Fragment to show a list of [Account]s, as a result of a search. @@ -105,6 +115,65 @@ class ProfileFeedFragment : UncachedFeedFragment() { } } +class ProfilePostsViewHolder(binding: FragmentProfilePostsBinding) : RecyclerView.ViewHolder(binding.root) { + private val postPreview: ImageView = binding.postPreview + private val albumIcon: ImageView = binding.albumIcon + private val videoIcon: ImageView = binding.videoIcon + + fun bind(post: Status) { + + if ((post.media_attachments?.size ?: 0) == 0){ + //No media in this post, so put a little icon there + postPreview.scaleX = 0.3f + postPreview.scaleY = 0.3f + Glide.with(postPreview).load(R.drawable.ic_comment_empty).into(postPreview) + albumIcon.visibility = View.GONE + videoIcon.visibility = View.GONE + } else { + postPreview.scaleX = 1f + postPreview.scaleY = 1f + if (post.sensitive != false) { + Glide.with(postPreview) + .load(post.media_attachments?.firstOrNull()?.blurhash?.let { + BlurHashDecoder.blurHashBitmap(itemView.resources, it, 32, 32) + } + ).placeholder(R.drawable.ic_sensitive).apply(RequestOptions().centerCrop()) + .into(postPreview) + } else { + setSquareImageFromURL(postPreview, + post.getPostPreviewURL(), + postPreview, + post.media_attachments?.firstOrNull()?.blurhash) + } + if ((post.media_attachments?.size ?: 0) > 1) { + albumIcon.visibility = View.VISIBLE + videoIcon.visibility = View.GONE + } else { + albumIcon.visibility = View.GONE + if (post.media_attachments?.getOrNull(0)?.type == Attachment.AttachmentType.video) { + videoIcon.visibility = View.VISIBLE + } else videoIcon.visibility = View.GONE + + } + } + + postPreview.setOnClickListener { + val intent = Intent(postPreview.context, PostActivity::class.java) + intent.putExtra(Status.POST_TAG, post) + postPreview.context.startActivity(intent) + } + } + + companion object { + fun create(parent: ViewGroup): ProfilePostsViewHolder { + val itemBinding = FragmentProfilePostsBinding.inflate( + LayoutInflater.from(parent.context), parent, false + ) + return ProfilePostsViewHolder(itemBinding) + } + } +} + class ProfileViewModelFactory @ExperimentalPagingApi constructor( private val searchContentRepository: UncachedContentRepository @@ -117,4 +186,4 @@ class ProfileViewModelFactory @ExperimentalPagingApi constructor( } throw IllegalArgumentException("Unknown ViewModel class") } -} \ No newline at end of file +}