Compare commits

...

13 Commits

Author SHA1 Message Date
bb75ebf635 Merge branch 'master' of github.com:aminecmi/ReaderforSelfoss 2018-10-07 22:30:30 +02:00
7d7d0014be Fixes #83. The issue wasn't selfoss related at all... 2018-10-07 22:30:07 +02:00
b3f8d44794 New Crowdin translations (#224)
* New translations strings.xml (Korean)

* New translations strings.xml (Korean)

* New translations strings.xml (Korean)
2018-10-03 14:35:03 +02:00
29d1e38340 Fixes #223. Fixes internal reader issue on 4.2.2 2018-09-30 09:37:22 +02:00
2be872e61e Fixed version update. 2018-09-25 20:56:25 +02:00
377c5518f7 Minimal versions updates. 2018-09-25 20:47:38 +02:00
21be7357b5 Revert "Updated to androidx."
This reverts commit d47ba2c820.
2018-09-25 20:27:27 +02:00
d47ba2c820 Updated to androidx. 2018-09-25 20:08:51 +02:00
a64b14614a New Crowdin translations (#222)
* New translations strings.xml (Italian)

* New translations strings.xml (Italian)

* New translations strings.xml (Italian)
2018-09-24 08:06:00 +02:00
6a88192e77 Fixes #221 2018-09-21 21:39:37 +02:00
aa7c630818 erge branch 'master' of github.com:aminecmi/ReaderforSelfoss 2018-09-15 16:26:22 +02:00
7fb54f14c7 Fixed bug 2018-09-15 16:24:29 +02:00
3d709c02b7 New Crowdin translations (#219)
* New translations strings.xml (French)

* New translations strings.xml (French)

* New translations strings.xml (Spanish)

* New translations strings.xml (Galician)
2018-09-12 13:16:07 +02:00
10 changed files with 261 additions and 245 deletions

View File

@ -133,7 +133,7 @@ dependencies {
implementation 'com.github.stkent:amplify:2.1.0' implementation 'com.github.stkent:amplify:2.1.0'
// Drawer // Drawer
implementation 'co.zsmb:materialdrawer-kt:1.3.5' implementation 'co.zsmb:materialdrawer-kt:1.3.7'
implementation 'com.anupcowkur:reservoir:3.1.0' implementation 'com.anupcowkur:reservoir:3.1.0'
// Themes // Themes

View File

@ -114,7 +114,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
private lateinit var appColors: AppColors private lateinit var appColors: AppColors
private var offset: Int = 0 private var offset: Int = 0
private var firstVisible: Int = 0 private var firstVisible: Int = 0
private var recyclerViewScrollListener: RecyclerView.OnScrollListener? = null private lateinit var recyclerViewScrollListener: RecyclerView.OnScrollListener
private lateinit var settings: SharedPreferences private lateinit var settings: SharedPreferences
private var recyclerAdapter: RecyclerView.Adapter<*>? = null private var recyclerAdapter: RecyclerView.Adapter<*>? = null
@ -209,8 +209,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
) { ) {
override fun getSwipeDirs( override fun getSwipeDirs(
recyclerView: RecyclerView?, recyclerView: RecyclerView,
viewHolder: RecyclerView.ViewHolder? viewHolder: RecyclerView.ViewHolder
): Int = ): Int =
if (elementsShown != UNREAD_SHOWN) { if (elementsShown != UNREAD_SHOWN) {
0 0
@ -805,22 +805,20 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
} }
private fun handleInfiniteScroll() { private fun handleInfiniteScroll() {
if (recyclerViewScrollListener == null) { recyclerViewScrollListener = object : RecyclerView.OnScrollListener() {
recyclerViewScrollListener = object : RecyclerView.OnScrollListener() { override fun onScrolled(localRecycler: RecyclerView, dx: Int, dy: Int) {
override fun onScrolled(localRecycler: RecyclerView?, dx: Int, dy: Int) { if (localRecycler != null && dy > 0) {
if (localRecycler != null && dy > 0) { val manager = recyclerView.layoutManager
val manager = recyclerView.layoutManager val lastVisibleItem: Int = when (manager) {
val lastVisibleItem: Int = when (manager) { is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions(
is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions( null
null ).last()
).last() is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition()
is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition() else -> 0
else -> 0 }
}
if (lastVisibleItem == (items.size - 1) && items.size < maxItemNumber()) { if (lastVisibleItem == (items.size - 1) && items.size < maxItemNumber()) {
getElementsAccordingToTab(appendResults = true) getElementsAccordingToTab(appendResults = true)
}
} }
} }
} }

View File

@ -3,9 +3,11 @@ package apps.amine.bou.readerforselfoss
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.preference.PreferenceManager
import android.support.v4.app.FragmentManager import android.support.v4.app.FragmentManager
import android.support.v4.app.FragmentStatePagerAdapter import android.support.v4.app.FragmentStatePagerAdapter
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v4.view.ViewPager
import android.support.v7.app.AppCompatActivity import android.support.v7.app.AppCompatActivity
import android.view.Menu import android.view.Menu
import android.view.MenuItem import android.view.MenuItem
@ -18,10 +20,13 @@ import apps.amine.bou.readerforselfoss.fragments.ArticleFragment
import apps.amine.bou.readerforselfoss.themes.AppColors import apps.amine.bou.readerforselfoss.themes.AppColors
import apps.amine.bou.readerforselfoss.themes.Toppings import apps.amine.bou.readerforselfoss.themes.Toppings
import apps.amine.bou.readerforselfoss.transformers.DepthPageTransformer import apps.amine.bou.readerforselfoss.transformers.DepthPageTransformer
import apps.amine.bou.readerforselfoss.utils.maybeHandleSilentException
import apps.amine.bou.readerforselfoss.utils.succeeded
import apps.amine.bou.readerforselfoss.utils.toggleStar import apps.amine.bou.readerforselfoss.utils.toggleStar
import com.ftinc.scoop.Scoop import com.ftinc.scoop.Scoop
import kotlinx.android.synthetic.main.activity_reader.* import kotlinx.android.synthetic.main.activity_reader.*
import me.relex.circleindicator.CircleIndicator import me.relex.circleindicator.CircleIndicator
import org.acra.ACRA
import retrofit2.Call import retrofit2.Call
import retrofit2.Callback import retrofit2.Callback
import retrofit2.Response import retrofit2.Response
@ -29,7 +34,9 @@ import retrofit2.Response
class ReaderActivity : AppCompatActivity() { class ReaderActivity : AppCompatActivity() {
private var markOnScroll: Boolean = false private var markOnScroll: Boolean = false
private var debugReadingItems: Boolean = false
private var currentItem: Int = 0 private var currentItem: Int = 0
private lateinit var userIdentifier: String
private lateinit var api: SelfossApi private lateinit var api: SelfossApi
@ -63,6 +70,18 @@ class ReaderActivity : AppCompatActivity() {
supportActionBar?.setDisplayHomeAsUpEnabled(true) supportActionBar?.setDisplayHomeAsUpEnabled(true)
supportActionBar?.setDisplayShowHomeEnabled(true) supportActionBar?.setDisplayShowHomeEnabled(true)
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
debugReadingItems = prefs.getBoolean("read_debug", false)
userIdentifier = prefs.getString("unique_id", "")
markOnScroll = prefs.getBoolean("mark_on_scroll", false)
api = SelfossApi(
this,
this@ReaderActivity,
prefs.getBoolean("isSelfSignedCert", false),
prefs.getBoolean("should_log_everything", false)
)
if (allItems.isEmpty()) { if (allItems.isEmpty()) {
finish() finish()
@ -70,6 +89,8 @@ class ReaderActivity : AppCompatActivity() {
currentItem = intent.getIntExtra("currentItem", 0) currentItem = intent.getIntExtra("currentItem", 0)
readItem(allItems[currentItem].id)
pager.adapter = ScreenSlidePagerAdapter(supportFragmentManager, AppColors(this@ReaderActivity)) pager.adapter = ScreenSlidePagerAdapter(supportFragmentManager, AppColors(this@ReaderActivity))
pager.currentItem = currentItem pager.currentItem = currentItem
} }
@ -77,10 +98,64 @@ class ReaderActivity : AppCompatActivity() {
override fun onResume() { override fun onResume() {
super.onResume() super.onResume()
(pager.adapter as ScreenSlidePagerAdapter).notifyDataSetChanged() notifyAdapter()
pager.setPageTransformer(true, DepthPageTransformer()) pager.setPageTransformer(true, DepthPageTransformer())
(indicator as CircleIndicator).setViewPager(pager) (indicator as CircleIndicator).setViewPager(pager)
pager.addOnPageChangeListener(
object : ViewPager.SimpleOnPageChangeListener() {
override fun onPageSelected(position: Int) {
if (allItems[position].starred) {
canRemoveFromFavorite()
} else {
canFavorite()
}
readItem(allItems[pager.currentItem].id)
}
}
)
}
fun readItem(id: String) {
if (markOnScroll) {
api.markItem(id).enqueue(
object : Callback<SuccessResponse> {
override fun onResponse(
call: Call<SuccessResponse>,
response: Response<SuccessResponse>
) {
if (!response.succeeded() && debugReadingItems) {
val message =
"message: ${response.message()} " +
"response isSuccess: ${response.isSuccessful} " +
"response code: ${response.code()} " +
"response message: ${response.message()} " +
"response errorBody: ${response.errorBody()?.string()} " +
"body success: ${response.body()?.success} " +
"body isSuccess: ${response.body()?.isSuccess}"
ACRA.getErrorReporter()
.maybeHandleSilentException(Exception(message), this@ReaderActivity)
}
}
override fun onFailure(
call: Call<SuccessResponse>,
t: Throwable
) {
if (debugReadingItems) {
ACRA.getErrorReporter().maybeHandleSilentException(t, this@ReaderActivity)
}
}
}
)
}
}
private fun notifyAdapter() {
(pager.adapter as ScreenSlidePagerAdapter).notifyDataSetChanged()
} }
override fun onPause() { override fun onPause() {
@ -142,6 +217,7 @@ class ReaderActivity : AppCompatActivity() {
response: Response<SuccessResponse> response: Response<SuccessResponse>
) { ) {
allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar() allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
notifyAdapter()
canRemoveFromFavorite() canRemoveFromFavorite()
} }
@ -165,6 +241,7 @@ class ReaderActivity : AppCompatActivity() {
response: Response<SuccessResponse> response: Response<SuccessResponse>
) { ) {
allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar() allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
notifyAdapter()
canFavorite() canFavorite()
} }

View File

@ -1,11 +1,9 @@
package apps.amine.bou.readerforselfoss.fragments package apps.amine.bou.readerforselfoss.fragments
import android.content.Context import android.content.Context
import android.content.Intent
import android.content.SharedPreferences import android.content.SharedPreferences
import android.content.res.ColorStateList import android.content.res.ColorStateList
import android.graphics.drawable.ColorDrawable import android.graphics.drawable.ColorDrawable
import android.net.Uri
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.preference.PreferenceManager import android.preference.PreferenceManager
@ -14,7 +12,6 @@ import android.support.design.widget.FloatingActionButton
import android.support.v4.app.Fragment import android.support.v4.app.Fragment
import android.support.v4.content.ContextCompat import android.support.v4.content.ContextCompat
import android.support.v4.widget.NestedScrollView import android.support.v4.widget.NestedScrollView
import android.support.v7.app.AlertDialog
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.MenuItem import android.view.MenuItem
import android.view.View import android.view.View
@ -58,7 +55,6 @@ class ArticleFragment : Fragment() {
private lateinit var contentSource: String private lateinit var contentSource: String
private lateinit var contentImage: String private lateinit var contentImage: String
private lateinit var contentTitle: String private lateinit var contentTitle: String
private var showMalformedUrl: Boolean = false
private lateinit var editor: SharedPreferences.Editor private lateinit var editor: SharedPreferences.Editor
private lateinit var fab: FloatingActionButton private lateinit var fab: FloatingActionButton
private lateinit var appColors: AppColors private lateinit var appColors: AppColors
@ -97,11 +93,9 @@ class ArticleFragment : Fragment() {
val prefs = PreferenceManager.getDefaultSharedPreferences(activity) val prefs = PreferenceManager.getDefaultSharedPreferences(activity)
editor = prefs.edit() editor = prefs.edit()
fontSize = prefs.getString("reader_font_size", "14").toInt() fontSize = prefs.getString("reader_font_size", "14").toInt()
showMalformedUrl = prefs.getBoolean("show_error_malformed_url", true)
val settings = activity!!.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE) val settings = activity!!.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
val debugReadingItems = prefs.getBoolean("read_debug", false) val debugReadingItems = prefs.getBoolean("read_debug", false)
val markOnScroll = prefs.getBoolean("mark_on_scroll", false)
val api = SelfossApi( val api = SelfossApi(
context!!, context!!,
@ -211,38 +205,6 @@ class ArticleFragment : Fragment() {
} }
) )
if (markOnScroll) {
api.markItem(allItems[pageNumber.toInt()].id).enqueue(
object : Callback<SuccessResponse> {
override fun onResponse(
call: Call<SuccessResponse>,
response: Response<SuccessResponse>
) {
if (!response.succeeded() && debugReadingItems) {
val message =
"message: ${response.message()} " +
"response isSuccess: ${response.isSuccessful} " +
"response code: ${response.code()} " +
"response message: ${response.message()} " +
"response errorBody: ${response.errorBody()?.string()} " +
"body success: ${response.body()?.success} " +
"body isSuccess: ${response.body()?.isSuccess}"
ACRA.getErrorReporter().maybeHandleSilentException(Exception(message), activity!!)
}
}
override fun onFailure(
call: Call<SuccessResponse>,
t: Throwable
) {
if (debugReadingItems) {
ACRA.getErrorReporter().maybeHandleSilentException(t, activity!!)
}
}
}
)
}
return rootView return rootView
} }
@ -266,7 +228,13 @@ class ArticleFragment : Fragment() {
if (response.body() != null && response.body()!!.content != null && !response.body()!!.content.isNullOrEmpty()) { if (response.body() != null && response.body()!!.content != null && !response.body()!!.content.isNullOrEmpty()) {
try { try {
rootView.titleView.text = response.body()!!.title rootView.titleView.text = response.body()!!.title
url = response.body()!!.url try {
// Note: Mercury may return relative urls... If it does the url val will not be changed.
URL(response.body()!!.url)
url = response.body()!!.url
} catch (e: MalformedURLException) {
ACRA.getErrorReporter().maybeHandleSilentException(e, activity!!)
}
} catch (e: Exception) { } catch (e: Exception) {
if (context != null) { if (context != null) {
ACRA.getErrorReporter().maybeHandleSilentException(e, context!!) ACRA.getErrorReporter().maybeHandleSilentException(e, context!!)
@ -395,73 +363,46 @@ class ArticleFragment : Fragment() {
val itemUrl = URL(url) val itemUrl = URL(url)
baseUrl = itemUrl.protocol + "://" + itemUrl.host baseUrl = itemUrl.protocol + "://" + itemUrl.host
} catch (e: MalformedURLException) { } catch (e: MalformedURLException) {
if (showMalformedUrl && context != null) { ACRA.getErrorReporter().maybeHandleSilentException(e, activity!!)
val alertDialog = AlertDialog.Builder(context!!).create()
alertDialog.setTitle("Error")
alertDialog.setMessage("You are encountering a bug that I can't solve. Can you please contact me to solve the issue, please ?")
alertDialog.setButton(
AlertDialog.BUTTON_POSITIVE,
"Send mail"
) { dialog, _ ->
// This won't be translated because it should only be temporary.
val to = Config.feedbackEmail
val subject= "[ReaderForSelfoss MalformedURLException]"
val body= "Please specify the source, item and spout you are using for the url below : \n ${e.message}"
val mailTo = "mailto:" + to + "?&subject=" + Uri.encode(subject) + "&body=" + Uri.encode(body)
val emailIntent = Intent(Intent.ACTION_VIEW)
emailIntent.data = Uri.parse(mailTo)
startActivity(emailIntent)
dialog.dismiss()
}
alertDialog.setButton(
AlertDialog.BUTTON_NEUTRAL,
"Not now"
) { dialog, _ -> dialog.dismiss() }
alertDialog.setButton(
AlertDialog.BUTTON_NEGATIVE,
"Don't show anymore."
) { dialog, _ ->
editor.putBoolean("show_error_malformed_url", false)
editor.apply()
dialog.dismiss()
}
alertDialog.show()
}
} }
rootView.webcontent.loadDataWithBaseURL( rootView.webcontent.loadDataWithBaseURL(
baseUrl, baseUrl,
"""<style> """<html>
|img { |<head>
| display: inline-block; | <style>
| height: auto; | img {
| width: 100%; | display: inline-block;
| max-width: 100%; | height: auto;
|} | width: 100%;
|a { | max-width: 100%;
| color: $stringColor !important; | }
|} | a {
|*:not(a) { | color: $stringColor !important;
| color: $stringTextColor; | }
|} | *:not(a) {
|* { | color: $stringTextColor;
| font-size: ${fontSize.toPx}px; | }
| text-align: justify; | * {
| word-break: break-word; | font-size: ${fontSize.toPx}px;
| overflow:hidden; | text-align: justify;
|} | word-break: break-word;
|a, pre, code { | overflow:hidden;
| text-align: left; | }
|} | a, pre, code {
|pre, code { | text-align: left;
| white-space: pre-wrap; | }
| width:100%; | pre, code {
| background-color: $stringBackgroundColor; | white-space: pre-wrap;
|}</style>$c""".trimMargin(), | width:100%;
"text/html; charset=utf-8", | background-color: $stringBackgroundColor;
| }
| </style>
|</head>
|<body>
| $c
|</body>""".trimMargin(),
"text/html",
"utf-8", "utf-8",
null null
) )

View File

@ -168,5 +168,5 @@
<string name="pref_debug_debug_logs">Registro de depuración (éstos se enviarán sin diálogo)</string> <string name="pref_debug_debug_logs">Registro de depuración (éstos se enviarán sin diálogo)</string>
<string name="acra_login">Habilitar el registro</string> <string name="acra_login">Habilitar el registro</string>
<string name="drawer_item_hidden_tags">Etiquetas ocultas</string> <string name="drawer_item_hidden_tags">Etiquetas ocultas</string>
<string name="unmark">Mark item as unread</string> <string name="unmark">Marcar artículo como no leído</string>
</resources> </resources>

View File

@ -168,5 +168,5 @@
<string name="pref_debug_debug_logs">Rexistro de depuración (Estes enviaranse automáticamente)</string> <string name="pref_debug_debug_logs">Rexistro de depuración (Estes enviaranse automáticamente)</string>
<string name="acra_login">Habilitar o rexistro</string> <string name="acra_login">Habilitar o rexistro</string>
<string name="drawer_item_hidden_tags">Etiquetas ocultas</string> <string name="drawer_item_hidden_tags">Etiquetas ocultas</string>
<string name="unmark">Mark item as unread</string> <string name="unmark">Marcar artículo como non lido</string>
</resources> </resources>

View File

@ -1,53 +1,53 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<!--Generated by crowdin.com--> <!--Generated by crowdin.com-->
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">"Reader for Selfoss"</string> <string name="app_name">"Lettore RSS per Selfoss"</string>
<string name="title_activity_login">"Log in"</string> <string name="title_activity_login">"Accedi"</string>
<string name="prompt_password">"Password"</string> <string name="prompt_password">"Password"</string>
<string name="prompt_http_password">"HTTP Password"</string> <string name="prompt_http_password">"Password HTTP"</string>
<string name="action_sign_in">"Go"</string> <string name="action_sign_in">"Vai"</string>
<string name="error_invalid_password">"Password not long enough"</string> <string name="error_invalid_password">"La password non è sufficientemente lunga"</string>
<string name="error_field_required">"Field required"</string> <string name="error_field_required">"Campo obbligatorio"</string>
<string name="prompt_url">"Url"</string> <string name="prompt_url">"URL"</string>
<string name="withLoginSwitch">"Login required ?"</string> <string name="withLoginSwitch">"È richiesto l'accesso?"</string>
<string name="withHttpLoginSwitch">"HTTP Login required ?"</string> <string name="withHttpLoginSwitch">"Accesso HTTP necessario?"</string>
<string name="login_url_problem">"Oops. You may need to add a \"/\" at the end of the url."</string> <string name="login_url_problem">"Oops. Potrebbe essere necessario aggiungere un \"/\" alla fine dell'url."</string>
<string name="prompt_login">"Username"</string> <string name="prompt_login">"Nome utente"</string>
<string name="prompt_http_login">"HTTP Username"</string> <string name="prompt_http_login">"Nome utente HTTP"</string>
<string name="label_share">"Share"</string> <string name="label_share">"Condividi"</string>
<string name="readAll">"Read all"</string> <string name="readAll">"Segna tutte come lette"</string>
<string name="action_disconnect">"Disconnect"</string> <string name="action_disconnect">"Scollegati"</string>
<string name="title_activity_settings">"Settings"</string> <string name="title_activity_settings">"Impostazioni"</string>
<string name="pref_header_general">"General"</string> <string name="pref_header_general">"Generali"</string>
<string name="pref_switch_actions_tap_title">"Tap action on the articles"</string> <string name="pref_switch_actions_tap_title">"Tap sugli articoli"</string>
<string name="add_source_hint_tags">"Tag1, Tag2, Tag3"</string> <string name="add_source_hint_tags">"Tag1, Tag2, Tag3"</string>
<string name="add_source_hint_url">"Link"</string> <string name="add_source_hint_url">"Link"</string>
<string name="add_source_hint_name">"Name"</string> <string name="add_source_hint_name">"Nome"</string>
<string name="add_source">"Add a source"</string> <string name="add_source">"Aggiungi una fonte"</string>
<string name="add_source_save">"Save"</string> <string name="add_source_save">"Salva"</string>
<string name="wrong_infos">"Check your details again."</string> <string name="wrong_infos">"Controlla nuovamente i dati."</string>
<string name="all_posts_not_read">"All posts weren't read"</string> <string name="all_posts_not_read">"All posts weren't read"</string>
<string name="all_posts_read">"All posts were read"</string> <string name="all_posts_read">"Tutti i messaggi sono stati letti"</string>
<string name="cant_get_favs">"Can't get favorites"</string> <string name="cant_get_favs">"Non è possibile ottenere i preferiti"</string>
<string name="cant_get_new_elements">"Can't get new articles"</string> <string name="cant_get_new_elements">"Non è possibile ottenere nuovi articoli"</string>
<string name="cant_get_read">"Can't get read articles"</string> <string name="cant_get_read">"Can't get read articles"</string>
<string name="nothing_here">"Nothing here"</string> <string name="nothing_here">"Non c'è niente qui"</string>
<string name="tab_new">"New"</string> <string name="tab_new">"Nuovi"</string>
<string name="tab_read">"All"</string> <string name="tab_read">"Tutti"</string>
<string name="tab_favs">"Favorites"</string> <string name="tab_favs">"Preferiti"</string>
<string name="action_about">"About"</string> <string name="action_about">"Informazioni"</string>
<string name="marked_as_read">"Item read"</string> <string name="marked_as_read">"Articolo letto"</string>
<string name="undo_string">"Undo"</string> <string name="undo_string">"Annulla"</string>
<string name="addStringNoUrl">"Log in to add sources."</string> <string name="addStringNoUrl">"Autenticati per aggiungere fonti."</string>
<string name="cant_get_sources">"Can't get sources list."</string> <string name="cant_get_sources">"Can't get sources list."</string>
<string name="cant_create_source">"Can't create source."</string> <string name="cant_create_source">"Can't create source."</string>
<string name="cant_get_spouts">"Can't get spouts list."</string> <string name="cant_get_spouts">"Can't get spouts list."</string>
<string name="form_not_complete">"The form is not complete"</string> <string name="form_not_complete">"Il modulo non è completo"</string>
<string name="pref_header_links">"Links"</string> <string name="pref_header_links">"Links"</string>
<string name="issue_tracker_link">"Issue Tracker"</string> <string name="issue_tracker_link">"Traccia problemi"</string>
<string name="issue_tracker_summary">"Report a bug or ask for a new feature"</string> <string name="issue_tracker_summary">"Segnalare un bug o richiedere una nuova funzionalità"</string>
<string name="warning_wrong_url">"WARNING"</string> <string name="warning_wrong_url">"ATTENZIONE"</string>
<string name="pref_switch_card_view_title">"Card View"</string> <string name="pref_switch_card_view_title">"Visualizzazione a schede"</string>
<string name="cant_mark_favortie">"Can't mark article as favorite"</string> <string name="cant_mark_favortie">"Can't mark article as favorite"</string>
<string name="cant_unmark_favortie">"Can't remove item from favorite"</string> <string name="cant_unmark_favortie">"Can't remove item from favorite"</string>
<string name="share">"Share"</string> <string name="share">"Share"</string>
@ -92,32 +92,32 @@
<string name="intro_hello_title">"Hi there !"</string> <string name="intro_hello_title">"Hi there !"</string>
<string name="intro_hello_message">"Thanks for downloading the app !"</string> <string name="intro_hello_message">"Thanks for downloading the app !"</string>
<string name="intro_needs_selfoss_title">"Before you start…"</string> <string name="intro_needs_selfoss_title">"Before you start…"</string>
<string name="intro_needs_selfoss_message">"You can't use the app without a Selfoss instance."</string> <string name="intro_needs_selfoss_message">"Non è possibile utilizzare l'app senza un'istanza di Selfoss."</string>
<string name="intro_needs_selfoss_link">"What is Selfoss ?"</string> <string name="intro_needs_selfoss_link">"Che cosa è Selfoss?"</string>
<string name="intro_all_set_title">"All set !"</string> <string name="intro_all_set_title">"Tutto pronto!"</string>
<string name="intro_all_set_message">"You are ready to use the app. Don't forget to go to the settings page to configure your app, and where you'll find some useful links."</string> <string name="intro_all_set_message">"You are ready to use the app. Don't forget to go to the settings page to configure your app, and where you'll find some useful links."</string>
<string name="card_height_title">Full height cards</string> <string name="card_height_title">Schede a piena altezza</string>
<string name="card_height_on">Cards height will adjust to its content</string> <string name="card_height_on">Cards height will adjust to its content</string>
<string name="card_height_off">Card height will be fixed</string> <string name="card_height_off">Card height will be fixed</string>
<string name="source_code">Source code</string> <string name="source_code">Codice sorgente</string>
<string name="cant_mark_read">Can\'t mark article as read</string> <string name="cant_mark_read">Impossibile contrassegnare l\'articolo come già letto</string>
<string name="drawer_error_loading_tags">Error loading tags</string> <string name="drawer_error_loading_tags">Errore nel caricamento dei tag…</string>
<string name="drawer_error_loading_sources">Error loading sources</string> <string name="drawer_error_loading_sources">Errore nel caricamento delle fonti</string>
<string name="drawer_item_filters">Filters</string> <string name="drawer_item_filters">Filtri</string>
<string name="drawer_action_clear">clear</string> <string name="drawer_action_clear">cancella</string>
<string name="drawer_item_tags">Tags</string> <string name="drawer_item_tags">Tags</string>
<string name="drawer_item_sources">Sources</string> <string name="drawer_item_sources">Fonti</string>
<string name="drawer_action_edit">edit</string> <string name="drawer_action_edit">modifica</string>
<string name="cache_drawer_error" tools:keep="@string/cache_drawer_error">Couldn\'t cache your drawer data</string> <string name="cache_drawer_error" tools:keep="@string/cache_drawer_error">Couldn\'t cache your drawer data</string>
<string name="no_tags_loaded">No tags loaded</string> <string name="no_tags_loaded">Nessun tag caricato</string>
<string name="no_sources_loaded">No sources loaded</string> <string name="no_sources_loaded">No sources loaded</string>
<string name="drawer_loading">Loading </string> <string name="drawer_loading">Caricamento</string>
<string name="menu_home_search">Search</string> <string name="menu_home_search">Cerca</string>
<string name="can_delete_source">Can\'t delete the source…</string> <string name="can_delete_source">Non è possibile eliminare la fonte…</string>
<string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string> <string name="base_url_error">There was an issue when trying to communicate with your Selfoss Instance. If the issue persists, please get in touch with me.</string>
<string name="pref_header_theme">Themes</string> <string name="pref_header_theme">Temi</string>
<string name="default_theme">Default</string> <string name="default_theme">Predefinito</string>
<string name="default_dark_theme">Default/Dark</string> <string name="default_dark_theme">Predefinito (Scuro)</string>
<string name="pref_header_debug">Debug</string> <string name="pref_header_debug">Debug</string>
<string name="login_debug_title">Activate to log login errors</string> <string name="login_debug_title">Activate to log login errors</string>
<string name="login_debug_on">Any error on the login page will be logged</string> <string name="login_debug_on">Any error on the login page will be logged</string>
@ -125,9 +125,9 @@
<string name="login_menu_debug">Debug</string> <string name="login_menu_debug">Debug</string>
<string name="self_hosted_cert_switch">Using a self hosted certificate ?</string> <string name="self_hosted_cert_switch">Using a self hosted certificate ?</string>
<string name="self_signed_cert_warning">Due to security reasons, self signed certificates are not supported by default. By activating this, I\'ll not be responsible of any security problem you encounter.</string> <string name="self_signed_cert_warning">Due to security reasons, self signed certificates are not supported by default. By activating this, I\'ll not be responsible of any security problem you encounter.</string>
<string name="pref_selfoss_category">Selfoss Api</string> <string name="pref_selfoss_category">Api di Selfoss</string>
<string name="pref_api_items_number_title">Loaded items number</string> <string name="pref_api_items_number_title">Numero di elementi caricati</string>
<string name="pref_hidden_tags">Hidden Tags</string> <string name="pref_hidden_tags">Tag nascosti</string>
<string name="read_debug_title">Read articles appearing as unread ?</string> <string name="read_debug_title">Read articles appearing as unread ?</string>
<string name="read_debug_off">No log when marking an item as read</string> <string name="read_debug_off">No log when marking an item as read</string>
<string name="read_debug_on">Api calls will be logged when marking an article as read</string> <string name="read_debug_on">Api calls will be logged when marking an article as read</string>
@ -139,9 +139,9 @@
<string name="login_everything_on">This will log every api call for debug purpose.</string> <string name="login_everything_on">This will log every api call for debug purpose.</string>
<string name="login_everything_off">No api call will be logged</string> <string name="login_everything_off">No api call will be logged</string>
<string name="pref_general_infinite_loading_title">Load more articles on scroll</string> <string name="pref_general_infinite_loading_title">Load more articles on scroll</string>
<string name="translation">Translation</string> <string name="translation">Traduzioni</string>
<string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string> <string name="cant_open_invalid_url">The item url is invalid. I\'m looking into solving this issue so the app won\'t crash.</string>
<string name="drawer_report_bug">Report a bug</string> <string name="drawer_report_bug">Segnala un bug</string>
<string name="items_number_should_be_number">The items number should be an integer.</string> <string name="items_number_should_be_number">The items number should be an integer.</string>
<string name="reader_action_more">Read more</string> <string name="reader_action_more">Read more</string>
<string name="reader_action_open">Open in browser</string> <string name="reader_action_open">Open in browser</string>
@ -168,5 +168,5 @@
<string name="pref_debug_debug_logs">Debug logging (these will be sent without a dialog)</string> <string name="pref_debug_debug_logs">Debug logging (these will be sent without a dialog)</string>
<string name="acra_login">Enable logging</string> <string name="acra_login">Enable logging</string>
<string name="drawer_item_hidden_tags">Hidden Tags</string> <string name="drawer_item_hidden_tags">Hidden Tags</string>
<string name="unmark">Mark item as unread</string> <string name="unmark">Segna come non letto</string>
</resources> </resources>

View File

@ -2,61 +2,61 @@
<!--Generated by crowdin.com--> <!--Generated by crowdin.com-->
<resources xmlns:tools="http://schemas.android.com/tools"> <resources xmlns:tools="http://schemas.android.com/tools">
<string name="app_name">"Reader for Selfoss"</string> <string name="app_name">"Reader for Selfoss"</string>
<string name="title_activity_login">"Log in"</string> <string name="title_activity_login">"로그인"</string>
<string name="prompt_password">"Password"</string> <string name="prompt_password">"비밀번호"</string>
<string name="prompt_http_password">"HTTP Password"</string> <string name="prompt_http_password">"HTTP 암호"</string>
<string name="action_sign_in">"Go"</string> <string name="action_sign_in">"Go"</string>
<string name="error_invalid_password">"Password not long enough"</string> <string name="error_invalid_password">"패스워드가 짧습니다."</string>
<string name="error_field_required">"Field required"</string> <string name="error_field_required">"필수 항목"</string>
<string name="prompt_url">"Url"</string> <string name="prompt_url">"Url"</string>
<string name="withLoginSwitch">"Login required ?"</string> <string name="withLoginSwitch">"로그인이 필요합니까?"</string>
<string name="withHttpLoginSwitch">"HTTP Login required ?"</string> <string name="withHttpLoginSwitch">"HTTP 로그인이 필요 합니까?"</string>
<string name="login_url_problem">"Oops. You may need to add a \"/\" at the end of the url."</string> <string name="login_url_problem">"죄송합니다. Url의 끝에 \"/\"를 추가할 필요가 있습니다."</string>
<string name="prompt_login">"Username"</string> <string name="prompt_login">"사용자 이름"</string>
<string name="prompt_http_login">"HTTP Username"</string> <string name="prompt_http_login">"HTTP 사용자 이름"</string>
<string name="label_share">"Share"</string> <string name="label_share">"공유"</string>
<string name="readAll">"Read all"</string> <string name="readAll">"모두 읽기"</string>
<string name="action_disconnect">"Disconnect"</string> <string name="action_disconnect">"연결 해제"</string>
<string name="title_activity_settings">"Settings"</string> <string name="title_activity_settings">"설정"</string>
<string name="pref_header_general">"General"</string> <string name="pref_header_general">"일반"</string>
<string name="pref_switch_actions_tap_title">"Tap action on the articles"</string> <string name="pref_switch_actions_tap_title">"기사에 탭 액션"</string>
<string name="add_source_hint_tags">"Tag1, Tag2, Tag3"</string> <string name="add_source_hint_tags">"태그1, 태그2, 태그3"</string>
<string name="add_source_hint_url">"Link"</string> <string name="add_source_hint_url">"링크"</string>
<string name="add_source_hint_name">"Name"</string> <string name="add_source_hint_name">"이름"</string>
<string name="add_source">"Add a source"</string> <string name="add_source">"소스 추가"</string>
<string name="add_source_save">"Save"</string> <string name="add_source_save">"저장"</string>
<string name="wrong_infos">"Check your details again."</string> <string name="wrong_infos">"세부 정보를 다시 확인하세요."</string>
<string name="all_posts_not_read">"All posts weren't read"</string> <string name="all_posts_not_read">"모든 게시물을 읽지 않았습니다."</string>
<string name="all_posts_read">"All posts were read"</string> <string name="all_posts_read">"모든 게시물을 읽었습니다."</string>
<string name="cant_get_favs">"Can't get favorites"</string> <string name="cant_get_favs">"즐겨찾기를 가져올 수 없습니다."</string>
<string name="cant_get_new_elements">"Can't get new articles"</string> <string name="cant_get_new_elements">"새로운 기사를 가져올 수 없습니다."</string>
<string name="cant_get_read">"Can't get read articles"</string> <string name="cant_get_read">"읽은 기사를 가져올 수 없습니다."</string>
<string name="nothing_here">"Nothing here"</string> <string name="nothing_here">"비어있음"</string>
<string name="tab_new">"New"</string> <string name="tab_new">"새로운"</string>
<string name="tab_read">"All"</string> <string name="tab_read">"전체"</string>
<string name="tab_favs">"Favorites"</string> <string name="tab_favs">"즐겨찾기"</string>
<string name="action_about">"About"</string> <string name="action_about">"정보"</string>
<string name="marked_as_read">"Item read"</string> <string name="marked_as_read">"항목 읽기"</string>
<string name="undo_string">"Undo"</string> <string name="undo_string">"실행 취소"</string>
<string name="addStringNoUrl">"Log in to add sources."</string> <string name="addStringNoUrl">"로그인 소스를 추가 해야 합니다."</string>
<string name="cant_get_sources">"Can't get sources list."</string> <string name="cant_get_sources">"소스 리스트를 얻을 수 없습니다."</string>
<string name="cant_create_source">"Can't create source."</string> <string name="cant_create_source">"소스를 만들 수 없습니다."</string>
<string name="cant_get_spouts">"Can't get spouts list."</string> <string name="cant_get_spouts">"Spouts 목록을 가져올 수 없습니다."</string>
<string name="form_not_complete">"The form is not complete"</string> <string name="form_not_complete">"양식이 완료되지 않았습니다."</string>
<string name="pref_header_links">"Links"</string> <string name="pref_header_links">"링크"</string>
<string name="issue_tracker_link">"Issue Tracker"</string> <string name="issue_tracker_link">"이슈 트래커"</string>
<string name="issue_tracker_summary">"Report a bug or ask for a new feature"</string> <string name="issue_tracker_summary">"버그를 보고 하거나 새기능에 대해 요청하세요."</string>
<string name="warning_wrong_url">"WARNING"</string> <string name="warning_wrong_url">"경고"</string>
<string name="pref_switch_card_view_title">"Card View"</string> <string name="pref_switch_card_view_title">"카드 형식 보기"</string>
<string name="cant_mark_favortie">"Can't mark article as favorite"</string> <string name="cant_mark_favortie">"좋아하는 문서를 마크할 수 없습니다."</string>
<string name="cant_unmark_favortie">"Can't remove item from favorite"</string> <string name="cant_unmark_favortie">"좋아하는 항목에서 제거할 수 없습니다."</string>
<string name="share">"Share"</string> <string name="share">"공유"</string>
<string name="rating_prompt_title">"Enjoying the app ?"</string> <string name="rating_prompt_title">"이 앱에 만족하십니까?"</string>
<string name="rating_prompt_yes">"Yes !"</string> <string name="rating_prompt_yes">"!"</string>
<string name="rating_prompt_no">"Not really …"</string> <string name="rating_prompt_no">"설마..."</string>
<string name="rating_prompt_feedback_title">"Can you tell us why ?"</string> <string name="rating_prompt_feedback_title">"이유를 우리에게 말해줄 수 있습니까?"</string>
<string name="rating_prompt_feedback_yes">"OK !"</string> <string name="rating_prompt_feedback_yes">"OK!"</string>
<string name="rating_prompt_feedback_no">"Not now."</string> <string name="rating_prompt_feedback_no">"나중에"</string>
<string name="rating_prompt_rating_title">"Great ! Can you rate us on the Store ?"</string> <string name="rating_prompt_rating_title">"Great ! Can you rate us on the Store ?"</string>
<string name="rating_prompt_rating_yes">"Sure !"</string> <string name="rating_prompt_rating_yes">"Sure !"</string>
<string name="rating_prompt_rating_no">"Not right now."</string> <string name="rating_prompt_rating_no">"Not right now."</string>

View File

@ -2,8 +2,8 @@
buildscript { buildscript {
ext { ext {
kotlin_version = '1.2.31' kotlin_version = '1.2.51'
android_version = '27.1.1' android_version = '28.0.0'
} }
repositories { repositories {
jcenter() jcenter()
@ -13,7 +13,7 @@ buildscript {
} }
} }
dependencies { dependencies {
classpath 'com.android.tools.build:gradle:3.1.4' classpath 'com.android.tools.build:gradle:3.2.0'
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
} }
} }

View File

@ -1,6 +1,6 @@
#Tue Mar 27 19:14:12 CEST 2018 #Tue Sep 25 20:41:54 CEST 2018
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip