Search/Discover tab
This commit is contained in:
parent
269276f23d
commit
cb9180fb60
|
@ -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'
|
||||
|
|
|
@ -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"
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
}
|
|
@ -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
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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>
|
||||
|
|
|
@ -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"/>
|
||||
|
|
Loading…
Reference in New Issue