Compare commits
18 Commits
v161808215
...
v161809273
Author | SHA1 | Date | |
---|---|---|---|
29d1e38340 | |||
2be872e61e | |||
377c5518f7 | |||
21be7357b5 | |||
d47ba2c820 | |||
a64b14614a | |||
6a88192e77 | |||
aa7c630818 | |||
7fb54f14c7 | |||
3d709c02b7 | |||
339d384561 | |||
50338d51af | |||
92dbabf899 | |||
0043021390 | |||
70ba9b20da | |||
7fda0a04a1 | |||
3db3157dc9 | |||
2089fe60ca |
@ -16,6 +16,8 @@
|
||||
|
||||
- Versions updates.
|
||||
|
||||
- Fixes #215, #208.
|
||||
|
||||
**1.5.7.x**
|
||||
|
||||
- Added confirmation to the mark as read and update menues.
|
||||
|
@ -36,11 +36,11 @@ android {
|
||||
targetCompatibility JavaVersion.VERSION_1_8
|
||||
}
|
||||
compileSdkVersion 28
|
||||
buildToolsVersion '28.0.1'
|
||||
buildToolsVersion '28.0.2'
|
||||
defaultConfig {
|
||||
applicationId "apps.amine.bou.readerforselfoss"
|
||||
minSdkVersion 16
|
||||
targetSdkVersion 27
|
||||
targetSdkVersion 28
|
||||
versionCode versionCodeFromGit()
|
||||
versionName versionNameFromGit()
|
||||
|
||||
@ -66,6 +66,7 @@ android {
|
||||
buildConfigField "String", "LOGIN_URL", appLoginUrl
|
||||
buildConfigField "String", "LOGIN_USERNAME", appLoginUsername
|
||||
buildConfigField "String", "LOGIN_PASSWORD", appLoginPassword
|
||||
applicationIdSuffix ".dev"
|
||||
}
|
||||
}
|
||||
flavorDimensions "build"
|
||||
@ -93,13 +94,13 @@ dependencies {
|
||||
implementation fileTree(include: ['*.jar'], dir: 'libs')
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
|
||||
// Android Support
|
||||
implementation 'com.android.support:appcompat-v7:27.1.1'
|
||||
implementation 'com.android.support:design:27.1.1'
|
||||
implementation 'com.android.support:recyclerview-v7:27.1.1'
|
||||
implementation 'com.android.support:support-v4:27.1.1'
|
||||
implementation 'com.android.support:support-vector-drawable:27.1.1'
|
||||
implementation 'com.android.support:customtabs:27.1.1'
|
||||
implementation 'com.android.support:cardview-v7:27.1.1'
|
||||
implementation "com.android.support:appcompat-v7:$android_version"
|
||||
implementation "com.android.support:design:$android_version"
|
||||
implementation "com.android.support:recyclerview-v7:$android_version"
|
||||
implementation "com.android.support:support-v4:$android_version"
|
||||
implementation "com.android.support:support-vector-drawable:$android_version"
|
||||
implementation "com.android.support:customtabs:$android_version"
|
||||
implementation "com.android.support:cardview-v7:$android_version"
|
||||
implementation 'com.android.support.constraint:constraint-layout:1.1.0'
|
||||
|
||||
//multidex
|
||||
@ -132,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
|
||||
|
@ -42,7 +42,6 @@ import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
||||
import apps.amine.bou.readerforselfoss.utils.flattenTags
|
||||
import apps.amine.bou.readerforselfoss.utils.longHash
|
||||
import apps.amine.bou.readerforselfoss.utils.maybeHandleSilentException
|
||||
import co.zsmb.materialdrawerkt.builders.accountHeader
|
||||
import co.zsmb.materialdrawerkt.builders.drawer
|
||||
import co.zsmb.materialdrawerkt.builders.footer
|
||||
@ -66,7 +65,6 @@ import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
||||
import kotlinx.android.synthetic.main.activity_home.*
|
||||
import org.acra.ACRA
|
||||
import retrofit2.Call
|
||||
import retrofit2.Callback
|
||||
import retrofit2.Response
|
||||
@ -116,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
|
||||
@ -177,13 +175,12 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
alertDialog.setMessage(getString(R.string.gdpr_dialog_message))
|
||||
alertDialog.setButton(
|
||||
AlertDialog.BUTTON_NEUTRAL,
|
||||
"OK",
|
||||
{ dialog, _ ->
|
||||
sharedEditor.putBoolean("GDPR_shown", true)
|
||||
sharedEditor.commit()
|
||||
dialog.dismiss()
|
||||
}
|
||||
)
|
||||
"OK"
|
||||
) { dialog, _ ->
|
||||
sharedEditor.putBoolean("GDPR_shown", true)
|
||||
sharedEditor.commit()
|
||||
dialog.dismiss()
|
||||
}
|
||||
alertDialog.show()
|
||||
}
|
||||
|
||||
@ -212,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
|
||||
@ -242,44 +239,22 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
is ItemListAdapter -> adapter.removeItemAtIndex(position)
|
||||
}
|
||||
|
||||
if (items.size > 0) {
|
||||
badgeNew--
|
||||
reloadBadgeContent()
|
||||
badgeNew--
|
||||
reloadBadgeContent()
|
||||
|
||||
val tagHashes = i.tags.split(",").map { it.longHash() }
|
||||
tagsBadge = tagsBadge.map {
|
||||
if (tagHashes.contains(it.key)) {
|
||||
(it.key to (it.value - 1))
|
||||
} else {
|
||||
(it.key to it.value)
|
||||
}
|
||||
}.toMap()
|
||||
reloadTagsBadges()
|
||||
} else {
|
||||
tabNewBadge.hide()
|
||||
}
|
||||
|
||||
val manager = recyclerView.layoutManager
|
||||
val lastVisibleItem: Int = when (manager) {
|
||||
is StaggeredGridLayoutManager -> manager.findLastCompletelyVisibleItemPositions(
|
||||
null
|
||||
).last()
|
||||
is GridLayoutManager -> manager.findLastCompletelyVisibleItemPosition()
|
||||
else -> 0
|
||||
}
|
||||
|
||||
Log.e("TAGTAG", "$lastVisibleItem === ${items.size} && ${items.size} <= ${maxItemNumber()} && ${!lastFetchDone}x")
|
||||
if (lastVisibleItem === items.size &&
|
||||
items.size <= maxItemNumber() &&
|
||||
!lastFetchDone
|
||||
) {
|
||||
if (maxItemNumber() <= itemsNumber) {
|
||||
lastFetchDone = true
|
||||
val tagHashes = i.tags.split(",").map { it.longHash() }
|
||||
tagsBadge = tagsBadge.map {
|
||||
if (tagHashes.contains(it.key)) {
|
||||
(it.key to (it.value - 1))
|
||||
} else {
|
||||
(it.key to it.value)
|
||||
}
|
||||
getElementsAccordingToTab(
|
||||
appendResults = true,
|
||||
offsetOverride = lastVisibleItem
|
||||
)
|
||||
}.toMap()
|
||||
reloadTagsBadges()
|
||||
|
||||
// Just load everythin
|
||||
if (items.size <= 0) {
|
||||
getElementsAccordingToTab()
|
||||
}
|
||||
} else {
|
||||
Toast.makeText(
|
||||
@ -830,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)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1012,11 +985,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
fullHeightCards,
|
||||
appColors,
|
||||
debugReadingItems,
|
||||
userIdentifier,
|
||||
{
|
||||
updateItems(it)
|
||||
}
|
||||
)
|
||||
userIdentifier
|
||||
) {
|
||||
updateItems(it)
|
||||
}
|
||||
} else {
|
||||
recyclerAdapter =
|
||||
ItemListAdapter(
|
||||
@ -1029,11 +1001,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
articleViewer,
|
||||
debugReadingItems,
|
||||
userIdentifier,
|
||||
appColors,
|
||||
{
|
||||
updateItems(it)
|
||||
}
|
||||
)
|
||||
appColors
|
||||
) {
|
||||
updateItems(it)
|
||||
}
|
||||
|
||||
recyclerView.addItemDecoration(
|
||||
DividerItemDecoration(
|
||||
@ -1161,7 +1132,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||
when (item.itemId) {
|
||||
R.id.refresh -> {
|
||||
needsConfirmation(R.string.menu_home_refresh, R.string.refresh_dialog_message, {
|
||||
needsConfirmation(R.string.menu_home_refresh, R.string.refresh_dialog_message) {
|
||||
api.update().enqueue(object : Callback<String> {
|
||||
override fun onResponse(
|
||||
call: Call<String>,
|
||||
@ -1183,12 +1154,12 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
}
|
||||
})
|
||||
Toast.makeText(this, R.string.refresh_in_progress, Toast.LENGTH_SHORT).show()
|
||||
})
|
||||
}
|
||||
return true
|
||||
}
|
||||
R.id.readAll -> {
|
||||
if (elementsShown == UNREAD_SHOWN) {
|
||||
needsConfirmation(R.string.readAll, R.string.markall_dialog_message, {
|
||||
needsConfirmation(R.string.readAll, R.string.markall_dialog_message) {
|
||||
swipeRefreshLayout.isRefreshing = false
|
||||
val ids = allItems.map { it.id }
|
||||
val itemsByTag: Map<Long, Int> =
|
||||
@ -1238,7 +1209,6 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
swipeRefreshLayout.isRefreshing = false
|
||||
@ -1268,7 +1238,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
).show()
|
||||
}
|
||||
handleListResult()
|
||||
})
|
||||
}
|
||||
}
|
||||
return true
|
||||
}
|
||||
|
@ -1,7 +1,5 @@
|
||||
package apps.amine.bou.readerforselfoss
|
||||
|
||||
import android.content.Context
|
||||
import android.content.res.Resources
|
||||
import android.graphics.drawable.ColorDrawable
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
@ -22,7 +20,6 @@ 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.Config
|
||||
import apps.amine.bou.readerforselfoss.utils.maybeHandleSilentException
|
||||
import apps.amine.bou.readerforselfoss.utils.succeeded
|
||||
import apps.amine.bou.readerforselfoss.utils.toggleStar
|
||||
@ -73,26 +70,27 @@ class ReaderActivity : AppCompatActivity() {
|
||||
supportActionBar?.setDisplayHomeAsUpEnabled(true)
|
||||
supportActionBar?.setDisplayShowHomeEnabled(true)
|
||||
|
||||
val settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||
val sharedPref = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(this)
|
||||
|
||||
debugReadingItems = sharedPref.getBoolean("read_debug", false)
|
||||
userIdentifier = sharedPref.getString("unique_id", "")
|
||||
markOnScroll = sharedPref.getBoolean("mark_on_scroll", false)
|
||||
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()
|
||||
}
|
||||
|
||||
api = SelfossApi(
|
||||
this,
|
||||
this@ReaderActivity,
|
||||
settings.getBoolean("isSelfSignedCert", false),
|
||||
sharedPref.getBoolean("should_log_everything", false)
|
||||
)
|
||||
|
||||
currentItem = intent.getIntExtra("currentItem", 0)
|
||||
|
||||
readItem(allItems[currentItem].id)
|
||||
|
||||
pager.adapter = ScreenSlidePagerAdapter(supportFragmentManager, AppColors(this@ReaderActivity))
|
||||
pager.currentItem = currentItem
|
||||
}
|
||||
@ -100,62 +98,66 @@ 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() {
|
||||
var isLastItem = false
|
||||
|
||||
override fun onPageSelected(position: Int) {
|
||||
isLastItem = (position === (allItems.size - 1))
|
||||
|
||||
if (allItems[position].starred) {
|
||||
canRemoveFromFavorite()
|
||||
} else {
|
||||
canFavorite()
|
||||
}
|
||||
}
|
||||
|
||||
override fun onPageScrollStateChanged(state: Int) {
|
||||
if (markOnScroll && (state === ViewPager.SCROLL_STATE_DRAGGING || (state === ViewPager.SCROLL_STATE_IDLE && isLastItem))) {
|
||||
api.markItem(allItems[pager.currentItem].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)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
}
|
||||
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() {
|
||||
super.onPause()
|
||||
if (markOnScroll) {
|
||||
@ -215,6 +217,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
response: Response<SuccessResponse>
|
||||
) {
|
||||
allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
|
||||
notifyAdapter()
|
||||
canRemoveFromFavorite()
|
||||
}
|
||||
|
||||
@ -238,6 +241,7 @@ class ReaderActivity : AppCompatActivity() {
|
||||
response: Response<SuccessResponse>
|
||||
) {
|
||||
allItems[pager.currentItem] = allItems[pager.currentItem].toggleStar()
|
||||
notifyAdapter()
|
||||
canFavorite()
|
||||
}
|
||||
|
||||
|
@ -1,5 +1,6 @@
|
||||
package apps.amine.bou.readerforselfoss.fragments
|
||||
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.content.SharedPreferences
|
||||
import android.content.res.ColorStateList
|
||||
@ -23,6 +24,8 @@ import apps.amine.bou.readerforselfoss.R
|
||||
import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi
|
||||
import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||
import apps.amine.bou.readerforselfoss.utils.Config
|
||||
import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent
|
||||
@ -32,6 +35,7 @@ import apps.amine.bou.readerforselfoss.utils.maybeHandleSilentException
|
||||
import apps.amine.bou.readerforselfoss.utils.openItemUrl
|
||||
import apps.amine.bou.readerforselfoss.utils.shareLink
|
||||
import apps.amine.bou.readerforselfoss.utils.sourceAndDateText
|
||||
import apps.amine.bou.readerforselfoss.utils.succeeded
|
||||
import apps.amine.bou.readerforselfoss.utils.toPx
|
||||
import com.bumptech.glide.Glide
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
@ -90,6 +94,21 @@ class ArticleFragment : Fragment() {
|
||||
contentImage = allItems[pageNumber.toInt()].getThumbnail(activity!!)
|
||||
contentSource = allItems[pageNumber.toInt()].sourceAndDateText()
|
||||
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
editor = prefs.edit()
|
||||
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 debugReadingItems = prefs.getBoolean("read_debug", false)
|
||||
|
||||
val api = SelfossApi(
|
||||
context!!,
|
||||
activity!!,
|
||||
settings.getBoolean("isSelfSignedCert", false),
|
||||
prefs.getBoolean("should_log_everything", false)
|
||||
)
|
||||
|
||||
fab = rootView.fab
|
||||
|
||||
fab.backgroundTintList = ColorStateList.valueOf(appColors.colorAccent)
|
||||
@ -105,11 +124,6 @@ class ArticleFragment : Fragment() {
|
||||
mCustomTabActivityHelper = CustomTabActivityHelper()
|
||||
mCustomTabActivityHelper.bindCustomTabsService(activity)
|
||||
|
||||
val prefs = PreferenceManager.getDefaultSharedPreferences(activity)
|
||||
editor = prefs.edit()
|
||||
fontSize = prefs.getString("reader_font_size", "14").toInt()
|
||||
showMalformedUrl = prefs.getBoolean("show_error_malformed_url", true)
|
||||
|
||||
|
||||
floatingToolbar.setClickListener(
|
||||
object : FloatingToolbar.ItemClickListener {
|
||||
@ -126,6 +140,35 @@ class ArticleFragment : Fragment() {
|
||||
false,
|
||||
activity!!
|
||||
)
|
||||
R.id.unread_action -> api.unmarkItem(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!!)
|
||||
}
|
||||
}
|
||||
}
|
||||
)
|
||||
else -> Unit
|
||||
}
|
||||
}
|
||||
@ -325,70 +368,74 @@ class ArticleFragment : Fragment() {
|
||||
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, _ ->
|
||||
"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)
|
||||
// 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)
|
||||
val emailIntent = Intent(Intent.ACTION_VIEW)
|
||||
emailIntent.data = Uri.parse(mailTo)
|
||||
startActivity(emailIntent)
|
||||
|
||||
dialog.dismiss()
|
||||
}
|
||||
)
|
||||
dialog.dismiss()
|
||||
}
|
||||
alertDialog.setButton(
|
||||
AlertDialog.BUTTON_NEUTRAL,
|
||||
"Not now",
|
||||
{ dialog, _ -> dialog.dismiss() }
|
||||
)
|
||||
"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()
|
||||
}
|
||||
)
|
||||
"Don't show anymore."
|
||||
) { dialog, _ ->
|
||||
editor.putBoolean("show_error_malformed_url", false)
|
||||
editor.apply()
|
||||
dialog.dismiss()
|
||||
}
|
||||
alertDialog.show()
|
||||
}
|
||||
}
|
||||
|
||||
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
|
||||
)
|
||||
|
BIN
app/src/main/res/drawable-hdpi/ic_fiber_new.png
Normal file
BIN
app/src/main/res/drawable-hdpi/ic_fiber_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 324 B |
BIN
app/src/main/res/drawable-mdpi/ic_fiber_new.png
Normal file
BIN
app/src/main/res/drawable-mdpi/ic_fiber_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 215 B |
BIN
app/src/main/res/drawable-xhdpi/ic_fiber_new.png
Normal file
BIN
app/src/main/res/drawable-xhdpi/ic_fiber_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 327 B |
BIN
app/src/main/res/drawable-xxhdpi/ic_fiber_new.png
Normal file
BIN
app/src/main/res/drawable-xxhdpi/ic_fiber_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 490 B |
BIN
app/src/main/res/drawable-xxxhdpi/ic_fiber_new.png
Normal file
BIN
app/src/main/res/drawable-xxxhdpi/ic_fiber_new.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 567 B |
@ -12,7 +12,7 @@
|
||||
android:icon="@drawable/ic_done_all_white_24dp"
|
||||
android:title="@string/readAll"
|
||||
android:orderInCategory="1"
|
||||
app:showAsAction="ifRoom"/>
|
||||
app:showAsAction="always"/>
|
||||
|
||||
<item
|
||||
android:id="@+id/refresh"
|
||||
|
@ -2,6 +2,12 @@
|
||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
|
||||
<item
|
||||
android:id="@+id/unread_action"
|
||||
android:icon="@drawable/ic_fiber_new"
|
||||
android:title="@string/unmark"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
<item
|
||||
android:id="@+id/more_action"
|
||||
android:icon="@drawable/ic_chrome_reader_mode"
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +168,5 @@
|
||||
<string name="pref_debug_debug_logs">Registre de depuració (s\'enviarà automàticament)</string>
|
||||
<string name="acra_login">Habilita el registre</string>
|
||||
<string name="drawer_item_hidden_tags">Hidden Tags</string>
|
||||
<string name="unmark">Mark item as unread</string>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -127,7 +127,7 @@
|
||||
<string name="self_signed_cert_warning">Por razones de seguridad, los certificados propios no son compatibles por defecto. Activando esto, no seré responsable de cualquier problema de seguridad que encuentre.</string>
|
||||
<string name="pref_selfoss_category">Api de Selfoss</string>
|
||||
<string name="pref_api_items_number_title">Número de artículos cargados</string>
|
||||
<string name="pref_hidden_tags">Hidden Tags</string>
|
||||
<string name="pref_hidden_tags">Etiquetas ocultas</string>
|
||||
<string name="read_debug_title">¿Leer los artículos que aparecen como no leídos?</string>
|
||||
<string name="read_debug_off">Sin registro al marcar un elemento como leído</string>
|
||||
<string name="read_debug_on">Llamadas a la Api se registrarán al marcar un artículo como leído</string>
|
||||
@ -167,5 +167,6 @@
|
||||
<string name="pref_debug_crash_reports">Informe de fallos</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="drawer_item_hidden_tags">Hidden Tags</string>
|
||||
<string name="drawer_item_hidden_tags">Etiquetas ocultas</string>
|
||||
<string name="unmark">Marcar artículo como no leído</string>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -127,7 +127,7 @@
|
||||
<string name="self_signed_cert_warning">Pour des raisons de sécurité, les certificats auto-signés sont désactivés par défaut. En les activant, je ne serais pas responsable de quelconques problèmes de sécurité rencontrés.</string>
|
||||
<string name="pref_selfoss_category">Api Selfoss</string>
|
||||
<string name="pref_api_items_number_title">Nombre d\'articles chargés</string>
|
||||
<string name="pref_hidden_tags">Hidden Tags</string>
|
||||
<string name="pref_hidden_tags">Tags Cachés</string>
|
||||
<string name="read_debug_title">Des articles lus marqués comme non lus ?</string>
|
||||
<string name="read_debug_off">Aucun log quand un article est marqué comme lu</string>
|
||||
<string name="read_debug_on">Les appels API vont être logués lorsqu\'un article est marqué comme lu</string>
|
||||
@ -155,7 +155,7 @@
|
||||
<string name="markall_dialog_message">Marquer tous les éléments comme lus ?</string>
|
||||
<string name="pref_switch_actions_pager_scroll">Marquer comme lu à la navigation.</string>
|
||||
<string name="pref_switch_actions_pager_scroll_off">Ne pas marquer les articles comme lus à la navigation.</string>
|
||||
<string name="gdpr_dialog_message">L\'application ne collecte aucune donnée personnelle. Tous les outils d\'anlytics ont été supprimés. Les rapports d\'erreurs sont maintenant optionnels, ainsi que les logs. N\'oubliez pas que les rapports d\'erreurs sont essentiels pour la résolution des bugs (Vous pouvez configurer toute cela dans Paramètres > Debug).</string>
|
||||
<string name="gdpr_dialog_message">L\'application ne collecte aucune donnée personnelle. Tous les outils d\'analytics ont été supprimés. Les rapports d\'erreurs sont maintenant optionnels, ainsi que les logs. N\'oubliez pas que les rapports d\'erreurs sont essentiels pour la résolution des bugs (vous pouvez configurer tout cela dans Paramètres > Debug).</string>
|
||||
<string name="gdpr_dialog_title">L\'application ne partage aucune de vos données.</string>
|
||||
<string name="crash_dialog_text">Quelque chose s\'est mal passé, S\'il vous plaît, envoyez le rapport au développeur.</string>
|
||||
<string name="crash_dialog_comment">Vous pouvez ajouter tous les détails utiles dans le champ de commentaire plus bas. N\'ajoutez aucune information personnelle. Vous pouvez m\'envoyer un email avec votre identifiant de debug, et je vous informerai à la correction du problème.</string>
|
||||
@ -167,5 +167,6 @@
|
||||
<string name="pref_debug_crash_reports">Rapport d\'erreur</string>
|
||||
<string name="pref_debug_debug_logs">Log de debug (seront envoyés automatiquement)</string>
|
||||
<string name="acra_login">Activer les logs</string>
|
||||
<string name="drawer_item_hidden_tags">Hidden Tags</string>
|
||||
<string name="drawer_item_hidden_tags">Tags Cachés</string>
|
||||
<string name="unmark">Marquer l\'article comme non lu</string>
|
||||
</resources>
|
||||
|
@ -127,7 +127,7 @@
|
||||
<string name="self_signed_cert_warning">Por razóns de seguridade, por defecto non se permiten os certificados autoasinados. Activando isto, non serei responsable de calquera problema de seguridade que atopes.</string>
|
||||
<string name="pref_selfoss_category">API de Selfoss</string>
|
||||
<string name="pref_api_items_number_title">Número de elementos cargados</string>
|
||||
<string name="pref_hidden_tags">Hidden Tags</string>
|
||||
<string name="pref_hidden_tags">Etiquetas ocultas</string>
|
||||
<string name="read_debug_title">Ler os artigos que aparecen coma non lidos?</string>
|
||||
<string name="read_debug_off">Non rexistrar cando se marca un elemento coma lido</string>
|
||||
<string name="read_debug_on">As chamadas á API serán rexistradas cando se marque un artigo coma lido</string>
|
||||
@ -167,5 +167,6 @@
|
||||
<string name="pref_debug_crash_reports">Informes de erros</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="drawer_item_hidden_tags">Hidden Tags</string>
|
||||
<string name="drawer_item_hidden_tags">Etiquetas ocultas</string>
|
||||
<string name="unmark">Marcar artículo como non lido</string>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</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,4 +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">Segna come non letto</string>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +168,5 @@
|
||||
<string name="pref_debug_debug_logs">Log de depuração (Serão enviados sem uma caixa de diálogo)</string>
|
||||
<string name="acra_login">Ativar registro de erros</string>
|
||||
<string name="drawer_item_hidden_tags">Hidden Tags</string>
|
||||
<string name="unmark">Mark item as unread</string>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -168,4 +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>
|
||||
</resources>
|
||||
|
@ -171,4 +171,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>
|
||||
</resources>
|
||||
|
@ -1,7 +1,10 @@
|
||||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.2.31'
|
||||
ext {
|
||||
kotlin_version = '1.2.51'
|
||||
android_version = '28.0.0'
|
||||
}
|
||||
repositories {
|
||||
jcenter()
|
||||
google()
|
||||
@ -10,7 +13,7 @@ buildscript {
|
||||
}
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.android.tools.build:gradle:3.1.3'
|
||||
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