Compare commits
	
		
			10 Commits
		
	
	
		
			v161809253
			...
			v161809273
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					29d1e38340 | ||
| 
						 | 
					2be872e61e | ||
| 
						 | 
					377c5518f7 | ||
| 
						 | 
					21be7357b5 | ||
| 
						 | 
					d47ba2c820 | ||
| 
						 | 
					a64b14614a | ||
| 
						 | 
					6a88192e77 | ||
| 
						 | 
					aa7c630818 | ||
| 
						 | 
					7fb54f14c7 | ||
| 
						 | 
					3d709c02b7 | 
@@ -133,7 +133,7 @@ dependencies {
 | 
			
		||||
    implementation 'com.github.stkent:amplify:2.1.0'
 | 
			
		||||
 | 
			
		||||
    // Drawer
 | 
			
		||||
    implementation 'co.zsmb:materialdrawer-kt:1.3.5'
 | 
			
		||||
    implementation 'co.zsmb:materialdrawer-kt:1.3.7'
 | 
			
		||||
    implementation 'com.anupcowkur:reservoir:3.1.0'
 | 
			
		||||
 | 
			
		||||
    // Themes
 | 
			
		||||
 
 | 
			
		||||
@@ -114,7 +114,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
 | 
			
		||||
    private lateinit var appColors: AppColors
 | 
			
		||||
    private var offset: 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 var recyclerAdapter: RecyclerView.Adapter<*>? = null
 | 
			
		||||
@@ -209,8 +209,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
 | 
			
		||||
                ItemTouchHelper.LEFT or ItemTouchHelper.RIGHT
 | 
			
		||||
            ) {
 | 
			
		||||
                override fun getSwipeDirs(
 | 
			
		||||
                    recyclerView: RecyclerView?,
 | 
			
		||||
                    viewHolder: RecyclerView.ViewHolder?
 | 
			
		||||
                    recyclerView: RecyclerView,
 | 
			
		||||
                    viewHolder: RecyclerView.ViewHolder
 | 
			
		||||
                ): Int =
 | 
			
		||||
                    if (elementsShown != UNREAD_SHOWN) {
 | 
			
		||||
                        0
 | 
			
		||||
@@ -805,22 +805,20 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private fun handleInfiniteScroll() {
 | 
			
		||||
        if (recyclerViewScrollListener == null) {
 | 
			
		||||
            recyclerViewScrollListener = object : RecyclerView.OnScrollListener() {
 | 
			
		||||
                override fun onScrolled(localRecycler: RecyclerView?, dx: Int, dy: Int) {
 | 
			
		||||
                    if (localRecycler != null && dy > 0) {
 | 
			
		||||
                        val manager = recyclerView.layoutManager
 | 
			
		||||
                        val lastVisibleItem: Int = when (manager) {
 | 
			
		||||
                            is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions(
 | 
			
		||||
                                null
 | 
			
		||||
                            ).last()
 | 
			
		||||
                            is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition()
 | 
			
		||||
                            else -> 0
 | 
			
		||||
                        }
 | 
			
		||||
        recyclerViewScrollListener = object : RecyclerView.OnScrollListener() {
 | 
			
		||||
            override fun onScrolled(localRecycler: RecyclerView, dx: Int, dy: Int) {
 | 
			
		||||
                if (localRecycler != null && dy > 0) {
 | 
			
		||||
                    val manager = recyclerView.layoutManager
 | 
			
		||||
                    val lastVisibleItem: Int = when (manager) {
 | 
			
		||||
                        is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions(
 | 
			
		||||
                            null
 | 
			
		||||
                        ).last()
 | 
			
		||||
                        is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition()
 | 
			
		||||
                        else -> 0
 | 
			
		||||
                    }
 | 
			
		||||
 | 
			
		||||
                        if (lastVisibleItem == (items.size - 1) && items.size < maxItemNumber()) {
 | 
			
		||||
                            getElementsAccordingToTab(appendResults = true)
 | 
			
		||||
                        }
 | 
			
		||||
                    if (lastVisibleItem == (items.size - 1) && items.size < maxItemNumber()) {
 | 
			
		||||
                        getElementsAccordingToTab(appendResults = true)
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 
 | 
			
		||||
@@ -3,9 +3,11 @@ package apps.amine.bou.readerforselfoss
 | 
			
		||||
import android.graphics.drawable.ColorDrawable
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Bundle
 | 
			
		||||
import android.preference.PreferenceManager
 | 
			
		||||
import android.support.v4.app.FragmentManager
 | 
			
		||||
import android.support.v4.app.FragmentStatePagerAdapter
 | 
			
		||||
import android.support.v4.content.ContextCompat
 | 
			
		||||
import android.support.v4.view.ViewPager
 | 
			
		||||
import android.support.v7.app.AppCompatActivity
 | 
			
		||||
import android.view.Menu
 | 
			
		||||
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.Toppings
 | 
			
		||||
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 com.ftinc.scoop.Scoop
 | 
			
		||||
import kotlinx.android.synthetic.main.activity_reader.*
 | 
			
		||||
import me.relex.circleindicator.CircleIndicator
 | 
			
		||||
import org.acra.ACRA
 | 
			
		||||
import retrofit2.Call
 | 
			
		||||
import retrofit2.Callback
 | 
			
		||||
import retrofit2.Response
 | 
			
		||||
@@ -29,7 +34,9 @@ import retrofit2.Response
 | 
			
		||||
class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
 | 
			
		||||
    private var markOnScroll: Boolean = false
 | 
			
		||||
    private var debugReadingItems: Boolean = false
 | 
			
		||||
    private var currentItem: Int = 0
 | 
			
		||||
    private lateinit var userIdentifier: String
 | 
			
		||||
 | 
			
		||||
    private lateinit var api: SelfossApi
 | 
			
		||||
 | 
			
		||||
@@ -63,6 +70,18 @@ class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
        supportActionBar?.setDisplayHomeAsUpEnabled(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()) {
 | 
			
		||||
            finish()
 | 
			
		||||
@@ -70,6 +89,8 @@ class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
 | 
			
		||||
        currentItem = intent.getIntExtra("currentItem", 0)
 | 
			
		||||
 | 
			
		||||
        readItem(allItems[currentItem].id)
 | 
			
		||||
 | 
			
		||||
        pager.adapter = ScreenSlidePagerAdapter(supportFragmentManager, AppColors(this@ReaderActivity))
 | 
			
		||||
        pager.currentItem = currentItem
 | 
			
		||||
    }
 | 
			
		||||
@@ -77,10 +98,64 @@ class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
    override fun onResume() {
 | 
			
		||||
        super.onResume()
 | 
			
		||||
 | 
			
		||||
        (pager.adapter as ScreenSlidePagerAdapter).notifyDataSetChanged()
 | 
			
		||||
        notifyAdapter()
 | 
			
		||||
 | 
			
		||||
        pager.setPageTransformer(true, DepthPageTransformer())
 | 
			
		||||
        (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() {
 | 
			
		||||
@@ -142,6 +217,7 @@ class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
                            response: Response<SuccessResponse>
 | 
			
		||||
                        ) {
 | 
			
		||||
                            allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
 | 
			
		||||
                            notifyAdapter()
 | 
			
		||||
                            canRemoveFromFavorite()
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
@@ -165,6 +241,7 @@ class ReaderActivity : AppCompatActivity() {
 | 
			
		||||
                            response: Response<SuccessResponse>
 | 
			
		||||
                        ) {
 | 
			
		||||
                            allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
 | 
			
		||||
                            notifyAdapter()
 | 
			
		||||
                            canFavorite()
 | 
			
		||||
                        }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -101,7 +101,6 @@ class ArticleFragment : Fragment() {
 | 
			
		||||
 | 
			
		||||
        val settings = activity!!.getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
 | 
			
		||||
        val debugReadingItems = prefs.getBoolean("read_debug", false)
 | 
			
		||||
        val markOnScroll = prefs.getBoolean("mark_on_scroll", false)
 | 
			
		||||
 | 
			
		||||
        val api = SelfossApi(
 | 
			
		||||
            context!!,
 | 
			
		||||
@@ -211,38 +210,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
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -434,34 +401,41 @@ class ArticleFragment : Fragment() {
 | 
			
		||||
 | 
			
		||||
        rootView.webcontent.loadDataWithBaseURL(
 | 
			
		||||
            baseUrl,
 | 
			
		||||
            """<style>
 | 
			
		||||
                |img {
 | 
			
		||||
                |  display: inline-block;
 | 
			
		||||
                |  height: auto;
 | 
			
		||||
                |  width: 100%;
 | 
			
		||||
                |  max-width: 100%;
 | 
			
		||||
                |}
 | 
			
		||||
                |a {
 | 
			
		||||
                |  color: $stringColor !important;
 | 
			
		||||
                |}
 | 
			
		||||
                |*:not(a) {
 | 
			
		||||
                |  color: $stringTextColor;
 | 
			
		||||
                |}
 | 
			
		||||
                |* {
 | 
			
		||||
                |  font-size: ${fontSize.toPx}px;
 | 
			
		||||
                |  text-align: justify;
 | 
			
		||||
                |  word-break: break-word;
 | 
			
		||||
                |  overflow:hidden;
 | 
			
		||||
                |}
 | 
			
		||||
                |a, pre, code {
 | 
			
		||||
                |  text-align: left;
 | 
			
		||||
                |}
 | 
			
		||||
                |pre, code {
 | 
			
		||||
                |  white-space: pre-wrap;
 | 
			
		||||
                |  width:100%;
 | 
			
		||||
                |  background-color: $stringBackgroundColor;
 | 
			
		||||
                |}</style>$c""".trimMargin(),
 | 
			
		||||
            "text/html; charset=utf-8",
 | 
			
		||||
            """<html>
 | 
			
		||||
                |<head>
 | 
			
		||||
                |   <style>
 | 
			
		||||
                |      img {
 | 
			
		||||
                |        display: inline-block;
 | 
			
		||||
                |        height: auto;
 | 
			
		||||
                |        width: 100%;
 | 
			
		||||
                |        max-width: 100%;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      a {
 | 
			
		||||
                |        color: $stringColor !important;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      *:not(a) {
 | 
			
		||||
                |        color: $stringTextColor;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      * {
 | 
			
		||||
                |        font-size: ${fontSize.toPx}px;
 | 
			
		||||
                |        text-align: justify;
 | 
			
		||||
                |        word-break: break-word;
 | 
			
		||||
                |        overflow:hidden;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      a, pre, code {
 | 
			
		||||
                |        text-align: left;
 | 
			
		||||
                |      }
 | 
			
		||||
                |      pre, code {
 | 
			
		||||
                |        white-space: pre-wrap;
 | 
			
		||||
                |        width:100%;
 | 
			
		||||
                |        background-color: $stringBackgroundColor;
 | 
			
		||||
                |      }
 | 
			
		||||
                |   </style>
 | 
			
		||||
                |</head>
 | 
			
		||||
                |<body>
 | 
			
		||||
                |   $c
 | 
			
		||||
                |</body>""".trimMargin(),
 | 
			
		||||
            "text/html",
 | 
			
		||||
            "utf-8",
 | 
			
		||||
            null
 | 
			
		||||
        )
 | 
			
		||||
 
 | 
			
		||||
@@ -168,5 +168,5 @@
 | 
			
		||||
  <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="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>
 | 
			
		||||
 
 | 
			
		||||
@@ -168,5 +168,5 @@
 | 
			
		||||
  <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="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>
 | 
			
		||||
 
 | 
			
		||||
@@ -1,53 +1,53 @@
 | 
			
		||||
<?xml version="1.0" encoding="utf-8"?>
 | 
			
		||||
<!--Generated by crowdin.com-->
 | 
			
		||||
<resources xmlns:tools="http://schemas.android.com/tools">
 | 
			
		||||
  <string name="app_name">"Reader for Selfoss"</string>
 | 
			
		||||
  <string name="title_activity_login">"Log in"</string>
 | 
			
		||||
  <string name="app_name">"Lettore RSS per Selfoss"</string>
 | 
			
		||||
  <string name="title_activity_login">"Accedi"</string>
 | 
			
		||||
  <string name="prompt_password">"Password"</string>
 | 
			
		||||
  <string name="prompt_http_password">"HTTP Password"</string>
 | 
			
		||||
  <string name="action_sign_in">"Go"</string>
 | 
			
		||||
  <string name="error_invalid_password">"Password not long enough"</string>
 | 
			
		||||
  <string name="error_field_required">"Field required"</string>
 | 
			
		||||
  <string name="prompt_url">"Url"</string>
 | 
			
		||||
  <string name="withLoginSwitch">"Login required ?"</string>
 | 
			
		||||
  <string name="withHttpLoginSwitch">"HTTP Login required ?"</string>
 | 
			
		||||
  <string name="login_url_problem">"Oops. You may need to add a \"/\" at the end of the url."</string>
 | 
			
		||||
  <string name="prompt_login">"Username"</string>
 | 
			
		||||
  <string name="prompt_http_login">"HTTP Username"</string>
 | 
			
		||||
  <string name="label_share">"Share"</string>
 | 
			
		||||
  <string name="readAll">"Read all"</string>
 | 
			
		||||
  <string name="action_disconnect">"Disconnect"</string>
 | 
			
		||||
  <string name="title_activity_settings">"Settings"</string>
 | 
			
		||||
  <string name="pref_header_general">"General"</string>
 | 
			
		||||
  <string name="pref_switch_actions_tap_title">"Tap action on the articles"</string>
 | 
			
		||||
  <string name="prompt_http_password">"Password HTTP"</string>
 | 
			
		||||
  <string name="action_sign_in">"Vai"</string>
 | 
			
		||||
  <string name="error_invalid_password">"La password non è sufficientemente lunga"</string>
 | 
			
		||||
  <string name="error_field_required">"Campo obbligatorio"</string>
 | 
			
		||||
  <string name="prompt_url">"URL"</string>
 | 
			
		||||
  <string name="withLoginSwitch">"È richiesto l'accesso?"</string>
 | 
			
		||||
  <string name="withHttpLoginSwitch">"Accesso HTTP necessario?"</string>
 | 
			
		||||
  <string name="login_url_problem">"Oops. Potrebbe essere necessario aggiungere un \"/\" alla fine dell'url."</string>
 | 
			
		||||
  <string name="prompt_login">"Nome utente"</string>
 | 
			
		||||
  <string name="prompt_http_login">"Nome utente HTTP"</string>
 | 
			
		||||
  <string name="label_share">"Condividi"</string>
 | 
			
		||||
  <string name="readAll">"Segna tutte come lette"</string>
 | 
			
		||||
  <string name="action_disconnect">"Scollegati"</string>
 | 
			
		||||
  <string name="title_activity_settings">"Impostazioni"</string>
 | 
			
		||||
  <string name="pref_header_general">"Generali"</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_url">"Link"</string>
 | 
			
		||||
  <string name="add_source_hint_name">"Name"</string>
 | 
			
		||||
  <string name="add_source">"Add a source"</string>
 | 
			
		||||
  <string name="add_source_save">"Save"</string>
 | 
			
		||||
  <string name="wrong_infos">"Check your details again."</string>
 | 
			
		||||
  <string name="add_source_hint_name">"Nome"</string>
 | 
			
		||||
  <string name="add_source">"Aggiungi una fonte"</string>
 | 
			
		||||
  <string name="add_source_save">"Salva"</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_read">"All posts were read"</string>
 | 
			
		||||
  <string name="cant_get_favs">"Can't get favorites"</string>
 | 
			
		||||
  <string name="cant_get_new_elements">"Can't get new articles"</string>
 | 
			
		||||
  <string name="all_posts_read">"Tutti i messaggi sono stati letti"</string>
 | 
			
		||||
  <string name="cant_get_favs">"Non è possibile ottenere i preferiti"</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="nothing_here">"Nothing here"</string>
 | 
			
		||||
  <string name="tab_new">"New"</string>
 | 
			
		||||
  <string name="tab_read">"All"</string>
 | 
			
		||||
  <string name="tab_favs">"Favorites"</string>
 | 
			
		||||
  <string name="action_about">"About"</string>
 | 
			
		||||
  <string name="marked_as_read">"Item read"</string>
 | 
			
		||||
  <string name="undo_string">"Undo"</string>
 | 
			
		||||
  <string name="addStringNoUrl">"Log in to add sources."</string>
 | 
			
		||||
  <string name="nothing_here">"Non c'è niente qui"</string>
 | 
			
		||||
  <string name="tab_new">"Nuovi"</string>
 | 
			
		||||
  <string name="tab_read">"Tutti"</string>
 | 
			
		||||
  <string name="tab_favs">"Preferiti"</string>
 | 
			
		||||
  <string name="action_about">"Informazioni"</string>
 | 
			
		||||
  <string name="marked_as_read">"Articolo letto"</string>
 | 
			
		||||
  <string name="undo_string">"Annulla"</string>
 | 
			
		||||
  <string name="addStringNoUrl">"Autenticati per aggiungere fonti."</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_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="issue_tracker_link">"Issue Tracker"</string>
 | 
			
		||||
  <string name="issue_tracker_summary">"Report a bug or ask for a new feature"</string>
 | 
			
		||||
  <string name="warning_wrong_url">"WARNING"</string>
 | 
			
		||||
  <string name="pref_switch_card_view_title">"Card View"</string>
 | 
			
		||||
  <string name="issue_tracker_link">"Traccia problemi"</string>
 | 
			
		||||
  <string name="issue_tracker_summary">"Segnalare un bug o richiedere una nuova funzionalità"</string>
 | 
			
		||||
  <string name="warning_wrong_url">"ATTENZIONE"</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_unmark_favortie">"Can't remove item from favorite"</string>
 | 
			
		||||
  <string name="share">"Share"</string>
 | 
			
		||||
@@ -92,32 +92,32 @@
 | 
			
		||||
  <string name="intro_hello_title">"Hi there !"</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_message">"You can't use the app without a Selfoss instance."</string>
 | 
			
		||||
  <string name="intro_needs_selfoss_link">"What is Selfoss ?"</string>
 | 
			
		||||
  <string name="intro_all_set_title">"All set !"</string>
 | 
			
		||||
  <string name="intro_needs_selfoss_message">"Non è possibile utilizzare l'app senza un'istanza di Selfoss."</string>
 | 
			
		||||
  <string name="intro_needs_selfoss_link">"Che cosa è Selfoss?"</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="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_off">Card height will be fixed</string>
 | 
			
		||||
  <string name="source_code">Source code</string>
 | 
			
		||||
  <string name="cant_mark_read">Can\'t mark article as read</string>
 | 
			
		||||
  <string name="drawer_error_loading_tags">Error loading tags…</string>
 | 
			
		||||
  <string name="drawer_error_loading_sources">Error loading sources…</string>
 | 
			
		||||
  <string name="drawer_item_filters">Filters</string>
 | 
			
		||||
  <string name="drawer_action_clear">clear</string>
 | 
			
		||||
  <string name="source_code">Codice sorgente</string>
 | 
			
		||||
  <string name="cant_mark_read">Impossibile contrassegnare l\'articolo come già letto</string>
 | 
			
		||||
  <string name="drawer_error_loading_tags">Errore nel caricamento dei tag…</string>
 | 
			
		||||
  <string name="drawer_error_loading_sources">Errore nel caricamento delle fonti…</string>
 | 
			
		||||
  <string name="drawer_item_filters">Filtri</string>
 | 
			
		||||
  <string name="drawer_action_clear">cancella</string>
 | 
			
		||||
  <string name="drawer_item_tags">Tags</string>
 | 
			
		||||
  <string name="drawer_item_sources">Sources</string>
 | 
			
		||||
  <string name="drawer_action_edit">edit</string>
 | 
			
		||||
  <string name="drawer_item_sources">Fonti</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="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="drawer_loading">Loading …</string>
 | 
			
		||||
  <string name="menu_home_search">Search</string>
 | 
			
		||||
  <string name="can_delete_source">Can\'t delete the source…</string>
 | 
			
		||||
  <string name="drawer_loading">Caricamento…</string>
 | 
			
		||||
  <string name="menu_home_search">Cerca</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="pref_header_theme">Themes</string>
 | 
			
		||||
  <string name="default_theme">Default</string>
 | 
			
		||||
  <string name="default_dark_theme">Default/Dark</string>
 | 
			
		||||
  <string name="pref_header_theme">Temi</string>
 | 
			
		||||
  <string name="default_theme">Predefinito</string>
 | 
			
		||||
  <string name="default_dark_theme">Predefinito (Scuro)</string>
 | 
			
		||||
  <string name="pref_header_debug">Debug</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>
 | 
			
		||||
@@ -125,9 +125,9 @@
 | 
			
		||||
  <string name="login_menu_debug">Debug</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="pref_selfoss_category">Selfoss Api</string>
 | 
			
		||||
  <string name="pref_api_items_number_title">Loaded items number</string>
 | 
			
		||||
  <string name="pref_hidden_tags">Hidden Tags</string>
 | 
			
		||||
  <string name="pref_selfoss_category">Api di Selfoss</string>
 | 
			
		||||
  <string name="pref_api_items_number_title">Numero di elementi caricati</string>
 | 
			
		||||
  <string name="pref_hidden_tags">Tag nascosti</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_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_off">No api call will be logged</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="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="reader_action_more">Read more</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="acra_login">Enable logging</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>
 | 
			
		||||
 
 | 
			
		||||
@@ -2,8 +2,8 @@
 | 
			
		||||
 | 
			
		||||
buildscript {
 | 
			
		||||
    ext {
 | 
			
		||||
        kotlin_version = '1.2.31'
 | 
			
		||||
        android_version = '27.1.1'
 | 
			
		||||
        kotlin_version = '1.2.51'
 | 
			
		||||
        android_version = '28.0.0'
 | 
			
		||||
    }
 | 
			
		||||
    repositories {
 | 
			
		||||
        jcenter()
 | 
			
		||||
@@ -13,7 +13,7 @@ buildscript {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    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"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										4
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							@@ -1,6 +1,6 @@
 | 
			
		||||
#Tue Mar 27 19:14:12 CEST 2018
 | 
			
		||||
#Tue Sep 25 20:41:54 CEST 2018
 | 
			
		||||
distributionBase=GRADLE_USER_HOME
 | 
			
		||||
distributionPath=wrapper/dists
 | 
			
		||||
zipStoreBase=GRADLE_USER_HOME
 | 
			
		||||
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
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user