1
0
mirror of https://gitlab.shinice.net/pixeldroid/PixelDroid synced 2025-02-09 16:18:39 +01:00

Merge branch 'translation_tweaks' into 'master'

Translation tweaks (#265)

Closes #265

See merge request pixeldroid/PixelDroid!266
This commit is contained in:
Matthieu 2020-12-16 22:17:31 +01:00
commit 6483989c09
41 changed files with 314 additions and 172 deletions

19
CONTRIBUTING.md Normal file
View File

@ -0,0 +1,19 @@
If you want to contribute to PixelDroid, you can do so in several ways:
# Translation
You can help to translate PixelDroid to your favourite language. Please do not submit Merge Requests directly, but use our weblate at https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/ .
You can add a new language by using the "Start new translation" button on the bottom left of the page.
Before translating, please take a look at the [TRANSLATION.md](TRANSLATION.md) file for details and some guidance.
# Creating issues on the issue tracker
If you encounter a problem or have an idea about how to make PixelDroid better, you should make an issue about it on our [GitLab project](https://gitlab.shinice.net/pixeldroid/PixelDroid/-/issues). If you encountered a problem, please make sure to document how to reproduce it, and include screenshots if possible. If you are making a suggestion, please try to be detailed in your description.
# Contribute changes or fix bugs
You can also help us solve one of the existing issues, or improve the application in some other way, by contributing changes yourself. To do this you can fork the project and submit a Merge Request.
Before starting to work on an issue or an improvement, you can ask us on our Matrix channel (#pixeldroid:gnugen.ch) what we think, or make a comment on the relevant issue, so that we might point you in the right direction, and to make sure someone else is not already working on it.

15
TRANSLATION.md Normal file
View File

@ -0,0 +1,15 @@
# Register on our Weblate instance
Sign up on our instance and go to the PixelDroid project here: https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/
No need to specify your real name, obviously, unless you want to.
# Start translating
Go to the project's page ( https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid ). Click on the language you want to work with (for example, Catalan would be at https://weblate.pixeldroid.org/projects/pixeldroid/pixeldroid/ca/ ). Then click the "Translate" button on the right. You can then edit the missing translations and review existing ones.
For more details, you can check out Weblate's documentation: https://docs.weblate.org/en/latest/user/translating.html
## Glossaries
When translating something containing a term specific to Pixelfed, PixelDroid, or the fediverse in general, be sure to add the items to the glossary of the language you are translating to, this helps to keep translating consistent. When translating, make sure to check the glossary to use the proper terms, and if you change an entry in the glossary make sure to also edit the entries containing that term.

View File

@ -2,10 +2,9 @@ package com.h.pixeldroid
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_about.* import kotlinx.android.synthetic.main.activity_about.*
class AboutActivity : AppCompatActivity() { class AboutActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_about) setContentView(R.layout.activity_about)

View File

@ -0,0 +1,58 @@
package com.h.pixeldroid
import android.content.Context
import android.content.res.Configuration
import android.content.res.Resources
import android.os.Build
import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import java.util.*
import javax.inject.Inject
open class BaseActivity : AppCompatActivity() {
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
(this.application as Pixeldroid).getAppComponent().inject(this)
}
override fun attachBaseContext(base: Context) {
super.attachBaseContext(updateBaseContextLocale(base))
}
private fun updateBaseContextLocale(context: Context): Context {
val language = PreferenceManager.getDefaultSharedPreferences(context).getString("language", "default") ?: "default"
if(language == "default"){
return context
}
val locale = Locale.forLanguageTag(language)
Locale.setDefault(locale)
return if (Build.VERSION.SDK_INT > Build.VERSION_CODES.N) {
updateResourcesLocale(context, locale)
} else updateResourcesLocaleLegacy(context, locale)
}
private fun updateResourcesLocale(context: Context, locale: Locale): Context =
context.createConfigurationContext(
Configuration(context.resources.configuration)
.apply { setLocale(locale) }
)
@Suppress("DEPRECATION")
private fun updateResourcesLocaleLegacy(context: Context, locale: Locale): Context {
val resources: Resources = context.resources
val configuration: Configuration = resources.configuration
configuration.locale = locale
resources.updateConfiguration(configuration, resources.displayMetrics)
return context
}
}

View File

@ -1,10 +1,9 @@
package com.h.pixeldroid package com.h.pixeldroid
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.fragments.CameraFragment
class CameraActivity : AppCompatActivity() { class CameraActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_camera) setContentView(R.layout.activity_camera)

View File

@ -1,25 +1,19 @@
package com.h.pixeldroid package com.h.pixeldroid
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountListFragment import com.h.pixeldroid.fragments.feeds.uncachedFeeds.accountLists.AccountListFragment
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_ID_TAG
import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG import com.h.pixeldroid.objects.Account.Companion.ACCOUNT_TAG
import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG import com.h.pixeldroid.objects.Account.Companion.FOLLOWERS_TAG
import javax.inject.Inject
class FollowsActivity : AppCompatActivity() { class FollowsActivity : BaseActivity() {
private var followsFragment = AccountListFragment() private var followsFragment = AccountListFragment()
@Inject
lateinit var db: AppDatabase
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_followers) setContentView(R.layout.activity_followers)
(this.application as Pixeldroid).getAppComponent().inject(this)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)

View File

@ -1,11 +1,10 @@
package com.h.pixeldroid package com.h.pixeldroid
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import kotlinx.android.synthetic.main.activity_licenses.* import kotlinx.android.synthetic.main.activity_licenses.*
class LicenseActivity : AppCompatActivity() { class LicenseActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_licenses) setContentView(R.layout.activity_licenses)

View File

@ -10,11 +10,8 @@ import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import android.view.inputmethod.InputMethodManager import android.view.inputmethod.InputMethodManager
import androidx.appcompat.app.AppCompatActivity
import androidx.browser.customtabs.CustomTabsIntent import androidx.browser.customtabs.CustomTabsIntent
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.* import com.h.pixeldroid.objects.*
import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.utils.DBUtils
import com.h.pixeldroid.utils.Utils import com.h.pixeldroid.utils.Utils
@ -30,7 +27,6 @@ import okhttp3.HttpUrl
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
/** /**
Overview of the flow of the login process: (boxes are requests done in parallel, Overview of the flow of the login process: (boxes are requests done in parallel,
@ -48,7 +44,7 @@ since they do not depend on each other)
*/ */
class LoginActivity : AppCompatActivity() { class LoginActivity : BaseActivity() {
companion object { companion object {
private const val PACKAGE_ID = BuildConfig.APPLICATION_ID private const val PACKAGE_ID = BuildConfig.APPLICATION_ID
@ -58,11 +54,6 @@ class LoginActivity : AppCompatActivity() {
private lateinit var oauthScheme: String private lateinit var oauthScheme: String
private lateinit var appName: String private lateinit var appName: String
private lateinit var preferences: SharedPreferences private lateinit var preferences: SharedPreferences
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
private lateinit var pixelfedAPI: PixelfedAPI private lateinit var pixelfedAPI: PixelfedAPI
private var inputVisibility: Int = View.GONE private var inputVisibility: Int = View.GONE
@ -71,7 +62,6 @@ class LoginActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_login) setContentView(R.layout.activity_login)
(application as Pixeldroid).getAppComponent().inject(this)
loadingAnimation(true) loadingAnimation(true)
appName = getString(R.string.app_name) appName = getString(R.string.app_name)
oauthScheme = getString(R.string.auth_scheme) oauthScheme = getString(R.string.auth_scheme)

View File

@ -16,15 +16,13 @@ import androidx.paging.ExperimentalPagingApi
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.android.material.tabs.TabLayoutMediator import com.google.android.material.tabs.TabLayoutMediator
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity import com.h.pixeldroid.db.entities.HomeStatusDatabaseEntity
import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity import com.h.pixeldroid.db.entities.PublicFeedStatusDatabaseEntity
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.fragments.CameraFragment import com.h.pixeldroid.fragments.CameraFragment
import com.h.pixeldroid.fragments.SearchDiscoverFragment import com.h.pixeldroid.fragments.SearchDiscoverFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.postFeeds.PostFeedFragment
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.utils.DBUtils import com.h.pixeldroid.utils.DBUtils
import com.h.pixeldroid.utils.Utils.Companion.hasInternet import com.h.pixeldroid.utils.Utils.Companion.hasInternet
@ -42,15 +40,8 @@ import org.ligi.tracedroid.sending.TraceDroidEmailSender
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import java.lang.IllegalArgumentException
import javax.inject.Inject
class MainActivity : AppCompatActivity() { class MainActivity : BaseActivity() {
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
private lateinit var header: AccountHeaderView private lateinit var header: AccountHeaderView
private var user: UserDatabaseEntity? = null private var user: UserDatabaseEntity? = null
@ -65,11 +56,8 @@ class MainActivity : AppCompatActivity() {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main) setContentView(R.layout.activity_main)
TraceDroidEmailSender.sendStackTraces("contact@pixeldroid.org", this) TraceDroidEmailSender.sendStackTraces("contact@pixeldroid.org", this)
(this.application as Pixeldroid).getAppComponent().inject(this)
//get the currently active user //get the currently active user
user = db.userDao().getActiveUser() user = db.userDao().getActiveUser()

View File

@ -21,7 +21,6 @@ import android.view.MenuItem
import android.view.View.GONE import android.view.View.GONE
import android.view.View.VISIBLE import android.view.View.VISIBLE
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.app.ActivityCompat import androidx.core.app.ActivityCompat
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.core.net.toFile import androidx.core.net.toFile
@ -59,7 +58,7 @@ private const val REQUEST_CODE_PERMISSIONS_SEND_PHOTO = 7
private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE, private val REQUIRED_PERMISSIONS = arrayOf(android.Manifest.permission.READ_EXTERNAL_STORAGE,
android.Manifest.permission.WRITE_EXTERNAL_STORAGE) android.Manifest.permission.WRITE_EXTERNAL_STORAGE)
class PhotoEditActivity : AppCompatActivity(), FilterListFragmentListener, EditImageFragmentListener { class PhotoEditActivity : BaseActivity(), FilterListFragmentListener, EditImageFragmentListener {
internal var saving: Boolean = false internal var saving: Boolean = false
private val BITMAP_CONFIG = Bitmap.Config.ARGB_8888 private val BITMAP_CONFIG = Bitmap.Config.ARGB_8888

View File

@ -3,41 +3,27 @@ package com.h.pixeldroid
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import androidx.appcompat.app.AppCompatActivity
import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.fragments.PostFragment import com.h.pixeldroid.fragments.PostFragment
import com.h.pixeldroid.objects.DiscoverPost import com.h.pixeldroid.objects.DiscoverPost
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.objects.Status
import com.h.pixeldroid.objects.Status.Companion.DISCOVER_TAG import com.h.pixeldroid.objects.Status.Companion.DISCOVER_TAG
import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG import com.h.pixeldroid.objects.Status.Companion.DOMAIN_TAG
import com.h.pixeldroid.objects.Status.Companion.POST_TAG import com.h.pixeldroid.objects.Status.Companion.POST_TAG
import com.h.pixeldroid.utils.DBUtils
import kotlinx.android.synthetic.main.activity_post.* import kotlinx.android.synthetic.main.activity_post.*
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
class PostActivity : AppCompatActivity() { class PostActivity : BaseActivity() {
private lateinit var postFragment : PostFragment private lateinit var postFragment : PostFragment
lateinit var domain : String lateinit var domain : String
private lateinit var accessToken : String private lateinit var accessToken : String
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_post) setContentView(R.layout.activity_post)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
(this.application as Pixeldroid).getAppComponent().inject(this)
val status = intent.getSerializableExtra(POST_TAG) as Status? val status = intent.getSerializableExtra(POST_TAG) as Status?
val discoverPost: DiscoverPost? = intent.getSerializableExtra(DISCOVER_TAG) as DiscoverPost? val discoverPost: DiscoverPost? = intent.getSerializableExtra(DISCOVER_TAG) as DiscoverPost?

View File

@ -11,16 +11,13 @@ import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import android.widget.Button import android.widget.Button
import android.widget.Toast import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import androidx.core.net.toFile import androidx.core.net.toFile
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
import androidx.recyclerview.widget.RecyclerView import androidx.recyclerview.widget.RecyclerView
import com.bumptech.glide.Glide import com.bumptech.glide.Glide
import com.google.android.material.textfield.TextInputLayout import com.google.android.material.textfield.TextInputLayout
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.interfaces.PostCreationListener import com.h.pixeldroid.interfaces.PostCreationListener
import com.h.pixeldroid.objects.Attachment import com.h.pixeldroid.objects.Attachment
import com.h.pixeldroid.objects.Instance import com.h.pixeldroid.objects.Instance
@ -35,13 +32,12 @@ import okhttp3.MultipartBody
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
private val TAG = "Post Creation Activity" private val TAG = "Post Creation Activity"
private val MORE_PICTURES_REQUEST_CODE = 0xffff private val MORE_PICTURES_REQUEST_CODE = 0xffff
class PostCreationActivity : AppCompatActivity(), PostCreationListener { class PostCreationActivity : BaseActivity(), PostCreationListener {
private lateinit var recycler : RecyclerView private lateinit var recycler : RecyclerView
private lateinit var adapter : PostCreationAdapter private lateinit var adapter : PostCreationAdapter
@ -58,19 +54,10 @@ class PostCreationActivity : AppCompatActivity(), PostCreationListener {
private var posts: ArrayList<String> = ArrayList() private var posts: ArrayList<String> = ArrayList()
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_post_creation) setContentView(R.layout.activity_post_creation)
(this.application as Pixeldroid).getAppComponent().inject(this)
// get image URIs // get image URIs
if(intent.clipData != null) { if(intent.clipData != null) {
val count = intent.clipData!!.itemCount val count = intent.clipData!!.itemCount

View File

@ -8,7 +8,6 @@ import android.util.Log
import android.view.View import android.view.View
import android.widget.* import android.widget.*
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.motion.widget.MotionLayout import androidx.constraintlayout.motion.widget.MotionLayout
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.GridLayoutManager
@ -16,9 +15,7 @@ import androidx.recyclerview.widget.RecyclerView
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import androidx.swiperefreshlayout.widget.SwipeRefreshLayout
import com.h.pixeldroid.adapters.ProfilePostsRecyclerViewAdapter import com.h.pixeldroid.adapters.ProfilePostsRecyclerViewAdapter
import com.h.pixeldroid.api.PixelfedAPI import com.h.pixeldroid.api.PixelfedAPI
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.db.entities.UserDatabaseEntity import com.h.pixeldroid.db.entities.UserDatabaseEntity
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Account import com.h.pixeldroid.objects.Account
import com.h.pixeldroid.objects.Relationship import com.h.pixeldroid.objects.Relationship
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.objects.Status
@ -27,9 +24,8 @@ import com.h.pixeldroid.utils.ImageConverter
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
class ProfileActivity : AppCompatActivity() { class ProfileActivity : BaseActivity() {
private lateinit var pixelfedAPI : PixelfedAPI private lateinit var pixelfedAPI : PixelfedAPI
private lateinit var adapter : ProfilePostsRecyclerViewAdapter private lateinit var adapter : ProfilePostsRecyclerViewAdapter
private lateinit var recycler : RecyclerView private lateinit var recycler : RecyclerView
@ -38,20 +34,12 @@ class ProfileActivity : AppCompatActivity() {
private lateinit var domain : String private lateinit var domain : String
private var user: UserDatabaseEntity? = null private var user: UserDatabaseEntity? = null
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
setContentView(R.layout.activity_profile) setContentView(R.layout.activity_profile)
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
(this.application as Pixeldroid).getAppComponent().inject(this)
user = db.userDao().getActiveUser() user = db.userDao().getActiveUser()
domain = user?.instance_uri.orEmpty() domain = user?.instance_uri.orEmpty()

View File

@ -1,26 +1,16 @@
package com.h.pixeldroid package com.h.pixeldroid
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle import android.os.Bundle
import android.util.Log import android.util.Log
import android.view.View import android.view.View
import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.di.PixelfedAPIHolder
import com.h.pixeldroid.objects.Report import com.h.pixeldroid.objects.Report
import com.h.pixeldroid.objects.Status import com.h.pixeldroid.objects.Status
import kotlinx.android.synthetic.main.activity_report.* import kotlinx.android.synthetic.main.activity_report.*
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
import javax.inject.Inject
class ReportActivity : AppCompatActivity() {
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
class ReportActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -30,7 +20,6 @@ class ReportActivity : AppCompatActivity() {
val status = intent.getSerializableExtra(Status.POST_TAG) as Status? val status = intent.getSerializableExtra(Status.POST_TAG) as Status?
(this.application as Pixeldroid).getAppComponent().inject(this)
//get the currently active user //get the currently active user
val user = db.userDao().getActiveUser() val user = db.userDao().getActiveUser()

View File

@ -3,8 +3,6 @@ package com.h.pixeldroid
import android.app.SearchManager import android.app.SearchManager
import android.content.Intent import android.content.Intent
import android.os.Bundle import android.os.Bundle
import android.util.Log
import androidx.appcompat.app.AppCompatActivity
import androidx.fragment.app.Fragment import androidx.fragment.app.Fragment
import androidx.viewpager2.adapter.FragmentStateAdapter import androidx.viewpager2.adapter.FragmentStateAdapter
import androidx.viewpager2.widget.ViewPager2 import androidx.viewpager2.widget.ViewPager2
@ -15,7 +13,7 @@ import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchHashtagFragme
import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchPostsFragment import com.h.pixeldroid.fragments.feeds.uncachedFeeds.search.SearchPostsFragment
import com.h.pixeldroid.objects.Results import com.h.pixeldroid.objects.Results
class SearchActivity : AppCompatActivity() { class SearchActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -99,18 +97,5 @@ class SearchActivity : AppCompatActivity() {
} }
} }
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
if (intent.action == Intent.ACTION_SEARCH) {
intent.getStringExtra(SearchManager.QUERY)?.also { query ->
search(query)
}
}
}
private fun search(query: String){
Log.e("search", "")
}
} }

View File

@ -3,14 +3,12 @@ package com.h.pixeldroid
import android.content.Intent import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.os.Bundle import android.os.Bundle
import androidx.appcompat.app.AppCompatActivity
import androidx.preference.Preference
import androidx.preference.PreferenceFragmentCompat import androidx.preference.PreferenceFragmentCompat
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import com.h.pixeldroid.utils.ThemeUtils.Companion.setThemeFromPreferences import com.h.pixeldroid.utils.ThemeUtils.Companion.setThemeFromPreferences
class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferenceChangeListener { class SettingsActivity : BaseActivity(), SharedPreferences.OnSharedPreferenceChangeListener {
private var restartActivitiesOnExit = false private var restartMainOnExit = false
override fun onCreate(savedInstanceState: Bundle?) { override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState) super.onCreate(savedInstanceState)
@ -21,11 +19,8 @@ class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferen
.replace(R.id.settings, SettingsFragment()) .replace(R.id.settings, SettingsFragment())
.commit() .commit()
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
}
private fun restartCurrentActivity() { restartMainOnExit = intent.getBooleanExtra("restartMain", false)
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
super.startActivity(intent)
} }
override fun onResume() { override fun onResume() {
@ -42,16 +37,43 @@ class SettingsActivity : AppCompatActivity(), SharedPreferences.OnSharedPreferen
) )
} }
override fun onBackPressed() {
// If a setting (for example language or theme) was changed, the main activity should be
// started without history so that the change is applied to the whole back stack
if (restartMainOnExit) {
val intent = Intent(this, MainActivity::class.java)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
super.startActivity(intent)
} else {
super.onBackPressed()
}
}
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) { override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences, key: String) {
when (key) { when (key) {
"theme" -> setThemeFromPreferences(sharedPreferences, resources) "theme" -> {
setThemeFromPreferences(sharedPreferences, resources)
recreateWithRestartStatus()
}
"language" -> {
recreateWithRestartStatus()
}
} }
restartActivitiesOnExit = true
restartCurrentActivity()
} }
class SettingsFragment : PreferenceFragmentCompat() { /**
* Mark main activity to be changed and recreate the current one
*/
private fun recreateWithRestartStatus() {
intent.flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_NEW_TASK
val savedInstanceState = Bundle().apply {
putBoolean("restartMain", true)
}
intent.putExtras(savedInstanceState)
super.startActivity(intent)
finish()
}
class SettingsFragment : PreferenceFragmentCompat() {
override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) {
setPreferencesFromResource(R.xml.root_preferences, rootKey) setPreferencesFromResource(R.xml.root_preferences, rootKey)
} }

View File

@ -2,14 +2,11 @@ package com.h.pixeldroid.di
import android.app.Application import android.app.Application
import android.content.Context import android.content.Context
import com.h.pixeldroid.* import com.h.pixeldroid.BaseActivity
import com.h.pixeldroid.Pixeldroid
import com.h.pixeldroid.db.AppDatabase import com.h.pixeldroid.db.AppDatabase
import com.h.pixeldroid.fragments.BaseFragment import com.h.pixeldroid.fragments.BaseFragment
import com.h.pixeldroid.fragments.PostFragment
import com.h.pixeldroid.fragments.SearchDiscoverFragment
import com.h.pixeldroid.fragments.feeds.cachedFeeds.notifications.NotificationsFragment
import dagger.Component import dagger.Component
import javax.inject.Singleton import javax.inject.Singleton
@ -17,19 +14,8 @@ import javax.inject.Singleton
@Component(modules = [ApplicationModule::class, DatabaseModule::class, APIModule::class]) @Component(modules = [ApplicationModule::class, DatabaseModule::class, APIModule::class])
interface ApplicationComponent { interface ApplicationComponent {
fun inject(application: Pixeldroid?) fun inject(application: Pixeldroid?)
fun inject(activity: LoginActivity?) fun inject(activity: BaseActivity?)
fun inject(activity: PostActivity?)
fun inject(activity: PostCreationActivity?)
fun inject(activity: ProfileActivity?)
fun inject(mainActivity: MainActivity?)
fun inject(activity: ReportActivity?)
fun inject(fragment: PostFragment)
fun inject(fragment: SearchDiscoverFragment)
fun inject(fragment: NotificationsFragment)
fun inject(feedFragment: BaseFragment) fun inject(feedFragment: BaseFragment)
fun inject(followsActivity: FollowsActivity)
val context: Context? val context: Context?
val application: Application? val application: Application?

View File

@ -43,7 +43,7 @@ import javax.inject.Inject
* This fragment lets you search and use Pixelfed's Discover feature * This fragment lets you search and use Pixelfed's Discover feature
*/ */
class SearchDiscoverFragment : Fragment() { class SearchDiscoverFragment : BaseFragment() {
private lateinit var api: PixelfedAPI private lateinit var api: PixelfedAPI
private lateinit var recycler : RecyclerView private lateinit var recycler : RecyclerView
private lateinit var adapter : DiscoverRecyclerViewAdapter private lateinit var adapter : DiscoverRecyclerViewAdapter
@ -51,14 +51,6 @@ class SearchDiscoverFragment : Fragment() {
private lateinit var discoverProgressBar: ProgressBar private lateinit var discoverProgressBar: ProgressBar
private lateinit var discoverRefreshLayout: SwipeRefreshLayout private lateinit var discoverRefreshLayout: SwipeRefreshLayout
@Inject
lateinit var db: AppDatabase
@Inject
lateinit var apiHolder: PixelfedAPIHolder
override fun onCreateView( override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?, inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle? savedInstanceState: Bundle?
@ -66,9 +58,6 @@ class SearchDiscoverFragment : Fragment() {
val view = inflater.inflate(R.layout.fragment_search, container, false) val view = inflater.inflate(R.layout.fragment_search, container, false)
val search = view.findViewById<SearchView>(R.id.search) val search = view.findViewById<SearchView>(R.id.search)
(requireActivity().application as Pixeldroid).getAppComponent().inject(this)
//Configure the search widget (see https://developer.android.com/guide/topics/search/search-dialog#ConfiguringWidget) //Configure the search widget (see https://developer.android.com/guide/topics/search/search-dialog#ConfiguringWidget)
val searchManager = requireActivity().getSystemService(Context.SEARCH_SERVICE) as SearchManager val searchManager = requireActivity().getSystemService(Context.SEARCH_SERVICE) as SearchManager
search.setSearchableInfo(searchManager.getSearchableInfo(requireActivity().componentName)) search.setSearchableInfo(searchManager.getSearchableInfo(requireActivity().componentName))

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M20,8h-2.81c-0.45,-0.78 -1.07,-1.45 -1.82,-1.96L17,4.41 15.59,3l-2.17,2.17C12.96,5.06 12.49,5 12,5c-0.49,0 -0.96,0.06 -1.41,0.17L8.41,3 7,4.41l1.62,1.63C7.88,6.55 7.26,7.22 6.81,8L4,8v2h2.09c-0.05,0.33 -0.09,0.66 -0.09,1v1L4,12v2h2v1c0,0.34 0.04,0.67 0.09,1L4,16v2h2.81c1.04,1.79 2.97,3 5.19,3s4.15,-1.21 5.19,-3L20,18v-2h-2.09c0.05,-0.33 0.09,-0.66 0.09,-1v-1h2v-2h-2v-1c0,-0.34 -0.04,-0.67 -0.09,-1L20,10L20,8zM14,16h-4v-2h4v2zM14,12h-4v-2h4v2z"
android:fillColor="@color/colorDrawing"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10 10,-4.48 10,-10S17.52,2 12,2zM13,17h-2v-6h2v6zM13,9h-2L11,7h2v2z"
android:fillColor="@color/colorDrawing"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12,3c-4.97,0 -9,4.03 -9,9s4.03,9 9,9c0.83,0 1.5,-0.67 1.5,-1.5 0,-0.39 -0.15,-0.74 -0.39,-1.01 -0.23,-0.26 -0.38,-0.61 -0.38,-0.99 0,-0.83 0.67,-1.5 1.5,-1.5L16,16c2.76,0 5,-2.24 5,-5 0,-4.42 -4.03,-8 -9,-8zM6.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S5.67,9 6.5,9 8,9.67 8,10.5 7.33,12 6.5,12zM9.5,8C8.67,8 8,7.33 8,6.5S8.67,5 9.5,5s1.5,0.67 1.5,1.5S10.33,8 9.5,8zM14.5,8c-0.83,0 -1.5,-0.67 -1.5,-1.5S13.67,5 14.5,5s1.5,0.67 1.5,1.5S15.33,8 14.5,8zM17.5,12c-0.83,0 -1.5,-0.67 -1.5,-1.5S16.67,9 17.5,9s1.5,0.67 1.5,1.5 -0.67,1.5 -1.5,1.5z"
android:fillColor="@color/colorDrawing"/>
</vector>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:pathData="M12.87,15.07l-2.54,-2.51 0.03,-0.03c1.74,-1.94 2.98,-4.17 3.71,-6.53L17,6L17,4h-7L10,2L8,2v2L1,4v1.99h11.17C11.5,7.92 10.44,9.75 9,11.35 8.07,10.32 7.3,9.19 6.69,8h-2c0.73,1.63 1.73,3.17 2.98,4.56l-5.09,5.02L4,19l5,-5 3.11,3.11 0.76,-2.04zM18.5,10h-2L12,22h2l1.12,-3h4.75L21,22h2l-4.5,-12zM15.88,17l1.62,-4.33L19.12,17h-3.24z"
android:fillColor="@color/colorDrawing"/>
</vector>

View File

@ -11,6 +11,7 @@
tools:context=".AboutActivity"> tools:context=".AboutActivity">
<ImageView <ImageView
android:importantForAccessibility="no"
android:id="@+id/imageView" android:id="@+id/imageView"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -61,11 +62,64 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="16dp" android:layout_marginTop="16dp"
android:autoLink="web" android:autoLink="web"
android:textAlignment="center"
android:text="@string/project_website" android:text="@string/project_website"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/aboutAppDescription" /> app:layout_constraintTop_toBottomOf="@+id/aboutAppDescription" />
<TextView
android:id="@+id/contributeTranslationsText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:autoLink="web"
android:drawablePadding="6dp"
android:textAlignment="center"
android:text="@string/help_translate"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/aboutWebsite"
app:drawableLeftCompat="@drawable/translate_black_24dp" />
<TextView
android:id="@+id/contributeTranslationsUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="web"
android:textAlignment="center"
android:text="https://weblate.pixeldroid.org"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/contributeTranslationsText"
tools:ignore="HardcodedText" />
<TextView
android:id="@+id/contributeForgeText"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="16dp"
android:autoLink="web"
android:drawablePadding="6dp"
android:textAlignment="center"
android:text="@string/issues_contribute"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/contributeTranslationsUrl"
app:drawableLeftCompat="@drawable/bug_report_black_24dp" />
<TextView
android:id="@+id/contributeForgeUrl"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:autoLink="web"
android:textAlignment="center"
android:text="https://gitlab.shinice.net/pixeldroid/PixelDroid"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/contributeForgeText"
tools:ignore="HardcodedText" />
<Button <Button
android:id="@+id/licensesButton" android:id="@+id/licensesButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -74,7 +128,8 @@
android:text="@string/dependencies_licenses" android:text="@string/dependencies_licenses"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/aboutWebsite" /> app:layout_constraintTop_toBottomOf="@+id/contributeForgeUrl" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView> </ScrollView>

View File

@ -47,7 +47,7 @@
<string name="dark_theme">داكن</string> <string name="dark_theme">داكن</string>
<string name="light_theme">فاتح</string> <string name="light_theme">فاتح</string>
<string name="save_image_success">تم حفظ الصورة بنجاح</string> <string name="save_image_success">تم حفظ الصورة بنجاح</string>
<string name="default_theme">افتراضي (يتبع النظام)</string> <string name="default_system">افتراضي (يتبع النظام)</string>
<string name="description_max_characters">يجب أن يحتوي الوصف على %1$s حرفًا على الأكثر.</string> <string name="description_max_characters">يجب أن يحتوي الوصف على %1$s حرفًا على الأكثر.</string>
<string name="upload_post_success">تم تحميل المنشور بنجاح</string> <string name="upload_post_success">تم تحميل المنشور بنجاح</string>
<string name="upload_post_failed">فشل في تحميل المنشور</string> <string name="upload_post_failed">فشل في تحميل المنشور</string>

View File

@ -93,7 +93,7 @@
<string name="permission_denied">Permís denegat</string> <string name="permission_denied">Permís denegat</string>
<string name="dark_theme">Fosc</string> <string name="dark_theme">Fosc</string>
<string name="light_theme">Clar</string> <string name="light_theme">Clar</string>
<string name="default_theme">Per defecte (seguint el sistema)</string> <string name="default_system">Per defecte (seguint el sistema)</string>
<string name="media_upload_completed">{gmd_cloud_done} S\'ha completat l\'enviament multimèdia</string> <string name="media_upload_completed">{gmd_cloud_done} S\'ha completat l\'enviament multimèdia</string>
<string name="media_upload_failed">{gmd_cloud_off} L\'enviament multimèdia ha fallat, torna-ho a provar o comprova les condicions de la xarxa</string> <string name="media_upload_failed">{gmd_cloud_off} L\'enviament multimèdia ha fallat, torna-ho a provar o comprova les condicions de la xarxa</string>
<string name="posting_image_accessibility_hint">Imatge que s\'està publicant</string> <string name="posting_image_accessibility_hint">Imatge que s\'està publicant</string>

View File

@ -41,7 +41,7 @@
<string name="registration_failed">Konnte die App nicht mit diesem Server verbinden</string> <string name="registration_failed">Konnte die App nicht mit diesem Server verbinden</string>
<string name="instance_error">Konnte die Informationen der Instanz nicht abrufen</string> <string name="instance_error">Konnte die Informationen der Instanz nicht abrufen</string>
<string name="upload_picture_failed">Fehler beim Hochladen!</string> <string name="upload_picture_failed">Fehler beim Hochladen!</string>
<string name="default_theme">Standard (Systemeinstellung)</string> <string name="default_system">Standard (Systemeinstellung)</string>
<string name="permission_denied">Berechtigung verweigert</string> <string name="permission_denied">Berechtigung verweigert</string>
<string name="save_image_failed">Bild kann nicht gespeichert werden</string> <string name="save_image_failed">Bild kann nicht gespeichert werden</string>
<string name="description_max_characters">Die Beschreibung darf höchstens %1$s Zeichen enthalten.</string> <string name="description_max_characters">Die Beschreibung darf höchstens %1$s Zeichen enthalten.</string>

View File

@ -97,7 +97,7 @@
<string name="permission_denied">Permiso denegado</string> <string name="permission_denied">Permiso denegado</string>
<string name="dark_theme">Oscuro</string> <string name="dark_theme">Oscuro</string>
<string name="light_theme">Claro</string> <string name="light_theme">Claro</string>
<string name="default_theme">Por defecto (Sistema)</string> <string name="default_system">Por defecto (Sistema)</string>
<string name="crop_result_error">No se pudo recuperar la imagen después del recorte</string> <string name="crop_result_error">No se pudo recuperar la imagen después del recorte</string>
<string name="busy_dialog_ok_button">Bien, espera.</string> <string name="busy_dialog_ok_button">Bien, espera.</string>
<string name="busy_dialog_text">Procesando imagen, ¡Espera a que termine!</string> <string name="busy_dialog_text">Procesando imagen, ¡Espera a que termine!</string>

View File

@ -59,7 +59,7 @@
<string name="save_image_failed">Ezinezkoa irudia gordetzea</string> <string name="save_image_failed">Ezinezkoa irudia gordetzea</string>
<string name="dark_theme">Iluna</string> <string name="dark_theme">Iluna</string>
<string name="light_theme">Argia</string> <string name="light_theme">Argia</string>
<string name="default_theme">Lehenetsia (Sistemaren lehentsia)</string> <string name="default_system">Lehenetsia (Sistemaren lehentsia)</string>
<string name="no_description">Deskribapenik ez</string> <string name="no_description">Deskribapenik ez</string>
<string name="description_max_characters">Deskribapenak %1$s karaktere izan behar ditu gehienez.</string> <string name="description_max_characters">Deskribapenak %1$s karaktere izan behar ditu gehienez.</string>
<string name="save_image_success">Irudia behar bezala gorde da</string> <string name="save_image_success">Irudia behar bezala gorde da</string>

View File

@ -45,7 +45,7 @@
<string name="permission_denied">ممنوعیت دسترسی</string> <string name="permission_denied">ممنوعیت دسترسی</string>
<string name="save_image_failed">نتوانستیم تصویر را ذخیره کنیم</string> <string name="save_image_failed">نتوانستیم تصویر را ذخیره کنیم</string>
<string name="description_max_characters">توضیحات حداکثر می‌توانند تا %1$s حرف داشته باشند.</string> <string name="description_max_characters">توضیحات حداکثر می‌توانند تا %1$s حرف داشته باشند.</string>
<string name="default_theme">پیش‌گزیده (پیروی از سامانه)</string> <string name="default_system">پیش‌گزیده (پیروی از سامانه)</string>
<string name="light_theme">روشن</string> <string name="light_theme">روشن</string>
<string name="dark_theme">تاریک</string> <string name="dark_theme">تاریک</string>
<string name="upload_post_error">بارگذاری مطلب ناموفق بود</string> <string name="upload_post_error">بارگذاری مطلب ناموفق بود</string>

View File

@ -51,7 +51,7 @@
<string name="permission_denied">Permission refusée</string> <string name="permission_denied">Permission refusée</string>
<string name="dark_theme">Sombre</string> <string name="dark_theme">Sombre</string>
<string name="light_theme">Clair</string> <string name="light_theme">Clair</string>
<string name="default_theme">Par défaut (selon votre système)</string> <string name="default_system">Par défaut (selon votre système)</string>
<string name="upload_post_failed">Échec du téléversement de la publication</string> <string name="upload_post_failed">Échec du téléversement de la publication</string>
<string name="upload_post_success">Téléversement de la publication avec succès</string> <string name="upload_post_success">Téléversement de la publication avec succès</string>
<string name="posted_on">Publié le %1$s</string> <string name="posted_on">Publié le %1$s</string>

View File

@ -93,7 +93,7 @@
<string name="permission_denied">Permiso denegado</string> <string name="permission_denied">Permiso denegado</string>
<string name="dark_theme">Escuro</string> <string name="dark_theme">Escuro</string>
<string name="light_theme">Claro</string> <string name="light_theme">Claro</string>
<string name="default_theme">Por omisión (do sistema)</string> <string name="default_system">Por omisión (do sistema)</string>
<string name="media_upload_failed">{gmd_cloud_off} Fallou a subida do ficheiro, inténtao outra vez e comproba a conexión</string> <string name="media_upload_failed">{gmd_cloud_off} Fallou a subida do ficheiro, inténtao outra vez e comproba a conexión</string>
<string name="posting_image_accessibility_hint">Imaxe que se publicou</string> <string name="posting_image_accessibility_hint">Imaxe que se publicou</string>
<string name="media_upload_completed">{gmd_cloud_done} Subida do ficheiro completada</string> <string name="media_upload_completed">{gmd_cloud_done} Subida do ficheiro completada</string>

View File

@ -97,7 +97,7 @@
<string name="media_upload_failed">{gmd_cloud_off} Caricamento dei contenuti non riuscito, riprovare o verificare le condizioni della rete</string> <string name="media_upload_failed">{gmd_cloud_off} Caricamento dei contenuti non riuscito, riprovare o verificare le condizioni della rete</string>
<string name="follow_button_failed">Impossibile visualizzare il tasto segui</string> <string name="follow_button_failed">Impossibile visualizzare il tasto segui</string>
<string name="follow_status_failed">Impossibile ottenere lo stato segui</string> <string name="follow_status_failed">Impossibile ottenere lo stato segui</string>
<string name="default_theme">Predefinito (Segue il sistema)</string> <string name="default_system">Predefinito (Segue il sistema)</string>
<string name="crop_result_error">Impossibile recuperare l\'immagine dopo il ritaglio</string> <string name="crop_result_error">Impossibile recuperare l\'immagine dopo il ritaglio</string>
<string name="busy_dialog_ok_button">Ok, aspetta.</string> <string name="busy_dialog_ok_button">Ok, aspetta.</string>
<string name="busy_dialog_text">Elaborando ancora l\'immagine, attendi che finisca prima!</string> <string name="busy_dialog_text">Elaborando ancora l\'immagine, attendi che finisca prima!</string>

View File

@ -97,7 +97,7 @@
<string name="permission_denied">権限がありません</string> <string name="permission_denied">権限がありません</string>
<string name="dark_theme">ダーク</string> <string name="dark_theme">ダーク</string>
<string name="light_theme">ライト</string> <string name="light_theme">ライト</string>
<string name="default_theme">デフォルト(システム設定)</string> <string name="default_system">デフォルト(システム設定)</string>
<string name="busy_dialog_ok_button">お待ちください。</string> <string name="busy_dialog_ok_button">お待ちください。</string>
<string name="busy_dialog_text">画像を処理しています。しばらくお待ちください。</string> <string name="busy_dialog_text">画像を処理しています。しばらくお待ちください。</string>
<string name="nothing_to_see_here">ここには何もありません!</string> <string name="nothing_to_see_here">ここには何もありません!</string>

View File

@ -74,7 +74,7 @@
<string name="upload_post_failed">Kon post niet uploaden</string> <string name="upload_post_failed">Kon post niet uploaden</string>
<string name="save_image_failed">Kon afbeelding niet opslaan</string> <string name="save_image_failed">Kon afbeelding niet opslaan</string>
<string name="permission_denied">Toestemming geweigerd</string> <string name="permission_denied">Toestemming geweigerd</string>
<string name="default_theme">Standaard (systeem instelling)</string> <string name="default_system">Standaard (systeem instelling)</string>
<string name="instance_error">Kon instance-informatie niet ophalen</string> <string name="instance_error">Kon instance-informatie niet ophalen</string>
<string name="likes">%1$s Vind-ik-leuks</string> <string name="likes">%1$s Vind-ik-leuks</string>
<string name="request_format_error">Fout bij het uploaden: slecht verzoekformaat</string> <string name="request_format_error">Fout bij het uploaden: slecht verzoekformaat</string>

View File

@ -58,7 +58,7 @@
<string name="registration_failed">Nie udało się zarejestrować aplikacji na tym serwerze</string> <string name="registration_failed">Nie udało się zarejestrować aplikacji na tym serwerze</string>
<string name="instance_error">Nie udało się pobrać informacji o instancji</string> <string name="instance_error">Nie udało się pobrać informacji o instancji</string>
<string name="instance_not_pixelfed_warning">To chyba nie jest instancja Pixelfed. Aplikacja może zachowywać się nieprzewidywalnie.</string> <string name="instance_not_pixelfed_warning">To chyba nie jest instancja Pixelfed. Aplikacja może zachowywać się nieprzewidywalnie.</string>
<string name="default_theme">Systemowy</string> <string name="default_system">Systemowy</string>
<string name="followed_notification">%1$s obserwujących</string> <string name="followed_notification">%1$s obserwujących</string>
<string name="liked_notification">%1$s polubień</string> <string name="liked_notification">%1$s polubień</string>
<string name="whats_an_instance">Co to jest instancja\?</string> <string name="whats_an_instance">Co to jest instancja\?</string>

View File

@ -74,7 +74,7 @@
<string name="permission_denied">Недостаточно прав</string> <string name="permission_denied">Недостаточно прав</string>
<string name="dark_theme">Тёмная</string> <string name="dark_theme">Тёмная</string>
<string name="light_theme">Светлая</string> <string name="light_theme">Светлая</string>
<string name="default_theme">По умолчанию (как в системе)</string> <string name="default_system">По умолчанию (как в системе)</string>
<string name="follow_status_failed">Не удалось получить статус подписки</string> <string name="follow_status_failed">Не удалось получить статус подписки</string>
<string name="follow_error">Не удалось подписаться</string> <string name="follow_error">Не удалось подписаться</string>
<string name="action_not_allowed">Это действие запрещено</string> <string name="action_not_allowed">Это действие запрещено</string>

View File

@ -97,7 +97,7 @@
<string name="permission_denied">Åtkomst nekas</string> <string name="permission_denied">Åtkomst nekas</string>
<string name="dark_theme">Mörkt</string> <string name="dark_theme">Mörkt</string>
<string name="light_theme">Ljust</string> <string name="light_theme">Ljust</string>
<string name="default_theme">Standard (Följer systemet)</string> <string name="default_system">Standard (Följer systemet)</string>
<string name="nothing_to_see_here">Det finns inget här!</string> <string name="nothing_to_see_here">Det finns inget här!</string>
<string name="crop_result_error">Kunde inte hämta bilden efter beskärning</string> <string name="crop_result_error">Kunde inte hämta bilden efter beskärning</string>
<string name="busy_dialog_ok_button">OK, vänta på det.</string> <string name="busy_dialog_ok_button">OK, vänta på det.</string>

View File

@ -95,7 +95,7 @@
<string name="save_image_success">图片成功保存</string> <string name="save_image_success">图片成功保存</string>
<string name="save_image_failed">无法保存图像</string> <string name="save_image_failed">无法保存图像</string>
<string name="permission_denied">没有权限</string> <string name="permission_denied">没有权限</string>
<string name="default_theme">默认(跟随系统设置)</string> <string name="default_system">默认(跟随系统设置)</string>
<string name="light_theme">浅色</string> <string name="light_theme">浅色</string>
<string name="dark_theme">深色</string> <string name="dark_theme">深色</string>
<string name="nothing_to_see_here">这里什么也没有!</string> <string name="nothing_to_see_here">这里什么也没有!</string>

View File

@ -6,8 +6,53 @@
</string-array> </string-array>
<string-array name="theme_entries"> <string-array name="theme_entries">
<item>@string/default_theme</item> <item>@string/default_system</item>
<item>@string/light_theme</item> <item>@string/light_theme</item>
<item>@string/dark_theme</item> <item>@string/dark_theme</item>
</string-array> </string-array>
<string-array name="languages_entries">
<item>@string/default_system</item>
<item>العربية</item>
<item>বাংলা (বাংলাদেশ)</item>
<item>Català</item>
<item>Deutsch</item>
<item>Esperanto</item>
<item>Euskara</item>
<item>فارسی</item>
<item>Français</item>
<item>Gaeilge</item>
<item>Italiano</item>
<item>日本語</item>
<item>Nederlands</item>
<item>Polski</item>
<item>Português (Brasil)</item>
<item>Русский</item>
<item>Svenska</item>
<item>Українська</item>
<item>中文(简体)</item>
</string-array>
<string-array name="languages_values">
<item>default</item>
<item>ar</item>
<item>bn-bd</item>
<item>ca</item>
<item>de</item>
<item>es</item>
<item>eu</item>
<item>fa</item>
<item>fr</item>
<item>gl</item>
<item>it</item>
<item>ja</item>
<item>nl</item>
<item>pl</item>
<item>pt-br</item>
<item>ru</item>
<item>sv</item>
<item>uk</item>
<item>zh-CN</item>
</string-array>
</resources> </resources>

View File

@ -16,7 +16,7 @@
<!-- Theme Preferences --> <!-- Theme Preferences -->
<string name="theme_title">Application Theme</string> <string name="theme_title">Application Theme</string>
<string name="theme_header">Theme</string> <string name="theme_header">Theme</string>
<string name="default_theme">Default (Follows system)</string> <string name="default_system">Default (Follows system)</string>
<string name="light_theme">Light</string> <string name="light_theme">Light</string>
<string name="dark_theme">Dark</string> <string name="dark_theme">Dark</string>
<string name="followed_notification">%1$s followed you</string> <string name="followed_notification">%1$s followed you</string>
@ -143,6 +143,9 @@
<string name="OK">OK</string> <string name="OK">OK</string>
<string name="delete_dialog">Delete this post?</string> <string name="delete_dialog">Delete this post?</string>
<string name="cancel">Cancel</string> <string name="cancel">Cancel</string>
<string name="language">Language</string>
<string name="help_translate">Help translate PixelDroid to your language:</string>
<string name="issues_contribute">Report issues or contribute to the application:</string>
</resources> </resources>

View File

@ -8,12 +8,23 @@
app:entryValues="@array/theme_values" app:entryValues="@array/theme_values"
app:key="theme" app:key="theme"
app:title="@string/theme_title" app:title="@string/theme_title"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true"
app:icon="@drawable/palette_black_24dp"/>
</PreferenceCategory> </PreferenceCategory>
<ListPreference
app:defaultValue="default"
app:entries="@array/languages_entries"
app:entryValues="@array/languages_values"
app:key="language"
app:title="@string/language"
app:useSimpleSummaryProvider="true"
app:icon="@drawable/translate_black_24dp" />
<Preference android:title="@string/about" <Preference android:title="@string/about"
android:key="about" android:key="about"
android:summary="@string/about_pixeldroid"> android:summary="@string/about_pixeldroid"
app:icon="@drawable/info_black_24dp">
<intent <intent
android:targetPackage="com.h.pixeldroid" android:targetPackage="com.h.pixeldroid"
android:targetClass="com.h.pixeldroid.AboutActivity"/> android:targetClass="com.h.pixeldroid.AboutActivity"/>