Search/Discover tab

This commit is contained in:
Marie Jaillot 2022-10-29 17:07:59 +00:00 committed by Matthieu
parent 269276f23d
commit cb9180fb60
30 changed files with 576 additions and 171 deletions

View File

@ -133,13 +133,13 @@ dependencies {
implementation 'androidx.core:core-ktx:1.9.0'
implementation 'androidx.preference:preference-ktx:1.2.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.2'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation "androidx.browser:browser:1.4.0"
implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation "androidx.swiperefreshlayout:swiperefreshlayout:1.1.0"
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.2'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.2'
implementation 'androidx.navigation:navigation-fragment-ktx:2.5.3'
implementation 'androidx.navigation:navigation-ui-ktx:2.5.3'
implementation 'androidx.paging:paging-runtime-ktx:3.1.1'
implementation 'androidx.lifecycle:lifecycle-livedata-ktx:2.5.1'
implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx:2.5.1'
@ -148,8 +148,8 @@ dependencies {
implementation "androidx.lifecycle:lifecycle-common-java8:2.5.1"
implementation "androidx.annotation:annotation:1.5.0"
implementation 'androidx.gridlayout:gridlayout:1.0.0'
implementation "androidx.activity:activity-ktx:1.6.0"
implementation 'androidx.fragment:fragment-ktx:1.5.3'
implementation "androidx.activity:activity-ktx:1.6.1"
implementation 'androidx.fragment:fragment-ktx:1.5.4'
implementation 'androidx.work:work-runtime-ktx:2.7.1'
implementation 'androidx.media2:media2-widget:1.2.1'
implementation 'androidx.media2:media2-player:1.2.1'

View File

@ -149,6 +149,7 @@
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity android:name=".searchDiscover.TrendingActivity"/>
<activity
android:name=".settings.AboutActivity"
android:parentActivityName=".settings.SettingsActivity"

View File

@ -7,22 +7,13 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.StringRes
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.pixeldroid.app.R
import androidx.core.content.ContextCompat
import org.pixeldroid.app.databinding.FragmentSearchBinding
import org.pixeldroid.app.profile.ProfilePostViewHolder
import org.pixeldroid.app.searchDiscover.TrendingActivity.Companion.TRENDING_TAG
import org.pixeldroid.app.searchDiscover.TrendingActivity.Companion.TrendingType
import org.pixeldroid.app.utils.api.PixelfedAPI
import org.pixeldroid.app.utils.api.objects.Status
import org.pixeldroid.app.posts.PostActivity
import org.pixeldroid.app.utils.BaseFragment
import org.pixeldroid.app.utils.api.objects.Attachment
import org.pixeldroid.app.utils.bindingLifecycleAware
import org.pixeldroid.app.utils.setSquareImageFromURL
import retrofit2.HttpException
import java.io.IOException
/**
* This fragment lets you search and use Pixelfed's Discover feature
@ -30,8 +21,6 @@ import java.io.IOException
class SearchDiscoverFragment : BaseFragment() {
private lateinit var api: PixelfedAPI
private lateinit var recycler : RecyclerView
private lateinit var adapter : DiscoverRecyclerViewAdapter
var binding: FragmentSearchBinding by bindingLifecycleAware()
@ -48,12 +37,6 @@ class SearchDiscoverFragment : BaseFragment() {
isSubmitButtonEnabled = true
}
// Set posts RecyclerView as a grid with 3 columns
recycler = binding.discoverList
recycler.layoutManager = GridLayoutManager(requireContext(), 3)
adapter = DiscoverRecyclerViewAdapter()
recycler.adapter = adapter
return binding.root
}
@ -62,78 +45,15 @@ class SearchDiscoverFragment : BaseFragment() {
api = apiHolder.api ?: apiHolder.setToCurrentUser()
getDiscover()
binding.discoverRefreshLayout.setOnRefreshListener {
getDiscover()
}
binding.discoverCardView.setOnClickListener { onClickCardView(TrendingType.DISCOVER) }
binding.trendingCardView.setOnClickListener { onClickCardView(TrendingType.POSTS) }
binding.hashtagsCardView.setOnClickListener { onClickCardView(TrendingType.HASHTAGS) }
binding.accountsCardView.setOnClickListener { onClickCardView(TrendingType.ACCOUNTS) }
}
private fun showError(@StringRes errorText: Int = R.string.loading_toast, show: Boolean = true){
binding.motionLayout.apply {
if(show){
transitionToEnd()
} else {
transitionToStart()
}
}
binding.discoverRefreshLayout.isRefreshing = false
binding.discoverProgressBar.visibility = View.GONE
}
private fun getDiscover() {
lifecycleScope.launchWhenCreated {
try {
val discoverPosts = api.discover()
adapter.addPosts(discoverPosts.posts)
binding.discoverNoInfiniteLoad.visibility = View.VISIBLE
showError(show = false)
} catch (exception: IOException) {
showError()
} catch (exception: HttpException) {
showError()
}
}
}
/**
* [RecyclerView.Adapter] that can display a list of [Status]s' thumbnails for the discover view
*/
class DiscoverRecyclerViewAdapter: RecyclerView.Adapter<ProfilePostViewHolder>() {
private val posts: ArrayList<Status?> = ArrayList()
fun addPosts(newPosts : List<Status>) {
posts.clear()
posts.addAll(newPosts)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProfilePostViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.fragment_profile_posts, parent, false)
return ProfilePostViewHolder(view)
}
override fun onBindViewHolder(holder: ProfilePostViewHolder, position: Int) {
val post = posts[position]
if((post?.media_attachments?.size ?: 0) > 1) {
holder.albumIcon.visibility = View.VISIBLE
} else {
holder.albumIcon.visibility = View.GONE
if(post?.media_attachments?.getOrNull(0)?.type == Attachment.AttachmentType.video) {
holder.videoIcon.visibility = View.VISIBLE
} else holder.videoIcon.visibility = View.GONE
}
setSquareImageFromURL(holder.postView, post?.getPostPreviewURL(), holder.postPreview, post?.media_attachments?.firstOrNull()?.blurhash)
holder.postPreview.setOnClickListener {
val intent = Intent(holder.postView.context, PostActivity::class.java)
intent.putExtra(Status.POST_TAG, post)
holder.postView.context.startActivity(intent)
}
}
override fun getItemCount(): Int = posts.size
private fun onClickCardView(type: TrendingType) {
val intent = Intent(requireContext(), TrendingActivity::class.java)
intent.putExtra(TRENDING_TAG, type)
ContextCompat.startActivity(binding.root.context, intent, null)
}
}

View File

@ -0,0 +1,215 @@
package org.pixeldroid.app.searchDiscover
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.annotation.StringRes
import androidx.lifecycle.lifecycleScope
import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView
import org.pixeldroid.app.R
import org.pixeldroid.app.databinding.ActivityTrendingBinding
import org.pixeldroid.app.posts.PostActivity
import org.pixeldroid.app.posts.feeds.uncachedFeeds.accountLists.AccountViewHolder
import org.pixeldroid.app.posts.feeds.uncachedFeeds.search.HashTagViewHolder
import org.pixeldroid.app.profile.ProfilePostViewHolder
import org.pixeldroid.app.utils.BaseThemedWithBarActivity
import org.pixeldroid.app.utils.api.PixelfedAPI
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.api.objects.Tag
import org.pixeldroid.app.utils.setSquareImageFromURL
import retrofit2.HttpException
import java.io.IOException
class TrendingActivity : BaseThemedWithBarActivity() {
private lateinit var api: PixelfedAPI
private lateinit var binding: ActivityTrendingBinding
private lateinit var recycler : RecyclerView
private lateinit var discoverAdapter : DiscoverRecyclerViewAdapter
private lateinit var hashtagsAdapter : HashtagsRecyclerViewAdapter
private lateinit var accountsAdapter : AccountsRecyclerViewAdapter
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityTrendingBinding.inflate(layoutInflater)
setContentView(binding.root)
api = apiHolder.api ?: apiHolder.setToCurrentUser()
recycler = binding.list
supportActionBar?.setDisplayHomeAsUpEnabled(true)
val type = intent.getSerializableExtra(TRENDING_TAG) as TrendingType? ?: TrendingType.POSTS
if(type == TrendingType.POSTS || type == TrendingType.DISCOVER) {
// Set posts RecyclerView as a grid with 3 columns
recycler.layoutManager = GridLayoutManager(this, 3)
discoverAdapter = DiscoverRecyclerViewAdapter()
recycler.adapter = discoverAdapter
if(type == TrendingType.POSTS) {
supportActionBar?.setTitle(R.string.trending_posts)
} else {
supportActionBar?.setTitle(R.string.discover)
}
}
if(type == TrendingType.HASHTAGS) {
supportActionBar?.setTitle(R.string.trending_hashtags)
hashtagsAdapter = HashtagsRecyclerViewAdapter()
recycler.adapter = hashtagsAdapter
}
if(type == TrendingType.ACCOUNTS) {
supportActionBar?.setTitle(R.string.popular_accounts)
accountsAdapter = AccountsRecyclerViewAdapter()
recycler.adapter = accountsAdapter
}
getTrending(type)
binding.refreshLayout.setOnRefreshListener {
getTrending(type)
}
}
private fun showError(@StringRes errorText: Int = R.string.loading_toast, show: Boolean = true){
binding.motionLayout.apply {
if(show){
transitionToEnd()
} else {
transitionToStart()
}
}
binding.refreshLayout.isRefreshing = false
binding.progressBar.visibility = View.GONE
}
private fun getTrending(type: TrendingType) {
lifecycleScope.launchWhenCreated {
try {
when(type) {
TrendingType.POSTS -> {
val trendingPosts = api.trendingPosts("daily")
discoverAdapter.addPosts(trendingPosts)
}
TrendingType.HASHTAGS -> {
val trendingTags = api.trendingHashtags()
.map { it.copy(name = it.name.removePrefix("#")) }
hashtagsAdapter.addHashtags(trendingTags)
}
TrendingType.ACCOUNTS -> {
val trendingAccounts = api.popularAccounts()
accountsAdapter.addAccounts(trendingAccounts)
}
TrendingType.DISCOVER -> {
val posts = api.discover().posts
discoverAdapter.addPosts(posts)
}
}
showError(show = false)
} catch (exception: IOException) {
showError()
} catch (exception: HttpException) {
showError()
}
}
}
/**
* [RecyclerView.Adapter] that can display a list of [Status]s' thumbnails for the discover view
*/
class DiscoverRecyclerViewAdapter: RecyclerView.Adapter<ProfilePostViewHolder>() {
private val posts: ArrayList<Status?> = ArrayList()
fun addPosts(newPosts : List<Status>) {
posts.clear()
posts.addAll(newPosts)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ProfilePostViewHolder {
val view = LayoutInflater.from(parent.context)
.inflate(R.layout.fragment_profile_posts, parent, false)
return ProfilePostViewHolder(view)
}
override fun onBindViewHolder(holder: ProfilePostViewHolder, position: Int) {
val post = posts[position]
if((post?.media_attachments?.size ?: 0) > 1) {
holder.albumIcon.visibility = View.VISIBLE
} else {
holder.albumIcon.visibility = View.GONE
if(post?.media_attachments?.getOrNull(0)?.type == Attachment.AttachmentType.video) {
holder.videoIcon.visibility = View.VISIBLE
} else holder.videoIcon.visibility = View.GONE
}
setSquareImageFromURL(holder.postView, post?.getPostPreviewURL(), holder.postPreview, post?.media_attachments?.firstOrNull()?.blurhash)
holder.postPreview.setOnClickListener {
val intent = Intent(holder.postView.context, PostActivity::class.java)
intent.putExtra(Status.POST_TAG, post)
holder.postView.context.startActivity(intent)
}
}
override fun getItemCount(): Int = posts.size
}
companion object {
const val TRENDING_TAG = "TrendingTag"
enum class TrendingType {
POSTS, HASHTAGS, ACCOUNTS, DISCOVER
}
}
/**
* [RecyclerView.Adapter] that can display a list of [Tag]s for the trending view
*/
class HashtagsRecyclerViewAdapter: RecyclerView.Adapter<HashTagViewHolder>() {
private val tags: ArrayList<Tag?> = ArrayList()
fun addHashtags(newTags : List<Tag>) {
tags.clear()
tags.addAll(newTags)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HashTagViewHolder {
return HashTagViewHolder.create(parent)
}
override fun onBindViewHolder(holder: HashTagViewHolder, position: Int) {
val tag = tags[position]
holder.bind(tag)
}
override fun getItemCount(): Int = tags.size
}
/**
* [RecyclerView.Adapter] that can display a list of [Account]s for the popular view
*/
class AccountsRecyclerViewAdapter: RecyclerView.Adapter<AccountViewHolder>() {
private val accounts: ArrayList<Account?> = ArrayList()
fun addAccounts(newAccounts : List<Account>) {
accounts.clear()
accounts.addAll(newAccounts)
notifyDataSetChanged()
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): AccountViewHolder {
return AccountViewHolder.create(parent)
}
override fun onBindViewHolder(holder: AccountViewHolder, position: Int) {
val account = accounts[position]
holder.bind(account)
}
override fun getItemCount(): Int = accounts.size
}
}

View File

@ -7,6 +7,7 @@ import okhttp3.Interceptor
import org.pixeldroid.app.utils.api.objects.*
import okhttp3.MultipartBody
import okhttp3.OkHttpClient
import org.pixeldroid.app.utils.api.objects.Tag
import org.pixeldroid.app.utils.db.AppDatabase
import org.pixeldroid.app.utils.db.entities.UserDatabaseEntity
import org.pixeldroid.app.utils.di.PixelfedAPIHolder
@ -20,7 +21,6 @@ import retrofit2.converter.gson.GsonConverterFactory
import retrofit2.http.*
import retrofit2.http.Field
import java.time.Instant
import java.time.format.DateTimeFormatter
/*
@ -320,6 +320,17 @@ interface PixelfedAPI {
@GET("/api/v1/discover/posts")
suspend fun discover() : DiscoverPosts
@GET("/api/v1.1/discover/accounts/popular")
suspend fun popularAccounts() : List<Account>
@GET("/api/v1.1/discover/posts/trending")
suspend fun trendingPosts(
@Query("range") range: String
) : List<Status>
@GET("/api/v1.1/discover/posts/hashtags")
suspend fun trendingHashtags() : List<Tag>
@FormUrlEncoded
@POST("/api/v1/reports")
@JvmSuppressWildcards

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorOnSecondaryContainer" android:pathData="M14.06,9.94L12,9l2.06,-0.94L15,6l0.94,2.06L18,9l-2.06,0.94L15,12L14.06,9.94zM4,14l0.94,-2.06L7,11l-2.06,-0.94L4,8l-0.94,2.06L1,11l2.06,0.94L4,14zM8.5,9l1.09,-2.41L12,5.5L9.59,4.41L8.5,2L7.41,4.41L5,5.5l2.41,1.09L8.5,9zM4.5,20.5l6,-6.01l4,4L23,8.93l-1.41,-1.41l-7.09,7.97l-4,-4L3,19L4.5,20.5z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorOnBackground" android:pathData="M22,16L22,4c0,-1.1 -0.9,-2 -2,-2L8,2c-1.1,0 -2,0.9 -2,2v12c0,1.1 0.9,2 2,2h12c1.1,0 2,-0.9 2,-2zM11,12l2.03,2.71L16,11l4,5L8,16l3,-4zM2,6v14c0,1.1 0.9,2 2,2h14v-2L4,20L4,6L2,6z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorOnSecondaryContainer" android:pathData="M13,8c0,-2.21 -1.79,-4 -4,-4S5,5.79 5,8s1.79,4 4,4S13,10.21 13,8zM15,10v2h3v3h2v-3h3v-2h-3V7h-2v3H15zM1,18v2h16v-2c0,-2.66 -5.33,-4 -8,-4S1,15.34 1,18z"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorOnSecondaryContainer" android:pathData="M20,10L20,8h-4L16,4h-2v4h-4L10,4L8,4v4L4,8v2h4v4L4,14v2h4v4h2v-4h4v4h2v-4h4v-2h-4v-4h4zM14,14h-4v-4h4v4z"/>
</vector>

View File

@ -5,5 +5,5 @@
android:viewportHeight="24">
<path
android:pathData="M12,10.9c-0.61,0 -1.1,0.49 -1.1,1.1s0.49,1.1 1.1,1.1c0.61,0 1.1,-0.49 1.1,-1.1s-0.49,-1.1 -1.1,-1.1zM12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM14.19,14.19L6,18l3.81,-8.19L18,6l-3.81,8.19z"
android:fillColor="?attr/colorOnBackground"/>
android:fillColor="?attr/colorOnSecondaryContainer"/>
</vector>

View File

@ -0,0 +1,5 @@
<vector android:height="24dp"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="?attr/colorOnBackground" android:pathData="M11.99,2C6.47,2 2,6.48 2,12s4.47,10 9.99,10C17.52,22 22,17.52 22,12S17.52,2 11.99,2zM16.23,18L12,15.45 7.77,18l1.12,-4.81 -3.73,-3.23 4.92,-0.42L12,5l1.92,4.53 4.92,0.42 -3.73,3.23L16.23,18z"/>
</vector>

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
tools:context=".searchDiscover.TrendingActivity">
<ProgressBar
android:id="@+id/progressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/refreshLayout"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/error_layout_xml_error_scene">
<include layout="@layout/error_layout"/>
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/list"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
app:layoutManager="LinearLayoutManager"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent" />
</androidx.constraintlayout.motion.widget.MotionLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -5,7 +5,6 @@
android:layout_height="wrap_content"
android:layout_gravity="center_horizontal">
<androidx.appcompat.widget.SearchView
android:id="@+id/search"
android:layout_width="wrap_content"
@ -16,75 +15,163 @@
app:layout_constraintTop_toTopOf="parent"
app:queryHint="@string/search" />
<ProgressBar
android:id="@+id/discoverProgressBar"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search" />
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout
android:id="@+id/discoverRefreshLayout"
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_marginTop="10dp"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/search">
<androidx.core.widget.NestedScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.constraintlayout.motion.widget.MotionLayout
android:id="@+id/motionLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:layoutDescription="@xml/error_layout_xml_error_scene">
<include layout="@layout/error_layout"/>
<TextView
android:id="@+id/discoverText"
android:layout_width="wrap_content"
<com.google.android.material.card.MaterialCardView
android:id="@+id/trendingCardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_vertical"
android:text="@string/discover"
android:layout_margin="8dp"
style="?attr/materialCardViewElevatedStyle"
app:cardBackgroundColor="?attr/colorSecondaryContainer"
app:layout_constraintBottom_toTopOf="@+id/hashtagsCardView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/errorLayout"
app:layout_constraintTop_toTopOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/trending_posts"
android:textAppearance="?attr/textAppearanceTitleLarge"
android:drawablePadding="4dp"
android:textColor="?attr/colorOnSecondaryContainer"
app:drawableLeftCompat="@drawable/baseline_auto_graph_24" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/daily_trending"
android:textColor="?attr/colorOnSecondaryContainer"
android:textAppearance="?attr/textAppearanceTitleSmall"
android:layout_marginTop="8dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/hashtagsCardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
style="?attr/materialCardViewElevatedStyle"
app:cardBackgroundColor="?attr/colorSecondaryContainer"
app:layout_constraintBottom_toTopOf="@id/accountsCardView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/trendingCardView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/trending_hashtags"
android:textAppearance="?attr/textAppearanceTitleLarge"
android:drawablePadding="4dp"
android:textColor="?attr/colorOnSecondaryContainer"
app:drawableStartCompat="@drawable/baseline_tag" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/explore_hashtags"
android:textColor="?attr/colorOnSecondaryContainer"
android:textAppearance="?attr/textAppearanceTitleSmall"
android:layout_marginTop="8dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/accountsCardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
style="?attr/materialCardViewElevatedStyle"
app:cardBackgroundColor="?attr/colorSecondaryContainer"
app:layout_constraintTop_toBottomOf="@id/hashtagsCardView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toTopOf="@id/discoverCardView">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/popular_accounts"
android:textAppearance="?attr/textAppearanceTitleLarge"
android:drawablePadding="4dp"
android:textColor="?attr/colorOnSecondaryContainer"
app:drawableStartCompat="@drawable/baseline_person_add" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/explore_accounts"
android:textColor="?attr/colorOnSecondaryContainer"
android:textAppearance="?attr/textAppearanceTitleSmall"
android:layout_marginTop="8dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
<com.google.android.material.card.MaterialCardView
android:id="@+id/discoverCardView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="8dp"
style="?attr/materialCardViewElevatedStyle"
app:cardBackgroundColor="?attr/colorSecondaryContainer"
app:layout_constraintTop_toBottomOf="@id/accountsCardView"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintBottom_toBottomOf="parent">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:padding="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/discover"
android:textAppearance="?attr/textAppearanceTitleLarge"
android:drawablePadding="4dp"
android:textColor="?attr/colorOnSecondaryContainer"
app:drawableStartCompat="@drawable/explore_24dp" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/discoverList"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:nestedScrollingEnabled="false"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/discoverText" />
</androidx.constraintlayout.motion.widget.MotionLayout>
<TextView
android:id="@+id/discoverNoInfiniteLoad"
android:visibility="invisible"
android:layout_width="wrap_content"
android:layout_height="50dp"
android:gravity="center"
android:text="@string/discover_no_infinite_load"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/motionLayout"/>
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>
android:layout_height="wrap_content"
android:text="@string/explore_posts"
android:textColor="?attr/colorOnSecondaryContainer"
android:textAppearance="?attr/textAppearanceTitleSmall"
android:layout_marginTop="8dp" />
</LinearLayout>
</com.google.android.material.card.MaterialCardView>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>
</LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -149,7 +149,6 @@
<string name="no_cancel_edit">No, cancel·lar l\'edició</string>
<string name="add_comment">Afegir un comentari</string>
<string name="submit_comment">Enviar el comentari</string>
<string name="discover_no_infinite_load">El Discover no es carrega infinitament. Tireu per actualitzar altres imatges.</string>
<string name="save_before_returning">Voleu desar les vostres edicions\?</string>
<string name="switch_to_carousel">Canvia a carrusel</string>
<string name="save_image_description">Desar la descripció de la imatge</string>

View File

@ -200,7 +200,6 @@
<string name="media_upload_failed">Nahrávání selhalo, zkuste znovu nebo zkontrolujte stav sítě</string>
<string name="posting_image_accessibility_hint">Obrázek se zveřejňuje</string>
<string name="switch_to_carousel">Zobrazit v karuselu</string>
<string name="discover_no_infinite_load">Načítá se pouze omezené množství obsahu. Pro zobrazení dalších obrázku zatáhněte dolů.</string>
<string name="panda_pull_to_refresh_to_try_again">Panda je smutná. Zatáhněte dolů a pro obnovení.</string>
<string name="issues_contribute">Nahlaste problémy nebo přispějte do aplikace:</string>
<string name="mascot_description">Obrázek zobrazuje červenou pandu, maskota aplikace Pixelfed používající telefon</string>

View File

@ -189,7 +189,6 @@
<string name="follow_requested">Followeranfrage</string>
<string name="delete_post_failed_io_except">Beitrag konnte nicht gelöscht werden. Internetverbindung unterbrochen\?</string>
<string name="edit_link_failed">Das Öffnen der Bearbeitungsseite ist gescheitert</string>
<string name="discover_no_infinite_load">\"Entdecke\" lädt nicht endlos. Nach unten ziehen, um weitere Bilder zu laden.</string>
<string name="hashtag_title">#%1$s</string>
<string name="no_camera_permission">Die Einwilligung die Kamera zu nutzen wurde nicht erteilt. Erlaube die Kameranutzung in den Einstellungen, wenn du die Kamera in PixelDroid verwenden willst</string>
<string name="no_storage_permission">Die Erlaubnis, auf die Dateien zuzugreifen wurde nicht erteilt. Erlaube den Zugriff auf Daten wenn du PixelDroid das Thumbnail anzeigen lassen willst</string>

View File

@ -112,7 +112,6 @@
<string name="delete">Borrar</string>
<string name="panda_pull_to_refresh_to_try_again">Este panda está triste. Desliza hacia abajo para intentarlo de nuevo.</string>
<string name="something_went_wrong">Algo fue mal…</string>
<string name="discover_no_infinite_load">\'Descubre\' no carga infinitamente. Desliza hacia abajo para cargar más imágenes.</string>
<string name="discover">DESCUBRE</string>
<string name="open_drawer_menu">Abrir el menú lateral</string>
<string name="profile_picture">Imagen de perfil</string>

View File

@ -187,7 +187,6 @@
<string name="size_exceeds_instance_limit">Albumean %1$d zenbakia duen irudiaren tamainak instantziak onartutako gehienezko tamaina gainditzen du (%2$d kB ditu, eta muga %3$d kB da). Baliteke ezin igo ahal izatea.</string>
<string name="total_exceeds_album_limit">Zerbitzariak onartutako kopurua (%1$s) baino irudi gehiago aukeratu dituzu. Mugatik gorako irudiei ez ikusia egin zaie.</string>
<string name="api_not_enabled_dialog">APIa ez dago aktibo instantzia honetan. Jarri zure administratzailearekin kontaktuan aktibatzeko.</string>
<string name="discover_no_infinite_load">Aurkikuntza ez da infinituki kargatzen. Tira irudi gehiago kargatzeko.</string>
<string name="hashtag_title">#%1$s</string>
<string name="file_not_found">%1$s fitxategia ez da aurkitu</string>
<string name="edit_link_failed">Huts egin du edizio orria irekitzean</string>

View File

@ -191,7 +191,6 @@
<string name="follow_requested">درخواست پیگیری فرستاده شد</string>
<string name="empty_feed">اینجا چیزی برای دیدن نیست :(</string>
<string name="edit_link_failed">ناتوانی در باز کردن صفحه ویرایش</string>
<string name="discover_no_infinite_load">بخش کشف به صورت بی‌انتها بار نمی‌شود. برای تازه‌سازی و دریافت تصاویر دیگر، صفحه را به پایین بکشید.</string>
<string name="file_not_found">پروندهٔ %1$s یافت نشد</string>
<string name="hashtag_title">#%1$s</string>
<string name="comment_notification">%1$s نظر درباره فرستهٔ شما</string>

View File

@ -191,7 +191,6 @@
<string name="follow_requested">Seguimento solicitado</string>
<string name="empty_feed">Nada por aquí :(</string>
<string name="edit_link_failed">Non se puido abrir a páxina de edición</string>
<string name="discover_no_infinite_load">Descubrimento non carga indefinidamente. Arrastra hacia abaixo para ter máis imaxes.</string>
<string name="file_not_found">Non se atopou o ficheiro %1$s</string>
<string name="hashtag_title">#%1$s</string>
<string name="comment_notification">%1$s comentou a túa publicación</string>

View File

@ -31,7 +31,6 @@
<string name="delete">Törlés</string>
<string name="panda_pull_to_refresh_to_try_again">Ez a panda nem boldog. Húzza le a frissítéshez.</string>
<string name="something_went_wrong">Valami hiba történt…</string>
<string name="discover_no_infinite_load">A felfedezés nem tölt be a végtelenségig. Húzza le a frissítéshez, hogy több képet lásson.</string>
<string name="discover">FELFEDEZÉS</string>
<string name="open_drawer_menu">Fiókmenü megnyitása</string>
<string name="profile_picture">Profilkép</string>

View File

@ -110,7 +110,6 @@
<string name="toolbar_title_edit">Sunting</string>
<string name="profile_picture">Gambar profil</string>
<string name="discover">TEMUKAN</string>
<string name="discover_no_infinite_load">Temukan tidak memuat selamanya. Tarik untuk memuat ulang gambar lain.</string>
<string name="something_went_wrong">Suatu kesalahan terjadi…</string>
<string name="delete">Hapus</string>
<string name="delete_dialog">Hapus postingan ini\?</string>

View File

@ -88,7 +88,6 @@
<string name="delete">Usuń</string>
<string name="delete_dialog">Czy usunąć ten post\?</string>
<string name="no_cancel_edit">Nie, odrzuć edycję</string>
<string name="discover_no_infinite_load">Sekcja Odkryj nie wczytuje się bez końca. Pociągnij, aby odświeżyć dla innych obrazów.</string>
<string name="switch_to_carousel">Przełącz na karuzelę</string>
<plurals name="replies_count">
<item quantity="one">%d odpowiedź</item>

View File

@ -189,7 +189,6 @@
<string name="mascot_description">Imagem mostrando um panda vermelho, mascote do Pixelfed, usando um telefone</string>
<string name="issues_contribute">Relate problemas ou contribua com o aplicativo:</string>
<string name="panda_pull_to_refresh_to_try_again">O panda não está feliz. Puxe para atualizar e tentar novamente.</string>
<string name="discover_no_infinite_load">As descobertas não carregam infinitamente. Puxe para atualizar para outras imagens.</string>
<string name="open_drawer_menu">Abrir o menu lateral</string>
<string name="follows_title">%1$s está seguindo</string>
<string name="media_upload_failed">Envio de mídia falhou. Tente novamente ou verifique as condições de conectividade</string>

View File

@ -231,7 +231,6 @@
</plurals>
<string name="media_upload_completed">Envio de media terminado</string>
<string name="report_target">Denunciar a publicação de @%1$s</string>
<string name="discover_no_infinite_load">Descobrir não carrega infinitamente. Puxe para atualizar para outras imagens.</string>
<string name="delete_post_failed_error">Não foi possível eliminar a publicação, erro %1$d</string>
<string name="video_not_supported">O servidor que está a usar não permite o envio de vídeos</string>
<string name="media_upload_failed">Falhou o envio da media, tente novamente ou verifique a sua conectividade</string>

View File

@ -201,7 +201,6 @@
\nДополнительную информации о Pixelfed вы можете посмотреть здесь: https://pixelfed.org</string>
<string name="crop_button">Кнопка для обрезки или поворота изображения</string>
<string name="switch_to_grid">Переключить в вид сетки</string>
<string name="discover_no_infinite_load">Обзор не может загружаться бесконечно. Потяните, чтобы обновить другие изображения.</string>
<string name="dialog_message_cancel_follow_request">Отменить запрос на подписку\?</string>
<string name="follow_requested">Подписаться на запрос</string>
<string name="total_exceeds_album_limit">Вы выбрали большее изображений, чем разрешено вашим сервером (%1$s). Изображения сверх установленного лимита игнорируются.</string>

View File

@ -42,7 +42,6 @@
<string name="switch_to_grid">Режим сітки</string>
<string name="switch_to_carousel">Режим каруселі</string>
<string name="verify_credentials">Не вдалось отримати користувацькі дані</string>
<string name="discover_no_infinite_load">Потягніть для оновлення, щоб отримати нові цікаві зображення.</string>
<string name="instance_error">Не вдалось отримати дані про сервер</string>
<string name="save_image_description">Зберегти опис зображення</string>
<string name="no_media_description">Опишіть медіафайл…</string>

View File

@ -122,7 +122,6 @@
<string name="delete_dialog">删除这则帖子?</string>
<string name="panda_pull_to_refresh_to_try_again">这只熊猫不高兴。下拉刷新以再次尝试。</string>
<string name="something_went_wrong">出错了…</string>
<string name="discover_no_infinite_load">Discover 不会无限加载。下拉来刷新获取其他图像。</string>
<string name="discover">发现</string>
<string name="open_drawer_menu">打开抽屉按钮</string>
<string name="profile_picture">个人资料图片</string>

View File

@ -227,8 +227,7 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
<string name="report_error">Could not send report</string>
<string name="profile_picture">Profile picture</string>
<string name="open_drawer_menu">Open drawer menu</string>
<string name="discover">DISCOVER</string>
<string name="discover_no_infinite_load">Discover doesn\'t load infinitely. Pull to refresh for other images.</string>
<string name="discover">Discover</string>
<string name="something_went_wrong">Something went wrong…</string>
<string name="panda_pull_to_refresh_to_try_again">This panda is not happy. Pull to refresh to try again.</string>
<string name="redraft">Redraft</string>
@ -283,6 +282,13 @@ For more info about Pixelfed, you can check here: https://pixelfed.org"</string>
<string name="post_preview">Preview of a post</string>
<string name="description_template_summary">"Prefill new posts' description with this"</string>
<string name="description_template">Description template</string>
<string name="explore_accounts">Explore popular accounts on this instance</string>
<string name="popular_accounts">Popular Accounts</string>
<string name="explore_hashtags">Explore trending hashtags on this instance</string>
<string name="trending_hashtags">Trending Hashtags</string>
<string name="daily_trending">View daily trending posts</string>
<string name="trending_posts">Trending Posts</string>
<string name="explore_posts">Explore random posts of the day</string>
<plurals name="replies_count">
<item quantity="one">%d reply</item>
<item quantity="other">%d replies</item>

View File

@ -40,6 +40,14 @@
<sha256 value="b561e41c1bddb2160f79b9bc7541ad9ed110147ab2ccf63719a23d498470b043" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.activity" name="activity" version="1.6.1">
<artifact name="activity-1.6.1.aar">
<sha256 value="46d9c0e7547ac7276853366a590f891db2a86863387c0738cf1f11731dc8fd7e" origin="Generated by Gradle"/>
</artifact>
<artifact name="activity-1.6.1.module">
<sha256 value="536ab6630c9abbd61d527788af0ae76a8500db6536252512cac3b529d84d2e3a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.activity" name="activity-ktx" version="1.5.0">
<artifact name="activity-ktx-1.5.0.aar">
<sha256 value="3d1e2b96b7d93857027bf52e044bbf534feb95a87ea61d13be15677623759831" origin="Generated by Gradle"/>
@ -67,6 +75,14 @@
<sha256 value="574b89ee589c530ec4d3fc412aac890066842db45a6a9a1bbe89542e0b47e81b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.activity" name="activity-ktx" version="1.6.1">
<artifact name="activity-ktx-1.6.1.aar">
<sha256 value="0561745b3ddce53db491221b2b0cd3a44cadfb091b85e7831fd8be344f117d6e" origin="Generated by Gradle"/>
</artifact>
<artifact name="activity-ktx-1.6.1.module">
<sha256 value="eb2f3862d2073c395a5037fb3284de6073b7824df27c7ac934502d6a5ecfcdfa" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.annotation" name="annotation" version="1.0.0">
<artifact name="annotation-1.0.0.jar">
<sha256 value="0baae9755f7caf52aa80cd04324b91ba93af55d4d1d17dcc9a7b53d99ef7c016" origin="Generated by Gradle"/>
@ -1106,6 +1122,14 @@
<sha256 value="88a477a2acb93a9968602cdff93a88eefdde9d45802c21d22428d2fa92fc202e" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.fragment" name="fragment" version="1.5.4">
<artifact name="fragment-1.5.4.aar">
<sha256 value="bc3c2431dda42e94bb9511c587eae890d276e4aafe393a8da7b00169186dafde" origin="Generated by Gradle"/>
</artifact>
<artifact name="fragment-1.5.4.module">
<sha256 value="af3260808dceb6532efc2d7215be45872c24a699dada7d77bff738ce3b85a7f0" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.fragment" name="fragment-ktx" version="1.5.0">
<artifact name="fragment-ktx-1.5.0.aar">
<sha256 value="f1e136966e4037cc0e269c1ba9baabcc87f102300ec17946c9b190a49314950f" origin="Generated by Gradle"/>
@ -1125,6 +1149,14 @@
<sha256 value="6ac3f7129ac3ea45c0a818ed1947782bc02203c90d2baf011c53976fce40851b" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.fragment" name="fragment-ktx" version="1.5.4">
<artifact name="fragment-ktx-1.5.4.aar">
<sha256 value="05fda090c3038c327701f8c9d03d6683770a51c955484f3aa30439d152a6a197" origin="Generated by Gradle"/>
</artifact>
<artifact name="fragment-ktx-1.5.4.module">
<sha256 value="0caf18b6349131e31f230ae6fa6934494ab431fd12494f244b1e22376b330215" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.gridlayout" name="gridlayout" version="1.0.0">
<artifact name="gridlayout-1.0.0.aar">
<sha256 value="a7e5dc6f39dbc3dc6ac6d57b02a9c6fd792e80f0e45ddb3bb08e8f03d23c8755" origin="Generated by Gradle"/>
@ -1722,6 +1754,14 @@
<sha256 value="7474fb56ad8cbf06f1e9047533934c0ca7b311092035cd78ee5e7966f34749cc" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-common" version="2.5.3">
<artifact name="navigation-common-2.5.3.aar">
<sha256 value="841406807a7c2254c66460bfb71e65a112a95c84ecd6253302b3657f83332026" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-common-2.5.3.module">
<sha256 value="4b0bd6fb889a909af9a1ea9f7fd7271b319677dae8512d95cafdd49decc8ca0a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-common-ktx" version="2.5.0">
<artifact name="navigation-common-ktx-2.5.0.aar">
<sha256 value="364b3132b4f925c05ade091e7f3dc8ce45f57c4da320b56a4739eb7bfffc25b4" origin="Generated by Gradle"/>
@ -1741,6 +1781,14 @@
<sha256 value="aa1a95e4cc7ba1199b3eee1034a30f067578823a0a8ff60dcc305d12fd4508ca" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-common-ktx" version="2.5.3">
<artifact name="navigation-common-ktx-2.5.3.aar">
<sha256 value="6f5de047a79023c7767f5d27ec8bf8baad24d60659ed9781b021852ec0db6168" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-common-ktx-2.5.3.module">
<sha256 value="459b2d0214420b6df2edb448c8a7c226dbecdb98b797685eb3da5f0a3b0adcbd" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-fragment" version="2.5.0">
<artifact name="navigation-fragment-2.5.0.aar">
<sha256 value="6b70876349b1bc44591ab66f91b67c58e3d9c4472210b9aede614d49c4d0f16a" origin="Generated by Gradle"/>
@ -1760,6 +1808,14 @@
<sha256 value="e362cc052710af038573366aecb804df197a6197bda6f0b2ecae46d8217f79c5" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-fragment" version="2.5.3">
<artifact name="navigation-fragment-2.5.3.aar">
<sha256 value="8fd447ce032b1850bcded21855061d5dd209bf564dffb3a89451d0e642b26bec" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-fragment-2.5.3.module">
<sha256 value="38a60d924ff27c38862ae16c3b4829a3afff8bc22f36cf8ec77feb5b63040602" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-fragment-ktx" version="2.5.0">
<artifact name="navigation-fragment-ktx-2.5.0.aar">
<sha256 value="e4d60b2645144b7035292d5afcad7eaa43b730c9061bbe662076fc453943083a" origin="Generated by Gradle"/>
@ -1779,6 +1835,14 @@
<sha256 value="12eae2f73df30bf6a0ab62a83403bcb2c3548dd227ebe85db9bd576d5024c43c" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-fragment-ktx" version="2.5.3">
<artifact name="navigation-fragment-ktx-2.5.3.aar">
<sha256 value="47d8400282d0360f390c218c3c5206e8f7e8c61257ddac4136d7e1c67c560fa1" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-fragment-ktx-2.5.3.module">
<sha256 value="8e2496a4f92130c6526ecd2b65a1ad5cef19306e6000e577c6dfd3412b977052" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-runtime" version="2.5.0">
<artifact name="navigation-runtime-2.5.0.aar">
<sha256 value="6b42423369973b6ad714465d01ae0e103595fd9729dc338e1262773516892bdf" origin="Generated by Gradle"/>
@ -1798,6 +1862,14 @@
<sha256 value="f47d9520434ad098fc16c87cb23a75573786899cf62059ba6dafce96980f5489" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-runtime" version="2.5.3">
<artifact name="navigation-runtime-2.5.3.aar">
<sha256 value="b57ffe10d3be3fc814ead4df2a40092069aad4741ac26f0a1e763c31144fe120" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-runtime-2.5.3.module">
<sha256 value="923567493f7a3edab011bb1ca487c46b7ee7d497ca585a9986da6220f5b6c73a" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-runtime-ktx" version="2.5.0">
<artifact name="navigation-runtime-ktx-2.5.0.aar">
<sha256 value="815f96b5e62dd56d43971a9aa20e61639c13d5e393ff6c84f124dba2c9656976" origin="Generated by Gradle"/>
@ -1817,6 +1889,14 @@
<sha256 value="d4186b87776ea8705961e436c5cdbfc811d21b8c5486bc6b5172f35646356c42" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-runtime-ktx" version="2.5.3">
<artifact name="navigation-runtime-ktx-2.5.3.aar">
<sha256 value="9ab94a34966c5501fac62979b96a5d64d1325b62caf707358616cf24df86caae" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-runtime-ktx-2.5.3.module">
<sha256 value="a93359c849e6f5a3b04f786b9e7d730819d04790a178ed530f1e39eced3908a0" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-ui" version="2.5.0">
<artifact name="navigation-ui-2.5.0.aar">
<sha256 value="c4ff3820a240795422c303a298c59252f203e4e54276a5fe4c0baa968c0d58e3" origin="Generated by Gradle"/>
@ -1836,6 +1916,14 @@
<sha256 value="ba85143e4cb8688e3ba4e77681eb6dad2b4f5010a028cfd72d98ab004e4a815e" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-ui" version="2.5.3">
<artifact name="navigation-ui-2.5.3.aar">
<sha256 value="dcfefbd6274a6249d2843a547a554914fc86dc36479c15a631e33e7f22fc7d35" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-ui-2.5.3.module">
<sha256 value="821c6675adc9f74037afd5a3e08f65b88dc81f707504a1759c94612bc9aa4b46" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-ui-ktx" version="2.5.0">
<artifact name="navigation-ui-ktx-2.5.0.aar">
<sha256 value="567cc200f1e70436d66e53cc63cf80198d2194049ba2d60a5f975ac8b5b4343a" origin="Generated by Gradle"/>
@ -1855,6 +1943,14 @@
<sha256 value="d3a5fc367ce05ae840a584eeefbcf0206f2ca377155d3b4b68c55fa8355c1a03" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.navigation" name="navigation-ui-ktx" version="2.5.3">
<artifact name="navigation-ui-ktx-2.5.3.aar">
<sha256 value="2443dedf8b4b2fbfd149970c7e4282d04d030614726107c0893fce33aa1870f7" origin="Generated by Gradle"/>
</artifact>
<artifact name="navigation-ui-ktx-2.5.3.module">
<sha256 value="3cb7ca48b1c20c822fac10ea1866f92d67963337d4aeb4ad106ae20e8a3240ba" origin="Generated by Gradle"/>
</artifact>
</component>
<component group="androidx.paging" name="paging-common" version="3.1.0">
<artifact name="paging-common-3.1.0.module">
<sha256 value="912f1dfb8583531f154b08306a1277ce488927f25178e9a3f77127d84f457160" origin="Generated by Gradle"/>