Compare commits
21 Commits
Author | SHA1 | Date | |
---|---|---|---|
84dfa9a8a5 | |||
8e25489cca | |||
198f95e1ca | |||
7e02fe89ea | |||
819356412c | |||
deb789bc1b | |||
133ba74548 | |||
1461e32643 | |||
f400c3d9ac | |||
7e595a4f74 | |||
18c9c499b2 | |||
24ae115ed4 | |||
7f345558cd | |||
57177cc910 | |||
cea258bc21 | |||
ed9b1c8ba7 | |||
5a79fd89e9 | |||
42a130db08 | |||
320a8d19de | |||
5721506007 | |||
803e8cb2f4 |
28
CHANGELOG.md
28
CHANGELOG.md
@ -1,3 +1,31 @@
|
|||||||
|
**1.5.4.08**
|
||||||
|
|
||||||
|
- Thanks @jrafaelsantana for translating the whole app in Brazilian Portuguese.
|
||||||
|
|
||||||
|
**1.5.4.07**
|
||||||
|
|
||||||
|
- Loading more items on swipe too.
|
||||||
|
|
||||||
|
- Fixed popup menu style. User may need to reselect the theme.
|
||||||
|
|
||||||
|
- Disabled reporting marking items as read if there isn't an issue.
|
||||||
|
|
||||||
|
**1.5.4.05/06**
|
||||||
|
|
||||||
|
- Translation fix.
|
||||||
|
|
||||||
|
**1.5.4.04**
|
||||||
|
|
||||||
|
- Fixing an issue with marking items as read (something related to an old version of selfoss).
|
||||||
|
|
||||||
|
**1.5.4.03**
|
||||||
|
|
||||||
|
- Trying to fix some issue with pre-launch reports. Reverted because it seems to be related to the dev console side.
|
||||||
|
|
||||||
|
**1.5.4.02**
|
||||||
|
|
||||||
|
- Fixing full height cards issue.
|
||||||
|
|
||||||
**1.5.4.01**
|
**1.5.4.01**
|
||||||
|
|
||||||
- Removed the "apk downloaded from outside of playstore" message.
|
- Removed the "apk downloaded from outside of playstore" message.
|
||||||
|
@ -22,3 +22,5 @@ Check the [Contribution guide](https://github.com/aminecmi/ReaderforSelfoss/blob
|
|||||||
- [Check what changed](https://github.com/aminecmi/ReaderforSelfoss/blob/master/CHANGELOG.md)
|
- [Check what changed](https://github.com/aminecmi/ReaderforSelfoss/blob/master/CHANGELOG.md)
|
||||||
- [See what I'm doing](https://github.com/aminecmi/ReaderforSelfoss/projects/1)
|
- [See what I'm doing](https://github.com/aminecmi/ReaderforSelfoss/projects/1)
|
||||||
- [Create an issue, or request a new feature](https://github.com/aminecmi/ReaderforSelfoss/issues)
|
- [Create an issue, or request a new feature](https://github.com/aminecmi/ReaderforSelfoss/issues)
|
||||||
|
- [Help translation the app](https://crowdin.com/project/readerforselfoss)
|
||||||
|
- [Ask for help](https://gitter.im/amine-bou/ReaderForSelfoss)
|
||||||
|
@ -7,18 +7,23 @@ import android.support.constraint.ConstraintLayout
|
|||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.support.v7.widget.Toolbar
|
import android.support.v7.widget.Toolbar
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.*
|
import android.widget.AdapterView
|
||||||
|
import android.widget.ArrayAdapter
|
||||||
import retrofit2.Call
|
import android.widget.Button
|
||||||
import retrofit2.Callback
|
import android.widget.EditText
|
||||||
import retrofit2.Response
|
import android.widget.ProgressBar
|
||||||
|
import android.widget.Spinner
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Spout
|
import apps.amine.bou.readerforselfoss.api.selfoss.Spout
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
import apps.amine.bou.readerforselfoss.utils.isBaseUrlValid
|
import apps.amine.bou.readerforselfoss.utils.isBaseUrlValid
|
||||||
import com.ftinc.scoop.Scoop
|
import com.ftinc.scoop.Scoop
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
|
||||||
|
|
||||||
class AddSourceActivity : AppCompatActivity() {
|
class AddSourceActivity : AppCompatActivity() {
|
||||||
@ -50,17 +55,22 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
mustLoginToAddSource()
|
mustLoginToAddSource()
|
||||||
}
|
}
|
||||||
|
|
||||||
val intent = intent
|
maybeGetDetailsFromIntentSharing(intent, mSourceUri, mNameInput)
|
||||||
if (Intent.ACTION_SEND == intent.action && "text/plain" == intent.type) {
|
|
||||||
mSourceUri.setText(intent.getStringExtra(Intent.EXTRA_TEXT))
|
|
||||||
mNameInput.setText(intent.getStringExtra(Intent.EXTRA_TITLE))
|
|
||||||
}
|
|
||||||
|
|
||||||
mSaveBtn.setOnClickListener {
|
mSaveBtn.setOnClickListener {
|
||||||
handleSaveSource(mTags, mNameInput.text.toString(), mSourceUri.text.toString(), api!!)
|
handleSaveSource(mTags, mNameInput.text.toString(), mSourceUri.text.toString(), api!!)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val config = Config(this)
|
||||||
|
|
||||||
|
if (config.baseUrl.isEmpty() || !config.baseUrl.isBaseUrlValid()) {
|
||||||
|
mustLoginToAddSource()
|
||||||
|
} else {
|
||||||
|
handleSpoutsSpinner(mSpoutsSpinner, api, mProgress, mForm)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleSpoutsSpinner(mSpoutsSpinner: Spinner, api: SelfossApi?, mProgress: ProgressBar, mForm: ConstraintLayout) {
|
||||||
val spoutsKV = HashMap<String, String>()
|
val spoutsKV = HashMap<String, String>()
|
||||||
mSpoutsSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
mSpoutsSpinner.onItemSelectedListener = object : AdapterView.OnItemSelectedListener {
|
||||||
override fun onItemSelected(adapterView: AdapterView<*>, view: View, i: Int, l: Long) {
|
override fun onItemSelected(adapterView: AdapterView<*>, view: View, i: Int, l: Long) {
|
||||||
@ -73,12 +83,6 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
val config = Config(this)
|
|
||||||
|
|
||||||
if (config.baseUrl.isEmpty() || !config.baseUrl.isBaseUrlValid()) {
|
|
||||||
mustLoginToAddSource()
|
|
||||||
} else {
|
|
||||||
|
|
||||||
var items: Map<String, Spout>
|
var items: Map<String, Spout>
|
||||||
api!!.spouts().enqueue(object : Callback<Map<String, Spout>> {
|
api!!.spouts().enqueue(object : Callback<Map<String, Spout>> {
|
||||||
override fun onResponse(call: Call<Map<String, Spout>>, response: Response<Map<String, Spout>>) {
|
override fun onResponse(call: Call<Map<String, Spout>>, response: Response<Map<String, Spout>>) {
|
||||||
@ -116,6 +120,12 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun maybeGetDetailsFromIntentSharing(intent: Intent, mSourceUri: EditText, mNameInput: EditText) {
|
||||||
|
if (Intent.ACTION_SEND == intent.action && "text/plain" == intent.type) {
|
||||||
|
mSourceUri.setText(intent.getStringExtra(Intent.EXTRA_TEXT))
|
||||||
|
mNameInput.setText(intent.getStringExtra(Intent.EXTRA_TITLE))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun mustLoginToAddSource() {
|
private fun mustLoginToAddSource() {
|
||||||
@ -127,7 +137,9 @@ class AddSourceActivity : AppCompatActivity() {
|
|||||||
|
|
||||||
private fun handleSaveSource(mTags: EditText, title: String, url: String, api: SelfossApi) {
|
private fun handleSaveSource(mTags: EditText, title: String, url: String, api: SelfossApi) {
|
||||||
|
|
||||||
if (title.isEmpty() || url.isEmpty() || mSpoutsValue == null || mSpoutsValue!!.isEmpty()) {
|
val sourceDetailsAvailable = title.isEmpty() || url.isEmpty() || mSpoutsValue == null || mSpoutsValue!!.isEmpty()
|
||||||
|
|
||||||
|
if (sourceDetailsAvailable) {
|
||||||
Toast.makeText(this, R.string.form_not_complete, Toast.LENGTH_SHORT).show()
|
Toast.makeText(this, R.string.form_not_complete, Toast.LENGTH_SHORT).show()
|
||||||
} else {
|
} else {
|
||||||
api.createSource(
|
api.createSource(
|
||||||
|
@ -1,7 +1,5 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss
|
||||||
|
|
||||||
import java.lang.Exception
|
|
||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@ -15,41 +13,25 @@ import android.support.design.widget.CoordinatorLayout
|
|||||||
import android.support.v4.view.MenuItemCompat
|
import android.support.v4.view.MenuItemCompat
|
||||||
import android.support.v4.widget.SwipeRefreshLayout
|
import android.support.v4.widget.SwipeRefreshLayout
|
||||||
import android.support.v7.app.AppCompatActivity
|
import android.support.v7.app.AppCompatActivity
|
||||||
import android.support.v7.widget.*
|
import android.support.v7.widget.GridLayoutManager
|
||||||
|
import android.support.v7.widget.RecyclerView
|
||||||
|
import android.support.v7.widget.SearchView
|
||||||
|
import android.support.v7.widget.StaggeredGridLayoutManager
|
||||||
|
import android.support.v7.widget.Toolbar
|
||||||
import android.support.v7.widget.helper.ItemTouchHelper
|
import android.support.v7.widget.helper.ItemTouchHelper
|
||||||
import android.view.Menu
|
import android.view.Menu
|
||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.anupcowkur.reservoir.Reservoir
|
|
||||||
import com.anupcowkur.reservoir.ReservoirGetCallback
|
|
||||||
import com.anupcowkur.reservoir.ReservoirPutCallback
|
|
||||||
import com.crashlytics.android.answers.Answers
|
|
||||||
import com.crashlytics.android.answers.InviteEvent
|
|
||||||
import com.github.stkent.amplify.prompt.DefaultLayoutPromptView
|
|
||||||
import com.github.stkent.amplify.tracking.Amplify
|
|
||||||
import com.google.android.gms.appinvite.AppInviteInvitation
|
|
||||||
import com.google.android.gms.common.ConnectionResult
|
|
||||||
import com.google.android.gms.common.GoogleApiAvailability
|
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
|
||||||
import com.google.gson.reflect.TypeToken
|
|
||||||
import com.mikepenz.aboutlibraries.Libs
|
|
||||||
import com.mikepenz.aboutlibraries.LibsBuilder
|
|
||||||
import com.mikepenz.materialdrawer.Drawer
|
|
||||||
import com.mikepenz.materialdrawer.DrawerBuilder
|
|
||||||
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
|
||||||
import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
|
||||||
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
|
||||||
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.adapters.ItemCardAdapter
|
import apps.amine.bou.readerforselfoss.adapters.ItemCardAdapter
|
||||||
import apps.amine.bou.readerforselfoss.adapters.ItemListAdapter
|
import apps.amine.bou.readerforselfoss.adapters.ItemListAdapter
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.*
|
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.Stats
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.Tag
|
||||||
import apps.amine.bou.readerforselfoss.settings.SettingsActivity
|
import apps.amine.bou.readerforselfoss.settings.SettingsActivity
|
||||||
import apps.amine.bou.readerforselfoss.themes.AppColors
|
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
@ -59,14 +41,39 @@ import apps.amine.bou.readerforselfoss.utils.checkApkVersion
|
|||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
import apps.amine.bou.readerforselfoss.utils.drawer.CustomUrlPrimaryDrawerItem
|
||||||
import apps.amine.bou.readerforselfoss.utils.longHash
|
import apps.amine.bou.readerforselfoss.utils.longHash
|
||||||
|
import com.anupcowkur.reservoir.Reservoir
|
||||||
|
import com.anupcowkur.reservoir.ReservoirGetCallback
|
||||||
|
import com.anupcowkur.reservoir.ReservoirPutCallback
|
||||||
import com.ashokvarma.bottomnavigation.BottomNavigationBar
|
import com.ashokvarma.bottomnavigation.BottomNavigationBar
|
||||||
import com.ashokvarma.bottomnavigation.BottomNavigationItem
|
import com.ashokvarma.bottomnavigation.BottomNavigationItem
|
||||||
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
import com.ashokvarma.bottomnavigation.TextBadgeItem
|
||||||
|
import com.crashlytics.android.Crashlytics
|
||||||
|
import com.crashlytics.android.answers.Answers
|
||||||
|
import com.crashlytics.android.answers.InviteEvent
|
||||||
import com.ftinc.scoop.Scoop
|
import com.ftinc.scoop.Scoop
|
||||||
|
import com.github.stkent.amplify.prompt.DefaultLayoutPromptView
|
||||||
|
import com.github.stkent.amplify.tracking.Amplify
|
||||||
|
import com.google.android.gms.appinvite.AppInviteInvitation
|
||||||
|
import com.google.android.gms.common.ConnectionResult
|
||||||
|
import com.google.android.gms.common.GoogleApiAvailability
|
||||||
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||||
|
import com.google.gson.reflect.TypeToken
|
||||||
import com.heinrichreimersoftware.androidissuereporter.IssueReporterLauncher
|
import com.heinrichreimersoftware.androidissuereporter.IssueReporterLauncher
|
||||||
|
import com.mikepenz.aboutlibraries.Libs
|
||||||
|
import com.mikepenz.aboutlibraries.LibsBuilder
|
||||||
import com.mikepenz.materialdrawer.AccountHeader
|
import com.mikepenz.materialdrawer.AccountHeader
|
||||||
import com.mikepenz.materialdrawer.AccountHeaderBuilder
|
import com.mikepenz.materialdrawer.AccountHeaderBuilder
|
||||||
|
import com.mikepenz.materialdrawer.Drawer
|
||||||
|
import com.mikepenz.materialdrawer.DrawerBuilder
|
||||||
|
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
||||||
|
import com.mikepenz.materialdrawer.model.DividerDrawerItem
|
||||||
|
import com.mikepenz.materialdrawer.model.PrimaryDrawerItem
|
||||||
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
import com.mikepenz.materialdrawer.model.ProfileDrawerItem
|
||||||
|
import com.mikepenz.materialdrawer.model.SecondaryDrawerItem
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
import java.lang.Exception
|
||||||
|
|
||||||
|
|
||||||
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||||
@ -172,6 +179,10 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
reloadLayoutManager()
|
reloadLayoutManager()
|
||||||
|
|
||||||
|
handleSwipeRefreshLayout()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleSwipeRefreshLayout() {
|
||||||
swipeRefreshLayout.setColorSchemeResources(
|
swipeRefreshLayout.setColorSchemeResources(
|
||||||
R.color.refresh_progress_1,
|
R.color.refresh_progress_1,
|
||||||
R.color.refresh_progress_2,
|
R.color.refresh_progress_2,
|
||||||
@ -207,7 +218,23 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
else
|
else
|
||||||
tabNewBadge.hide()
|
tabNewBadge.hide()
|
||||||
|
|
||||||
} catch (e: IndexOutOfBoundsException) {}
|
|
||||||
|
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)) {
|
||||||
|
getElementsAccordingToTab(appendResults = true)
|
||||||
|
}
|
||||||
|
|
||||||
|
} catch (e: IndexOutOfBoundsException) {
|
||||||
|
Crashlytics.setUserIdentifier(userIdentifier)
|
||||||
|
Crashlytics.log(100, "SWIPE_INDEX_OUT_OF_BOUND", "IndexOutOfBoundsException when swiping")
|
||||||
|
Crashlytics.logException(e)
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -566,7 +593,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
|
|
||||||
drawer.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_loading)).withSelectable(false))
|
drawer.addItem(PrimaryDrawerItem().withName(getString(R.string.drawer_loading)).withSelectable(false))
|
||||||
|
|
||||||
val resultType = object : TypeToken<DrawerData>() {}.type
|
val resultType = object : TypeToken<DrawerData>() {}.type //NOSONAR
|
||||||
Reservoir.getAsync("drawerData", resultType, object: ReservoirGetCallback<DrawerData> {
|
Reservoir.getAsync("drawerData", resultType, object: ReservoirGetCallback<DrawerData> {
|
||||||
override fun onSuccess(maybeDrawerData: DrawerData?) {
|
override fun onSuccess(maybeDrawerData: DrawerData?) {
|
||||||
handleDrawerData(maybeDrawerData, loadedFromCache = true)
|
handleDrawerData(maybeDrawerData, loadedFromCache = true)
|
||||||
@ -593,30 +620,13 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
|||||||
recyclerView.setHasFixedSize(true)
|
recyclerView.setHasFixedSize(true)
|
||||||
|
|
||||||
if (infiniteScroll) {
|
if (infiniteScroll) {
|
||||||
if (recyclerViewScrollListener == null)
|
handleInfiniteScroll()
|
||||||
recyclerViewScrollListener = object: RecyclerView.OnScrollListener() {
|
|
||||||
override fun onScrolled(localRecycler: RecyclerView?, dx: Int, dy: Int) {
|
|
||||||
if (dy > 0) {
|
|
||||||
if (localRecycler != null) {
|
|
||||||
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)) {
|
handleBottomBarActions(mLayoutManager)
|
||||||
getElementsAccordingToTab(appendResults = true)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
recyclerView.clearOnScrollListeners()
|
|
||||||
recyclerView.addOnScrollListener(recyclerViewScrollListener)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBottomBarActions(mLayoutManager: RecyclerView.LayoutManager) {
|
||||||
bottomBar.setTabSelectedListener(object : BottomNavigationBar.OnTabSelectedListener {
|
bottomBar.setTabSelectedListener(object : BottomNavigationBar.OnTabSelectedListener {
|
||||||
override fun onTabUnselected(position: Int) = Unit
|
override fun onTabUnselected(position: Int) = Unit
|
||||||
|
|
||||||
@ -648,6 +658,29 @@ 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
|
||||||
|
}
|
||||||
|
|
||||||
|
if (lastVisibleItem == (items.size - 1)) {
|
||||||
|
getElementsAccordingToTab(appendResults = true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
recyclerView.clearOnScrollListeners()
|
||||||
|
recyclerView.addOnScrollListener(recyclerViewScrollListener)
|
||||||
|
}
|
||||||
|
|
||||||
fun mayBeEmpty() =
|
fun mayBeEmpty() =
|
||||||
if (items.isEmpty()) {
|
if (items.isEmpty()) {
|
||||||
emptyText.visibility = View.VISIBLE
|
emptyText.visibility = View.VISIBLE
|
||||||
|
@ -1,15 +1,14 @@
|
|||||||
package apps.amine.bou.readerforselfoss
|
package apps.amine.bou.readerforselfoss
|
||||||
|
|
||||||
import android.content.Intent
|
|
||||||
import android.net.Uri
|
|
||||||
import android.os.Bundle
|
|
||||||
import android.preference.PreferenceManager
|
|
||||||
import android.view.View
|
|
||||||
|
|
||||||
import agency.tango.materialintroscreen.MaterialIntroActivity
|
import agency.tango.materialintroscreen.MaterialIntroActivity
|
||||||
import agency.tango.materialintroscreen.MessageButtonBehaviour
|
import agency.tango.materialintroscreen.MessageButtonBehaviour
|
||||||
import agency.tango.materialintroscreen.SlideFragmentBuilder
|
import agency.tango.materialintroscreen.SlideFragmentBuilder
|
||||||
|
import android.content.Intent
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.preference.PreferenceManager
|
||||||
import android.support.v7.app.AppCompatDelegate
|
import android.support.v7.app.AppCompatDelegate
|
||||||
|
import android.view.View
|
||||||
|
|
||||||
|
|
||||||
class IntroActivity : MaterialIntroActivity() {
|
class IntroActivity : MaterialIntroActivity() {
|
||||||
|
@ -2,7 +2,6 @@ package apps.amine.bou.readerforselfoss
|
|||||||
|
|
||||||
import android.animation.Animator
|
import android.animation.Animator
|
||||||
import android.animation.AnimatorListenerAdapter
|
import android.animation.AnimatorListenerAdapter
|
||||||
import android.app.ActivityManager
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
@ -16,7 +15,11 @@ import android.view.Menu
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.inputmethod.EditorInfo
|
import android.view.inputmethod.EditorInfo
|
||||||
import android.widget.*
|
import android.widget.Button
|
||||||
|
import android.widget.EditText
|
||||||
|
import android.widget.Switch
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
@ -61,16 +64,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
val toolbar: Toolbar = findViewById(R.id.toolbar)
|
||||||
setSupportActionBar(toolbar)
|
setSupportActionBar(toolbar)
|
||||||
|
|
||||||
if (intent.getBooleanExtra("baseUrlFail", false)) {
|
handleBaseUrlFail()
|
||||||
val alertDialog = AlertDialog.Builder(this).create()
|
|
||||||
alertDialog.setTitle(getString(R.string.warning_wrong_url))
|
|
||||||
alertDialog.setMessage(getString(R.string.base_url_error))
|
|
||||||
alertDialog.setButton(
|
|
||||||
AlertDialog.BUTTON_NEUTRAL,
|
|
||||||
"OK",
|
|
||||||
{ dialog, _ -> dialog.dismiss() })
|
|
||||||
alertDialog.show()
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
settings = getSharedPreferences(Config.settingsName, Context.MODE_PRIVATE)
|
||||||
@ -92,6 +86,10 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
mLoginFormView = findViewById(R.id.login_form)
|
mLoginFormView = findViewById(R.id.login_form)
|
||||||
mProgressView = findViewById(R.id.login_progress)
|
mProgressView = findViewById(R.id.login_progress)
|
||||||
|
|
||||||
|
handleActions()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleActions() {
|
||||||
val mSwitch: Switch = findViewById(R.id.withLogin)
|
val mSwitch: Switch = findViewById(R.id.withLogin)
|
||||||
val mHTTPSwitch: Switch = findViewById(R.id.withHttpLogin)
|
val mHTTPSwitch: Switch = findViewById(R.id.withHttpLogin)
|
||||||
val mLoginLayout: TextInputLayout = findViewById(R.id.loginLayout)
|
val mLoginLayout: TextInputLayout = findViewById(R.id.loginLayout)
|
||||||
@ -136,6 +134,19 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun handleBaseUrlFail() {
|
||||||
|
if (intent.getBooleanExtra("baseUrlFail", false)) {
|
||||||
|
val alertDialog = AlertDialog.Builder(this).create()
|
||||||
|
alertDialog.setTitle(getString(R.string.warning_wrong_url))
|
||||||
|
alertDialog.setMessage(getString(R.string.base_url_error))
|
||||||
|
alertDialog.setButton(
|
||||||
|
AlertDialog.BUTTON_NEUTRAL,
|
||||||
|
"OK",
|
||||||
|
{ dialog, _ -> dialog.dismiss() })
|
||||||
|
alertDialog.show()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private fun goToMain() {
|
private fun goToMain() {
|
||||||
val intent = Intent(this, HomeActivity::class.java)
|
val intent = Intent(this, HomeActivity::class.java)
|
||||||
startActivity(intent)
|
startActivity(intent)
|
||||||
@ -245,9 +256,7 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Shows the progress UI and hides the login form.
|
|
||||||
*/
|
|
||||||
private fun showProgress(show: Boolean) {
|
private fun showProgress(show: Boolean) {
|
||||||
val shortAnimTime = resources.getInteger(android.R.integer.config_shortAnimTime)
|
val shortAnimTime = resources.getInteger(android.R.integer.config_shortAnimTime)
|
||||||
|
|
||||||
@ -285,15 +294,11 @@ class LoginActivity : AppCompatActivity() {
|
|||||||
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
||||||
when (item.itemId) {
|
when (item.itemId) {
|
||||||
R.id.about -> {
|
R.id.about -> {
|
||||||
if (!ActivityManager.isUserAMonkey()){
|
|
||||||
LibsBuilder()
|
LibsBuilder()
|
||||||
.withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
|
.withActivityStyle(Libs.ActivityStyle.LIGHT_DARK_TOOLBAR)
|
||||||
.withAboutIconShown(true)
|
.withAboutIconShown(true)
|
||||||
.withAboutVersionShown(true)
|
.withAboutVersionShown(true)
|
||||||
.start(this)
|
.start(this)
|
||||||
} else {
|
|
||||||
Toast.makeText(this@LoginActivity, "You may be a bot", Toast.LENGTH_SHORT).show()
|
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
R.id.loging_debug -> {
|
R.id.loging_debug -> {
|
||||||
|
@ -8,16 +8,14 @@ import android.support.v7.widget.LinearLayoutManager
|
|||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
import android.support.v7.widget.Toolbar
|
import android.support.v7.widget.Toolbar
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.melnykov.fab.FloatingActionButton
|
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.adapters.SourcesListAdapter
|
import apps.amine.bou.readerforselfoss.adapters.SourcesListAdapter
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
||||||
import com.ftinc.scoop.Scoop
|
import com.ftinc.scoop.Scoop
|
||||||
|
import com.melnykov.fab.FloatingActionButton
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
|
||||||
|
|
||||||
class SourcesActivity : AppCompatActivity() {
|
class SourcesActivity : AppCompatActivity() {
|
||||||
|
@ -3,7 +3,6 @@ package apps.amine.bou.readerforselfoss.adapters
|
|||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import android.support.constraint.ConstraintLayout
|
|
||||||
import android.support.design.widget.Snackbar
|
import android.support.design.widget.Snackbar
|
||||||
import android.support.v7.widget.CardView
|
import android.support.v7.widget.CardView
|
||||||
import android.support.v7.widget.RecyclerView
|
import android.support.v7.widget.RecyclerView
|
||||||
@ -15,28 +14,30 @@ import android.widget.ImageView
|
|||||||
import android.widget.ImageView.ScaleType
|
import android.widget.ImageView.ScaleType
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.amulyakhare.textdrawable.TextDrawable
|
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator
|
|
||||||
import com.bumptech.glide.Glide
|
|
||||||
import com.like.LikeButton
|
|
||||||
import com.like.OnLikeListener
|
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R
|
import apps.amine.bou.readerforselfoss.R
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.themes.AppColors
|
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||||
import apps.amine.bou.readerforselfoss.utils.*
|
import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop
|
import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.bitmapFitCenter
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.openInBrowserAsNewTask
|
||||||
|
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.toTextDrawableString
|
||||||
|
import com.amulyakhare.textdrawable.TextDrawable
|
||||||
|
import com.amulyakhare.textdrawable.util.ColorGenerator
|
||||||
|
import com.bumptech.glide.Glide
|
||||||
import com.crashlytics.android.Crashlytics
|
import com.crashlytics.android.Crashlytics
|
||||||
import kotlin.collections.ArrayList
|
import com.like.LikeButton
|
||||||
|
import com.like.OnLikeListener
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
|
||||||
class ItemCardAdapter(private val app: Activity,
|
class ItemCardAdapter(private val app: Activity,
|
||||||
private val items: ArrayList<Item>,
|
private val items: ArrayList<Item>,
|
||||||
@ -125,7 +126,7 @@ class ItemCardAdapter(private val app: Activity,
|
|||||||
|
|
||||||
api.markItem(i.id).enqueue(object : Callback<SuccessResponse> {
|
api.markItem(i.id).enqueue(object : Callback<SuccessResponse> {
|
||||||
override fun onResponse(call: Call<SuccessResponse>, response: Response<SuccessResponse>) {
|
override fun onResponse(call: Call<SuccessResponse>, response: Response<SuccessResponse>) {
|
||||||
if (debugReadingItems) {
|
if (!response.succeeded() && debugReadingItems) {
|
||||||
val message =
|
val message =
|
||||||
"message: ${response.message()} " +
|
"message: ${response.message()} " +
|
||||||
"response isSuccess: ${response.isSuccessful} " +
|
"response isSuccess: ${response.isSuccessful} " +
|
||||||
|
@ -12,26 +12,33 @@ import android.util.TypedValue
|
|||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import android.widget.*
|
import android.widget.ImageButton
|
||||||
|
import android.widget.ImageView
|
||||||
|
import android.widget.RelativeLayout
|
||||||
|
import android.widget.TextView
|
||||||
|
import android.widget.Toast
|
||||||
|
import apps.amine.bou.readerforselfoss.R
|
||||||
|
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.utils.buildCustomTabsIntent
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.openInBrowserAsNewTask
|
||||||
|
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 com.amulyakhare.textdrawable.TextDrawable
|
import com.amulyakhare.textdrawable.TextDrawable
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator
|
import com.amulyakhare.textdrawable.util.ColorGenerator
|
||||||
|
import com.crashlytics.android.Crashlytics
|
||||||
import com.like.LikeButton
|
import com.like.LikeButton
|
||||||
import com.like.OnLikeListener
|
import com.like.OnLikeListener
|
||||||
import retrofit2.Call
|
import retrofit2.Call
|
||||||
import retrofit2.Callback
|
import retrofit2.Callback
|
||||||
import retrofit2.Response
|
import retrofit2.Response
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R
|
|
||||||
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.utils.*
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.bitmapCenterCrop
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
|
||||||
import com.crashlytics.android.Crashlytics
|
|
||||||
import kotlin.collections.ArrayList
|
import kotlin.collections.ArrayList
|
||||||
|
|
||||||
|
|
||||||
@ -138,7 +145,7 @@ class ItemListAdapter(private val app: Activity,
|
|||||||
|
|
||||||
api.markItem(i.id).enqueue(object : Callback<SuccessResponse> {
|
api.markItem(i.id).enqueue(object : Callback<SuccessResponse> {
|
||||||
override fun onResponse(call: Call<SuccessResponse>, response: Response<SuccessResponse>) {
|
override fun onResponse(call: Call<SuccessResponse>, response: Response<SuccessResponse>) {
|
||||||
if (debugReadingItems) {
|
if (!response.succeeded() && debugReadingItems) {
|
||||||
val message =
|
val message =
|
||||||
"message: ${response.message()} " +
|
"message: ${response.message()} " +
|
||||||
"response isSuccess: ${response.isSuccessful} " +
|
"response isSuccess: ${response.isSuccessful} " +
|
||||||
|
@ -10,19 +10,17 @@ import android.widget.Button
|
|||||||
import android.widget.ImageView
|
import android.widget.ImageView
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
import android.widget.Toast
|
import android.widget.Toast
|
||||||
|
|
||||||
import com.amulyakhare.textdrawable.TextDrawable
|
|
||||||
import com.amulyakhare.textdrawable.util.ColorGenerator
|
|
||||||
import retrofit2.Call
|
|
||||||
import retrofit2.Callback
|
|
||||||
import retrofit2.Response
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R
|
import apps.amine.bou.readerforselfoss.R
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
import apps.amine.bou.readerforselfoss.api.selfoss.Sources
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
import apps.amine.bou.readerforselfoss.utils.glide.circularBitmapDrawable
|
||||||
import apps.amine.bou.readerforselfoss.utils.toTextDrawableString
|
import apps.amine.bou.readerforselfoss.utils.toTextDrawableString
|
||||||
|
import com.amulyakhare.textdrawable.TextDrawable
|
||||||
|
import com.amulyakhare.textdrawable.util.ColorGenerator
|
||||||
|
import retrofit2.Call
|
||||||
|
import retrofit2.Callback
|
||||||
|
import retrofit2.Response
|
||||||
|
|
||||||
|
|
||||||
class SourcesListAdapter(private val app: Activity,
|
class SourcesListAdapter(private val app: Activity,
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
package apps.amine.bou.readerforselfoss.api.selfoss
|
package apps.amine.bou.readerforselfoss.api.selfoss
|
||||||
|
|
||||||
import java.lang.reflect.Type
|
|
||||||
|
|
||||||
import com.google.gson.JsonParseException
|
|
||||||
import com.google.gson.JsonDeserializationContext
|
import com.google.gson.JsonDeserializationContext
|
||||||
import com.google.gson.JsonElement
|
|
||||||
import com.google.gson.JsonDeserializer
|
import com.google.gson.JsonDeserializer
|
||||||
|
import com.google.gson.JsonElement
|
||||||
|
import com.google.gson.JsonParseException
|
||||||
|
import java.lang.reflect.Type
|
||||||
|
|
||||||
|
|
||||||
internal class BooleanTypeAdapter : JsonDeserializer<Boolean> {
|
internal class BooleanTypeAdapter : JsonDeserializer<Boolean> {
|
||||||
|
@ -2,8 +2,8 @@ package apps.amine.bou.readerforselfoss.api.selfoss
|
|||||||
|
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import java.util.concurrent.ConcurrentHashMap
|
import apps.amine.bou.readerforselfoss.utils.Config
|
||||||
|
import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient
|
||||||
import com.burgstaller.okhttp.AuthenticationCacheInterceptor
|
import com.burgstaller.okhttp.AuthenticationCacheInterceptor
|
||||||
import com.burgstaller.okhttp.CachingAuthenticatorDecorator
|
import com.burgstaller.okhttp.CachingAuthenticatorDecorator
|
||||||
import com.burgstaller.okhttp.DispatchingAuthenticator
|
import com.burgstaller.okhttp.DispatchingAuthenticator
|
||||||
@ -13,18 +13,13 @@ import com.burgstaller.okhttp.digest.Credentials
|
|||||||
import com.burgstaller.okhttp.digest.DigestAuthenticator
|
import com.burgstaller.okhttp.digest.DigestAuthenticator
|
||||||
import com.google.gson.GsonBuilder
|
import com.google.gson.GsonBuilder
|
||||||
import okhttp3.OkHttpClient
|
import okhttp3.OkHttpClient
|
||||||
|
import okhttp3.logging.HttpLoggingInterceptor
|
||||||
import retrofit2.Call
|
import retrofit2.Call
|
||||||
import retrofit2.Retrofit
|
import retrofit2.Retrofit
|
||||||
import retrofit2.converter.gson.GsonConverterFactory
|
import retrofit2.converter.gson.GsonConverterFactory
|
||||||
|
import java.util.concurrent.ConcurrentHashMap
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config
|
|
||||||
import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient
|
|
||||||
import okhttp3.logging.HttpLoggingInterceptor
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// codebeat:disable[ARITY,TOO_MANY_FUNCTIONS]
|
|
||||||
class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Boolean, shouldLog: Boolean) {
|
class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Boolean, shouldLog: Boolean) {
|
||||||
|
|
||||||
private lateinit var service: SelfossService
|
private lateinit var service: SelfossService
|
||||||
@ -148,5 +143,3 @@ class SelfossApi(c: Context, callingActivity: Activity, isWithSelfSignedCert: Bo
|
|||||||
service.createSource(title, url, spout, tags, filter, userName, password)
|
service.createSource(title, url, spout, tags, filter, userName, password)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// codebeat:enable[ARITY,TOO_MANY_FUNCTIONS]
|
|
@ -5,17 +5,18 @@ import retrofit2.http.DELETE
|
|||||||
import retrofit2.http.Field
|
import retrofit2.http.Field
|
||||||
import retrofit2.http.FormUrlEncoded
|
import retrofit2.http.FormUrlEncoded
|
||||||
import retrofit2.http.GET
|
import retrofit2.http.GET
|
||||||
|
import retrofit2.http.Headers
|
||||||
import retrofit2.http.POST
|
import retrofit2.http.POST
|
||||||
import retrofit2.http.Path
|
import retrofit2.http.Path
|
||||||
import retrofit2.http.Query
|
import retrofit2.http.Query
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// codebeat:disable[ARITY]
|
|
||||||
internal interface SelfossService {
|
internal interface SelfossService {
|
||||||
|
|
||||||
@GET("login")
|
@GET("login")
|
||||||
fun loginToSelfoss(@Query("username") username: String, @Query("password") password: String): Call<SuccessResponse>
|
fun loginToSelfoss(@Query("username") username: String, @Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
@GET("items")
|
@GET("items")
|
||||||
fun getItems(@Query("type") type: String,
|
fun getItems(@Query("type") type: String,
|
||||||
@Query("tag") tag: String?,
|
@Query("tag") tag: String?,
|
||||||
@ -26,17 +27,21 @@ internal interface SelfossService {
|
|||||||
@Query("items") items: Int,
|
@Query("items") items: Int,
|
||||||
@Query("offset") offset: Int): Call<List<Item>>
|
@Query("offset") offset: Int): Call<List<Item>>
|
||||||
|
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/x-www-form-urlencoded")
|
||||||
@POST("mark/{id}")
|
@POST("mark/{id}")
|
||||||
fun markAsRead(@Path("id") id: String,
|
fun markAsRead(@Path("id") id: String,
|
||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/x-www-form-urlencoded")
|
||||||
@POST("unmark/{id}")
|
@POST("unmark/{id}")
|
||||||
fun unmarkAsRead(@Path("id") id: String,
|
fun unmarkAsRead(@Path("id") id: String,
|
||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
@FormUrlEncoded
|
@FormUrlEncoded
|
||||||
@POST("mark")
|
@POST("mark")
|
||||||
fun markAllAsRead(@Field("ids[]") ids: List<String>,
|
fun markAllAsRead(@Field("ids[]") ids: List<String>,
|
||||||
@ -44,12 +49,14 @@ internal interface SelfossService {
|
|||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/x-www-form-urlencoded")
|
||||||
@POST("starr/{id}")
|
@POST("starr/{id}")
|
||||||
fun starr(@Path("id") id: String,
|
fun starr(@Path("id") id: String,
|
||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
|
@Headers("Content-Type: application/x-www-form-urlencoded")
|
||||||
@POST("unstarr/{id}")
|
@POST("unstarr/{id}")
|
||||||
fun unstarr(@Path("id") id: String,
|
fun unstarr(@Path("id") id: String,
|
||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@ -70,10 +77,12 @@ internal interface SelfossService {
|
|||||||
fun update(@Query("username") username: String,
|
fun update(@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<String>
|
@Query("password") password: String): Call<String>
|
||||||
|
|
||||||
|
|
||||||
@GET("sources/spouts")
|
@GET("sources/spouts")
|
||||||
fun spouts(@Query("username") username: String,
|
fun spouts(@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<Map<String, Spout>>
|
@Query("password") password: String): Call<Map<String, Spout>>
|
||||||
|
|
||||||
|
|
||||||
@GET("sources/list")
|
@GET("sources/list")
|
||||||
fun sources(@Query("username") username: String,
|
fun sources(@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<List<Sources>>
|
@Query("password") password: String): Call<List<Sources>>
|
||||||
@ -84,6 +93,7 @@ internal interface SelfossService {
|
|||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
|
|
||||||
|
|
||||||
@FormUrlEncoded
|
@FormUrlEncoded
|
||||||
@POST("source")
|
@POST("source")
|
||||||
fun createSource(@Field("title") title: String,
|
fun createSource(@Field("title") title: String,
|
||||||
@ -94,4 +104,3 @@ internal interface SelfossService {
|
|||||||
@Query("username") username: String,
|
@Query("username") username: String,
|
||||||
@Query("password") password: String): Call<SuccessResponse>
|
@Query("password") password: String): Call<SuccessResponse>
|
||||||
}
|
}
|
||||||
// codebeat:disable[ARITY]
|
|
@ -24,7 +24,7 @@ import com.ftinc.scoop.Scoop;
|
|||||||
* A {@link PreferenceActivity} which implements and proxies the necessary calls
|
* A {@link PreferenceActivity} which implements and proxies the necessary calls
|
||||||
* to be used with AppCompat.
|
* to be used with AppCompat.
|
||||||
*/
|
*/
|
||||||
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
|
public abstract class AppCompatPreferenceActivity extends PreferenceActivity { //NOSONAR
|
||||||
|
|
||||||
private AppCompatDelegate mDelegate;
|
private AppCompatDelegate mDelegate;
|
||||||
|
|
||||||
@ -116,6 +116,7 @@ public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
|
|||||||
getDelegate().onDestroy();
|
getDelegate().onDestroy();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
public void invalidateOptionsMenu() {
|
public void invalidateOptionsMenu() {
|
||||||
getDelegate().invalidateOptionsMenu();
|
getDelegate().invalidateOptionsMenu();
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package apps.amine.bou.readerforselfoss.settings;
|
package apps.amine.bou.readerforselfoss.settings;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.annotation.TargetApi;
|
import android.annotation.TargetApi;
|
||||||
import android.content.ClipData;
|
import android.content.ClipData;
|
||||||
import android.content.ClipboardManager;
|
import android.content.ClipboardManager;
|
||||||
@ -16,17 +18,15 @@ import android.preference.Preference;
|
|||||||
import android.preference.Preference.OnPreferenceChangeListener;
|
import android.preference.Preference.OnPreferenceChangeListener;
|
||||||
import android.preference.Preference.OnPreferenceClickListener;
|
import android.preference.Preference.OnPreferenceClickListener;
|
||||||
import android.preference.PreferenceActivity;
|
import android.preference.PreferenceActivity;
|
||||||
import android.preference.SwitchPreference;
|
|
||||||
import android.support.v7.app.ActionBar;
|
|
||||||
import android.preference.PreferenceFragment;
|
import android.preference.PreferenceFragment;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
import android.preference.SwitchPreference;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
import android.text.InputFilter;
|
import android.text.InputFilter;
|
||||||
import android.text.Spanned;
|
import android.text.Spanned;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.BuildConfig;
|
import apps.amine.bou.readerforselfoss.BuildConfig;
|
||||||
import apps.amine.bou.readerforselfoss.R;
|
import apps.amine.bou.readerforselfoss.R;
|
||||||
import apps.amine.bou.readerforselfoss.utils.Config;
|
import apps.amine.bou.readerforselfoss.utils.Config;
|
||||||
@ -44,7 +44,7 @@ import com.ftinc.scoop.ui.ScoopSettingsActivity;
|
|||||||
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
|
* href="http://developer.android.com/guide/topics/ui/settings.html">Settings
|
||||||
* API Guide</a> for more information on developing a Settings UI.
|
* API Guide</a> for more information on developing a Settings UI.
|
||||||
*/
|
*/
|
||||||
public class SettingsActivity extends AppCompatPreferenceActivity {
|
public class SettingsActivity extends AppCompatPreferenceActivity { //NOSONAR
|
||||||
/**
|
/**
|
||||||
* A preference value change listener that updates the preference's summary
|
* A preference value change listener that updates the preference's summary
|
||||||
* to reflect its new value.
|
* to reflect its new value.
|
||||||
@ -126,6 +126,7 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
* This method stops fragment injection in malicious applications.
|
* This method stops fragment injection in malicious applications.
|
||||||
* Make sure to deny any unknown fragments here.
|
* Make sure to deny any unknown fragments here.
|
||||||
*/
|
*/
|
||||||
|
@Override
|
||||||
protected boolean isValidFragment(String fragmentName) {
|
protected boolean isValidFragment(String fragmentName) {
|
||||||
return PreferenceFragment.class.getName().equals(fragmentName)
|
return PreferenceFragment.class.getName().equals(fragmentName)
|
||||||
|| GeneralPreferenceFragment.class.getName().equals(fragmentName)
|
|| GeneralPreferenceFragment.class.getName().equals(fragmentName)
|
||||||
@ -166,7 +167,9 @@ public class SettingsActivity extends AppCompatPreferenceActivity {
|
|||||||
int input = Integer.parseInt(dest.toString() + source.toString());
|
int input = Integer.parseInt(dest.toString() + source.toString());
|
||||||
if (input <= 200 && input >0)
|
if (input <= 200 && input >0)
|
||||||
return null;
|
return null;
|
||||||
} catch (NumberFormatException nfe) { }
|
} catch (NumberFormatException nfe) {
|
||||||
|
Toast.makeText(getActivity(), R.string.items_number_should_be_number, Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,7 @@
|
|||||||
|
package apps.amine.bou.readerforselfoss.utils
|
||||||
|
|
||||||
|
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||||
|
import retrofit2.Response
|
||||||
|
|
||||||
|
fun Response<SuccessResponse>.succeeded(): Boolean =
|
||||||
|
this.code() === 200 && this.body() != null && this.body()!!.isSuccess
|
@ -5,11 +5,8 @@ import android.content.Intent
|
|||||||
import android.content.SharedPreferences
|
import android.content.SharedPreferences
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.support.v7.app.AlertDialog
|
import android.support.v7.app.AlertDialog
|
||||||
|
|
||||||
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R
|
import apps.amine.bou.readerforselfoss.R
|
||||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
|
||||||
|
|
||||||
|
|
||||||
fun String?.isEmptyOrNullOrNullString(): Boolean =
|
fun String?.isEmptyOrNullOrNullString(): Boolean =
|
||||||
|
@ -50,18 +50,10 @@ fun Context.buildCustomTabsIntent(): CustomTabsIntent {
|
|||||||
return intentBuilder.build()
|
return intentBuilder.build()
|
||||||
}
|
}
|
||||||
|
|
||||||
fun Context.openItemUrl(linkDecoded: String,
|
fun Context.openItemUrlInternally(linkDecoded: String,
|
||||||
customTabsIntent: CustomTabsIntent,
|
customTabsIntent: CustomTabsIntent,
|
||||||
internalBrowser: Boolean,
|
|
||||||
articleViewer: Boolean,
|
articleViewer: Boolean,
|
||||||
app: Activity) {
|
app: Activity) {
|
||||||
|
|
||||||
if (!linkDecoded.isUrlValid()) {
|
|
||||||
Toast.makeText(this, this.getString(R.string.cant_open_invalid_url), Toast.LENGTH_LONG).show()
|
|
||||||
} else {
|
|
||||||
if (!internalBrowser) {
|
|
||||||
openInBrowser(linkDecoded, app)
|
|
||||||
} else {
|
|
||||||
if (articleViewer) {
|
if (articleViewer) {
|
||||||
val intent = Intent(this, ReaderActivity::class.java)
|
val intent = Intent(this, ReaderActivity::class.java)
|
||||||
|
|
||||||
@ -86,6 +78,21 @@ fun Context.openItemUrl(linkDecoded: String,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fun Context.openItemUrl(linkDecoded: String,
|
||||||
|
customTabsIntent: CustomTabsIntent,
|
||||||
|
internalBrowser: Boolean,
|
||||||
|
articleViewer: Boolean,
|
||||||
|
app: Activity) {
|
||||||
|
|
||||||
|
if (!linkDecoded.isUrlValid()) {
|
||||||
|
Toast.makeText(this, this.getString(R.string.cant_open_invalid_url), Toast.LENGTH_LONG).show()
|
||||||
|
} else {
|
||||||
|
if (!internalBrowser) {
|
||||||
|
openInBrowser(linkDecoded, app)
|
||||||
|
} else {
|
||||||
|
this.openItemUrlInternally(linkDecoded, customTabsIntent, articleViewer, app)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,5 +1,8 @@
|
|||||||
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
@ -8,8 +11,6 @@ import android.support.customtabs.CustomTabsIntent;
|
|||||||
import android.support.customtabs.CustomTabsServiceConnection;
|
import android.support.customtabs.CustomTabsServiceConnection;
|
||||||
import android.support.customtabs.CustomTabsSession;
|
import android.support.customtabs.CustomTabsSession;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* This is a helper class to manage the connection to the Custom Tabs Service.
|
* This is a helper class to manage the connection to the Custom Tabs Service.
|
||||||
*/
|
*/
|
||||||
|
@ -1,5 +1,9 @@
|
|||||||
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
||||||
|
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
@ -9,10 +13,8 @@ import android.net.Uri;
|
|||||||
import android.support.customtabs.CustomTabsService;
|
import android.support.customtabs.CustomTabsService;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import apps.amine.bou.readerforselfoss.utils.customtabs.helpers.KeepAliveService;
|
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import apps.amine.bou.readerforselfoss.utils.customtabs.helpers.KeepAliveService;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
@SuppressWarnings("ALL")
|
@SuppressWarnings("ALL")
|
||||||
class CustomTabsHelper {
|
class CustomTabsHelper {
|
||||||
@ -101,7 +103,7 @@ class CustomTabsHelper {
|
|||||||
List<ResolveInfo> handlers = pm.queryIntentActivities(
|
List<ResolveInfo> handlers = pm.queryIntentActivities(
|
||||||
intent,
|
intent,
|
||||||
PackageManager.GET_RESOLVED_FILTER);
|
PackageManager.GET_RESOLVED_FILTER);
|
||||||
if (handlers == null || handlers.size() == 0) {
|
if (handlers == null || handlers.isEmpty()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
for (ResolveInfo resolveInfo : handlers) {
|
for (ResolveInfo resolveInfo : handlers) {
|
||||||
|
@ -1,11 +1,12 @@
|
|||||||
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
package apps.amine.bou.readerforselfoss.utils.customtabs;
|
||||||
|
|
||||||
|
|
||||||
|
import java.lang.ref.WeakReference;
|
||||||
|
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.support.customtabs.CustomTabsClient;
|
import android.support.customtabs.CustomTabsClient;
|
||||||
import android.support.customtabs.CustomTabsServiceConnection;
|
import android.support.customtabs.CustomTabsServiceConnection;
|
||||||
|
|
||||||
import java.lang.ref.WeakReference;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation for the CustomTabsServiceConnection that avoids leaking the
|
* Implementation for the CustomTabsServiceConnection that avoids leaking the
|
||||||
* ServiceConnectionCallback
|
* ServiceConnectionCallback
|
||||||
|
@ -5,14 +5,11 @@ import android.support.annotation.LayoutRes
|
|||||||
import android.support.annotation.StringRes
|
import android.support.annotation.StringRes
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.widget.TextView
|
import android.widget.TextView
|
||||||
|
import apps.amine.bou.readerforselfoss.R
|
||||||
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
import com.mikepenz.materialdrawer.holder.BadgeStyle
|
||||||
import com.mikepenz.materialdrawer.holder.StringHolder
|
import com.mikepenz.materialdrawer.holder.StringHolder
|
||||||
import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable
|
import com.mikepenz.materialdrawer.model.interfaces.ColorfulBadgeable
|
||||||
|
|
||||||
import apps.amine.bou.readerforselfoss.R
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CustomUrlPrimaryDrawerItem : CustomUrlBasePrimaryDrawerItem<CustomUrlPrimaryDrawerItem, CustomUrlPrimaryDrawerItem.ViewHolder>(), ColorfulBadgeable<CustomUrlPrimaryDrawerItem> {
|
class CustomUrlPrimaryDrawerItem : CustomUrlBasePrimaryDrawerItem<CustomUrlPrimaryDrawerItem, CustomUrlPrimaryDrawerItem.ViewHolder>(), ColorfulBadgeable<CustomUrlPrimaryDrawerItem> {
|
||||||
protected var mBadge: StringHolder = StringHolder("")
|
protected var mBadge: StringHolder = StringHolder("")
|
||||||
|
@ -6,8 +6,8 @@ import apps.amine.bou.readerforselfoss.utils.getUnsafeHttpClient
|
|||||||
import com.bumptech.glide.Glide
|
import com.bumptech.glide.Glide
|
||||||
import com.bumptech.glide.GlideBuilder
|
import com.bumptech.glide.GlideBuilder
|
||||||
import com.bumptech.glide.Registry
|
import com.bumptech.glide.Registry
|
||||||
import com.bumptech.glide.module.GlideModule
|
|
||||||
import com.bumptech.glide.load.model.GlideUrl
|
import com.bumptech.glide.load.model.GlideUrl
|
||||||
|
import com.bumptech.glide.module.GlideModule
|
||||||
import java.io.InputStream
|
import java.io.InputStream
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,7 +15,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle" />
|
app:theme="@style/ToolBarStyle"
|
||||||
|
app:popupTheme="?attr/toolbarPopupTheme" />
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
@ -54,7 +54,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle" />
|
app:theme="@style/ToolBarStyle"
|
||||||
|
app:popupTheme="?attr/toolbarPopupTheme" />
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
@ -14,7 +14,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle" />
|
app:theme="@style/ToolBarStyle"
|
||||||
|
app:popupTheme="?attr/toolbarPopupTheme" />
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
|
@ -16,7 +16,8 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle" />
|
app:theme="@style/ToolBarStyle"
|
||||||
|
app:popupTheme="?attr/toolbarPopupTheme" />
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
||||||
|
|
||||||
|
@ -9,6 +9,7 @@
|
|||||||
android:id="@+id/toolbar"
|
android:id="@+id/toolbar"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="?attr/actionBarSize"
|
android:layout_height="?attr/actionBarSize"
|
||||||
app:theme="@style/ToolBarStyle" />
|
app:theme="@style/ToolBarStyle"
|
||||||
|
app:popupTheme="?attr/toolbarPopupTheme" />
|
||||||
|
|
||||||
</android.support.design.widget.AppBarLayout>
|
</android.support.design.widget.AppBarLayout>
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Übersetzung</string>
|
<string name="translation">Übersetzung</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -6,20 +6,20 @@
|
|||||||
<string name="prompt_password">"Mot de passe"</string>
|
<string name="prompt_password">"Mot de passe"</string>
|
||||||
<string name="prompt_http_password">"Mot de passe HTTP"</string>
|
<string name="prompt_http_password">"Mot de passe HTTP"</string>
|
||||||
<string name="action_sign_in">"Valider"</string>
|
<string name="action_sign_in">"Valider"</string>
|
||||||
<string name="error_invalid_password">"Mot de passe pas assez lent"</string>
|
<string name="error_invalid_password">"Mot de passe trop court"</string>
|
||||||
<string name="error_field_required">"Champ requis"</string>
|
<string name="error_field_required">"Champ requis"</string>
|
||||||
<string name="prompt_url">"Url Selfoss"</string>
|
<string name="prompt_url">"Url Selfoss"</string>
|
||||||
<string name="withLoginSwitch">"Avec login ?"</string>
|
<string name="withLoginSwitch">"Avec login ?"</string>
|
||||||
<string name="withHttpLoginSwitch">"Avec login HTTP ?"</string>
|
<string name="withHttpLoginSwitch">"Avec login HTTP ?"</string>
|
||||||
<string name="login_url_problem">"Petit soucis. Il manque peut être un / à la fin ?"</string>
|
<string name="login_url_problem">"Petit souci. Il manque peut être un / à la fin ?"</string>
|
||||||
<string name="prompt_login">"Utilisateur"</string>
|
<string name="prompt_login">"Utilisateur"</string>
|
||||||
<string name="prompt_http_login">"Utilisateur HTTP"</string>
|
<string name="prompt_http_login">"Utilisateur HTTP"</string>
|
||||||
<string name="label_share">"Partager"</string>
|
<string name="label_share">"Partager"</string>
|
||||||
<string name="readAll">"Tout lire"</string>
|
<string name="readAll">"Tout lire"</string>
|
||||||
<string name="action_disconnect">"Déconnecter"</string>
|
<string name="action_disconnect">"Déconnecter"</string>
|
||||||
<string name="title_activity_settings">"Paramètres"</string>
|
<string name="title_activity_settings">"Paramètres"</string>
|
||||||
<string name="pref_header_general">"General"</string>
|
<string name="pref_header_general">"Général"</string>
|
||||||
<string name="pref_switch_actions_tap_title">"Action du clique sur un article"</string>
|
<string name="pref_switch_actions_tap_title">"Action du clic sur un article"</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">"Lien"</string>
|
<string name="add_source_hint_url">"Lien"</string>
|
||||||
<string name="add_source_hint_name">"Nom"</string>
|
<string name="add_source_hint_name">"Nom"</string>
|
||||||
@ -101,20 +101,20 @@
|
|||||||
<string name="card_height_on">La taille de la carte s\'adaptera au contenu</string>
|
<string name="card_height_on">La taille de la carte s\'adaptera au contenu</string>
|
||||||
<string name="card_height_off">La taille de la carte sera fixe</string>
|
<string name="card_height_off">La taille de la carte sera fixe</string>
|
||||||
<string name="source_code">Code source</string>
|
<string name="source_code">Code source</string>
|
||||||
<string name="cant_mark_read">Kan het artikel niet als gelezen markeren</string>
|
<string name="cant_mark_read">Impossible de marquer l\'article comme lu</string>
|
||||||
<string name="drawer_error_loading_tags">Erreur lors du chargement des tags…</string>
|
<string name="drawer_error_loading_tags">Erreur lors du chargement des tags…</string>
|
||||||
<string name="drawer_error_loading_sources">Erreur lors du chargement des sources…</string>
|
<string name="drawer_error_loading_sources">Erreur lors du chargement des sources…</string>
|
||||||
<string name="drawer_item_filters">Filtres</string>
|
<string name="drawer_item_filters">Filtres</string>
|
||||||
<string name="drawer_action_clear">raz</string>
|
<string name="drawer_action_clear">raz</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">Sources</string>
|
||||||
<string name="drawer_action_edit">editer</string>
|
<string name="drawer_action_edit">éditer</string>
|
||||||
<string name="cache_drawer_error" tools:keep="@string/cache_drawer_error">Impossible de mettre en cache les filtres pour le drawer</string>
|
<string name="cache_drawer_error" tools:keep="@string/cache_drawer_error">Impossible de mettre en cache les filtres pour le drawer</string>
|
||||||
<string name="no_tags_loaded">Pas de tags chargés</string>
|
<string name="no_tags_loaded">Pas de tags chargés</string>
|
||||||
<string name="no_sources_loaded">Pas de sources chargés</string>
|
<string name="no_sources_loaded">Pas de sources chargés</string>
|
||||||
<string name="drawer_loading">Chargement …</string>
|
<string name="drawer_loading">Chargement …</string>
|
||||||
<string name="menu_home_search">Rechercher</string>
|
<string name="menu_home_search">Rechercher</string>
|
||||||
<string name="can_delete_source">Can\'t delete the source…</string>
|
<string name="can_delete_source">Impossible de supprimer la source…</string>
|
||||||
<string name="base_url_error">Il y a eu un souci lors de la communication avec votre instance Selfoss. Si le problèmes persiste, contactez-moi pour trouver une solution.</string>
|
<string name="base_url_error">Il y a eu un souci lors de la communication avec votre instance Selfoss. Si le problèmes persiste, contactez-moi pour trouver une solution.</string>
|
||||||
<string name="pref_header_theme">Thèmes</string>
|
<string name="pref_header_theme">Thèmes</string>
|
||||||
<string name="default_theme">Par défaut</string>
|
<string name="default_theme">Par défaut</string>
|
||||||
@ -132,7 +132,7 @@
|
|||||||
<string name="indigo_pink_dark_theme">Indigo/Rose/Foncé</string>
|
<string name="indigo_pink_dark_theme">Indigo/Rose/Foncé</string>
|
||||||
<string name="red_teal_dark_theme">Rouge/Sarcelle/Foncé</string>
|
<string name="red_teal_dark_theme">Rouge/Sarcelle/Foncé</string>
|
||||||
<string name="pref_header_debug">Debug</string>
|
<string name="pref_header_debug">Debug</string>
|
||||||
<string name="login_debug_title">Activez pour loguer toutes les erreurs de conexion</string>
|
<string name="login_debug_title">Activez pour logguer toutes les erreurs de connexion</string>
|
||||||
<string name="login_debug_on">Toutes les erreurs de connexion vont être loguées</string>
|
<string name="login_debug_on">Toutes les erreurs de connexion vont être loguées</string>
|
||||||
<string name="login_debug_off">Aucune erreur de connexion ne sera loguée</string>
|
<string name="login_debug_off">Aucune erreur de connexion ne sera loguée</string>
|
||||||
<string name="login_menu_debug">Debug</string>
|
<string name="login_menu_debug">Debug</string>
|
||||||
@ -142,7 +142,7 @@
|
|||||||
<string name="pref_api_items_number_title">Nombre d\'articles chargés</string>
|
<string name="pref_api_items_number_title">Nombre d\'articles chargés</string>
|
||||||
<string name="read_debug_title">Des articles lus marqués comme non lus ?</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_off">Aucun log quand un article est marqué comme lu</string>
|
||||||
<string name="read_debug_on">Les appels API vont être logués lorsequ\'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>
|
||||||
<string name="summary_debug_identifier">Identifiant de debug</string>
|
<string name="summary_debug_identifier">Identifiant de debug</string>
|
||||||
<string name="unique_id_to_clipboard">Texte copié</string>
|
<string name="unique_id_to_clipboard">Texte copié</string>
|
||||||
<string name="display_header_drawer_summary">Afficher une entête avec l\'url de votre instance de Selfoss en haut du drawer lateral.</string>
|
<string name="display_header_drawer_summary">Afficher une entête avec l\'url de votre instance de Selfoss en haut du drawer lateral.</string>
|
||||||
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Traduction</string>
|
<string name="translation">Traduction</string>
|
||||||
<string name="cant_open_invalid_url">L’url de l’élément n’est pas valide. En attendant la résolution du problème, le lien ne s\'ouvrira pas.</string>
|
<string name="cant_open_invalid_url">L’url de l’élément n’est pas valide. En attendant la résolution du problème, le lien ne s\'ouvrira pas.</string>
|
||||||
<string name="drawer_report_bug">Signaler un bug</string>
|
<string name="drawer_report_bug">Signaler un bug</string>
|
||||||
|
<string name="items_number_should_be_number">Le nombre d\'articles doit être un entier.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Vertaling</string>
|
<string name="translation">Vertaling</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -2,156 +2,157 @@
|
|||||||
<!--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">"Entrar"</string>
|
||||||
<string name="prompt_password">"Password"</string>
|
<string name="prompt_password">"Senha"</string>
|
||||||
<string name="prompt_http_password">"HTTP Password"</string>
|
<string name="prompt_http_password">"Senha HTTP"</string>
|
||||||
<string name="action_sign_in">"Go"</string>
|
<string name="action_sign_in">"Vamos lá"</string>
|
||||||
<string name="error_invalid_password">"Password not long enough"</string>
|
<string name="error_invalid_password">"Senha muito pequena"</string>
|
||||||
<string name="error_field_required">"Field required"</string>
|
<string name="error_field_required">"Campo obrigatório"</string>
|
||||||
<string name="prompt_url">"Url"</string>
|
<string name="prompt_url">"Url"</string>
|
||||||
<string name="withLoginSwitch">"Login required ?"</string>
|
<string name="withLoginSwitch">"É necessário o login ?"</string>
|
||||||
<string name="withHttpLoginSwitch">"HTTP Login required ?"</string>
|
<string name="withHttpLoginSwitch">"É necessário o login 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">"Oops. Talvez você precise adicionar uma \"/\" no final da url."</string>
|
||||||
<string name="prompt_login">"Username"</string>
|
<string name="prompt_login">"Usuário"</string>
|
||||||
<string name="prompt_http_login">"HTTP Username"</string>
|
<string name="prompt_http_login">"Usuário HTTP"</string>
|
||||||
<string name="label_share">"Share"</string>
|
<string name="label_share">"Compartilhar"</string>
|
||||||
<string name="readAll">"Read all"</string>
|
<string name="readAll">"Ler todos"</string>
|
||||||
<string name="action_disconnect">"Disconnect"</string>
|
<string name="action_disconnect">"Desconectar"</string>
|
||||||
<string name="title_activity_settings">"Settings"</string>
|
<string name="title_activity_settings">"Configurações"</string>
|
||||||
<string name="pref_header_general">"General"</string>
|
<string name="pref_header_general">"Geral"</string>
|
||||||
<string name="pref_switch_actions_tap_title">"Tap action on the articles"</string>
|
<string name="pref_switch_actions_tap_title">"Ação de tocar nos artigos"</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">"Adicionar uma fonte"</string>
|
||||||
<string name="add_source_save">"Save"</string>
|
<string name="add_source_save">"Salvar"</string>
|
||||||
<string name="wrong_infos">"Check your details again."</string>
|
<string name="wrong_infos">"Verifique os detalhes novamente."</string>
|
||||||
<string name="all_posts_not_read">"All posts weren't read"</string>
|
<string name="all_posts_not_read">"Nenhum post foi lido"</string>
|
||||||
<string name="all_posts_read">"All posts were read"</string>
|
<string name="all_posts_read">"Todos os posts foram lidos"</string>
|
||||||
<string name="cant_get_favs">"Can't get favorites"</string>
|
<string name="cant_get_favs">"Não consigo obter os favoritos"</string>
|
||||||
<string name="cant_get_new_elements">"Can't get new articles"</string>
|
<string name="cant_get_new_elements">"Não consigo obter novos artigos"</string>
|
||||||
<string name="cant_get_read">"Can't get read articles"</string>
|
<string name="cant_get_read">"Não consigo ler artigos"</string>
|
||||||
<string name="nothing_here">"Nothing here"</string>
|
<string name="nothing_here">"Nada aqui"</string>
|
||||||
<string name="tab_new">"New"</string>
|
<string name="tab_new">"Novo"</string>
|
||||||
<string name="tab_read">"All"</string>
|
<string name="tab_read">"Todos"</string>
|
||||||
<string name="tab_favs">"Favorites"</string>
|
<string name="tab_favs">"Favoritos"</string>
|
||||||
<string name="action_about">"About"</string>
|
<string name="action_about">"Sobre"</string>
|
||||||
<string name="marked_as_read">"Item read"</string>
|
<string name="marked_as_read">"Item lido"</string>
|
||||||
<string name="undo_string">"Undo"</string>
|
<string name="undo_string">"Desfazer"</string>
|
||||||
<string name="addStringNoUrl">"Log in to add sources."</string>
|
<string name="addStringNoUrl">"Faça login para adicionar fontes."</string>
|
||||||
<string name="cant_get_sources">"Can't get sources list."</string>
|
<string name="cant_get_sources">"Não é possível obter a lista de fontes."</string>
|
||||||
<string name="cant_create_source">"Can't create source."</string>
|
<string name="cant_create_source">"Não é possível criar fonte."</string>
|
||||||
<string name="cant_get_spouts">"Can't get spouts list."</string>
|
<string name="cant_get_spouts">"Não é possível obter a lista de spouts."</string>
|
||||||
<string name="form_not_complete">"The form is not complete"</string>
|
<string name="form_not_complete">"O formulário não está 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">"Rastreador de problemas"</string>
|
||||||
<string name="issue_tracker_summary">"Report a bug or ask for a new feature"</string>
|
<string name="issue_tracker_summary">"Informe um erro ou peça um novo recurso"</string>
|
||||||
<string name="warning_wrong_url">"WARNING"</string>
|
<string name="warning_wrong_url">"ATENÇÃO"</string>
|
||||||
<string name="pref_switch_card_view_title">"Card View"</string>
|
<string name="pref_switch_card_view_title">"Card View"</string>
|
||||||
<string name="cant_mark_favortie">"Can't mark article as favorite"</string>
|
<string name="cant_mark_favortie">"Não é possível marcar o artigo como favorito"</string>
|
||||||
<string name="cant_unmark_favortie">"Can't remove item from favorite"</string>
|
<string name="cant_unmark_favortie">"Não é possível remover o item do favorito"</string>
|
||||||
<string name="share">"Share"</string>
|
<string name="share">"Compartilhar"</string>
|
||||||
<string name="rating_prompt_title">"Enjoying the app ?"</string>
|
<string name="rating_prompt_title">"Aproveitando o app ?"</string>
|
||||||
<string name="rating_prompt_yes">"Yes !"</string>
|
<string name="rating_prompt_yes">"Sim !"</string>
|
||||||
<string name="rating_prompt_no">"Not really …"</string>
|
<string name="rating_prompt_no">"Na verdade não …"</string>
|
||||||
<string name="rating_prompt_feedback_title">"Can you tell us why ?"</string>
|
<string name="rating_prompt_feedback_title">"Você pode nos dizer o porquê ?"</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">"Não agora."</string>
|
||||||
<string name="rating_prompt_rating_title">"Great ! Can you rate us on the Store ?"</string>
|
<string name="rating_prompt_rating_title">"Ótimo ! Você pode nos avaliar na loja ?"</string>
|
||||||
<string name="rating_prompt_rating_yes">"Sure !"</string>
|
<string name="rating_prompt_rating_yes">"Com certeza !"</string>
|
||||||
<string name="rating_prompt_rating_no">"Not right now."</string>
|
<string name="rating_prompt_rating_no">"Não agora."</string>
|
||||||
<string name="rating_prompt_thanks">"Thanks, your feedback help enhance the app !"</string>
|
<string name="rating_prompt_thanks">"Obrigado, seu comentário ajuda a melhorar o app !"</string>
|
||||||
<string name="switch_unread_count">"Display the unread count as a badge for the bottom bar."</string>
|
<string name="switch_unread_count">"Exibir a contagem de artigos não lidos como um badge na barra inferior."</string>
|
||||||
<string name="switch_unread_count_title">"Display unread count"</string>
|
<string name="switch_unread_count_title">"Exibir contagem de artigos não lidos"</string>
|
||||||
<string name="display_all_counts_title">"Display count for favorite and read"</string>
|
<string name="display_all_counts_title">"Exibir contagem de lidos e favoritos"</string>
|
||||||
<string name="menu_share_the_app">"Invite friends"</string>
|
<string name="menu_share_the_app">"Convidar amigos"</string>
|
||||||
<string name="invitation_title">"Try this app for your Selfoss RSS feeds !"</string>
|
<string name="invitation_title">"Experimente este aplicativo para seus feeds RSS do Selfoss !"</string>
|
||||||
<string name="invitation_message">"I use this app for my Selfoss RSS feeds. You may like it too !"</string>
|
<string name="invitation_message">"Eu uso o app para o visualizar meu feed RSS do Selfoss. Você vai gostar também !"</string>
|
||||||
<string name="invitation_cta">"Try the app"</string>
|
<string name="invitation_cta">"Experimente o aplicativo"</string>
|
||||||
<string name="text_wrong_url">"You seem to be trying to use an invalid URL. Make sure it is correct, and if the problem persists, contact me (via the store contact link). Please note that the app needs you to be using Selfoss. You can't access RSS feeds without it."</string>
|
<string name="text_wrong_url">"Parece que você está tentando utilizar uma URL inválida. Certifique-se de que está correto, e se o problema persistir, entre em contato comigo (através do link de contato da loja). Por favor, note que o aplicativo precisa que você esteja usando o Selfoss. Você não pode acessar feeds RSS sem ele."</string>
|
||||||
<string name="pref_general_internal_browser_title">"Open links inside the app"</string>
|
<string name="pref_general_internal_browser_title">"Abrir links dentro do aplicativo"</string>
|
||||||
<string name="pref_general_internal_browser_on">"Articles will open inside the app"</string>
|
<string name="pref_general_internal_browser_on">"Os artigos serão abertos dentro do aplicativo"</string>
|
||||||
<string name="pref_general_internal_browser_off">"Articles will open with your default browser"</string>
|
<string name="pref_general_internal_browser_off">"Os artigos serão abertos com seu navegador padrão"</string>
|
||||||
<string name="prefer_article_viewer_title">"Use the article viewer"</string>
|
<string name="prefer_article_viewer_title">"Use o visualizador de artigos"</string>
|
||||||
<string name="prefer_article_viewer_on">"Will use the article viewer instead of the internal browser"</string>
|
<string name="prefer_article_viewer_on">"Usará o visualizador de artigos em vez do navegador"</string>
|
||||||
<string name="prefer_article_viewer_off">"Will use the internal browser instead of the article viewer"</string>
|
<string name="prefer_article_viewer_off">"Utilizará o navegador em vez do visualizador de artigos"</string>
|
||||||
<string name="pref_general_category_links">"Link handeling"</string>
|
<string name="pref_general_category_links">"Manipulação de links"</string>
|
||||||
<string name="pref_general_category_displaying">"Displaying"</string>
|
<string name="pref_general_category_displaying">"Mostrando"</string>
|
||||||
<string name="pref_general_category_actions">"Actions"</string>
|
<string name="pref_general_category_actions">"Ações"</string>
|
||||||
<string name="pref_switch_card_view_on">"The articles will be displayed as cards"</string>
|
<string name="pref_switch_card_view_on">"Os artigos serão exibidos no formato de cards"</string>
|
||||||
<string name="pref_switch_card_view_off">"The articles will be displayed as a list"</string>
|
<string name="pref_switch_card_view_off">"Os artigos serão exibidos em lista"</string>
|
||||||
<string name="pref_switch_actions_tap_on">"Displays the action bar under the article"</string>
|
<string name="pref_switch_actions_tap_on">"Exibe a barra de ação sob o artigo"</string>
|
||||||
<string name="pref_switch_actions_tap_off">"When selecting an article it will open in your selected browser"</string>
|
<string name="pref_switch_actions_tap_off">"Ao selecionar um artigo, ele será aberto no seu navegador selecionado"</string>
|
||||||
<string name="menu_home_refresh">"Update remote"</string>
|
<string name="menu_home_refresh">"Atualizar controle remoto"</string>
|
||||||
<string name="refresh_success_response">"The remote is updated, you can now reload the articles list"</string>
|
<string name="refresh_success_response">"O controle remoto foi atualizado, agora você pode recarregar a lista de artigos"</string>
|
||||||
<string name="refresh_failer_message">"The update didn't work, try again later, or check your selfoss logs."</string>
|
<string name="refresh_failer_message">"A atualização não funcionou, tente novamente mais tarde ou verifique seus logs do Selfoss."</string>
|
||||||
<string name="refresh_in_progress">"Refresh in progress"</string>
|
<string name="refresh_in_progress">"Atualização em progresso"</string>
|
||||||
<string name="new_apk_available_title">"A new APK is available."</string>
|
<string name="new_apk_available_title">"Um novo APK está disponível."</string>
|
||||||
<string name="new_apk_available_message">"A new APK is available to download on the official repository."</string>
|
<string name="new_apk_available_message">"Um novo APK está disponível para download no repositório oficial."</string>
|
||||||
<string name="new_apk_available_get">"Download now"</string>
|
<string name="new_apk_available_get">"Baixar agora"</string>
|
||||||
<string name="new_apk_available_no">"Ignore version"</string>
|
<string name="new_apk_available_no">"Ignorar"</string>
|
||||||
<string name="intro_hello_title">"Hi there !"</string>
|
<string name="intro_hello_title">"Olá !"</string>
|
||||||
<string name="intro_hello_message">"Thanks for downloading the app !"</string>
|
<string name="intro_hello_message">"Obrigado por baixar o app !"</string>
|
||||||
<string name="intro_needs_selfoss_title">"Before you start…"</string>
|
<string name="intro_needs_selfoss_title">"Antes que você comece…"</string>
|
||||||
<string name="intro_needs_selfoss_message">"You can't use the app without a Selfoss instance."</string>
|
<string name="intro_needs_selfoss_message">"Você não pode usar o aplicativo sem uma instância do Selfoss."</string>
|
||||||
<string name="intro_needs_selfoss_link">"What is Selfoss ?"</string>
|
<string name="intro_needs_selfoss_link">"O que é Selfoss ?"</string>
|
||||||
<string name="intro_all_set_title">"All set !"</string>
|
<string name="intro_all_set_title">"Tudo 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">"Você está pronto para usar o aplicativo. Não se esqueça de acessar a página de configurações para configurar seu aplicativo e onde você encontrará alguns links úteis."</string>
|
||||||
<string name="card_height_title">Full height cards</string>
|
<string name="card_height_title">Cards com altura total</string>
|
||||||
<string name="card_height_on">Cards height will adjust to its content</string>
|
<string name="card_height_on">Cards com altura ajustáveis de acordo com o conteúdo</string>
|
||||||
<string name="card_height_off">Card height will be fixed</string>
|
<string name="card_height_off">Cards com altura de tamanho fixo</string>
|
||||||
<string name="source_code">Source code</string>
|
<string name="source_code">Código fonte</string>
|
||||||
<string name="cant_mark_read">Can\'t mark article as read</string>
|
<string name="cant_mark_read">Não é possível marcar o artigo como lido</string>
|
||||||
<string name="drawer_error_loading_tags">Error loading tags…</string>
|
<string name="drawer_error_loading_tags">Erro ao carregar as tags…</string>
|
||||||
<string name="drawer_error_loading_sources">Error loading sources…</string>
|
<string name="drawer_error_loading_sources">Erro ao carregar as fontes…</string>
|
||||||
<string name="drawer_item_filters">Filters</string>
|
<string name="drawer_item_filters">Filtros</string>
|
||||||
<string name="drawer_action_clear">clear</string>
|
<string name="drawer_action_clear">limpar</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">Fontes</string>
|
||||||
<string name="drawer_action_edit">edit</string>
|
<string name="drawer_action_edit">editar</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">Não foi possível recuperar os dados em cache</string>
|
||||||
<string name="no_tags_loaded">No tags loaded</string>
|
<string name="no_tags_loaded">Nenhuma tag carregada</string>
|
||||||
<string name="no_sources_loaded">No sources loaded</string>
|
<string name="no_sources_loaded">Nenhuma fonte carregada</string>
|
||||||
<string name="drawer_loading">Loading …</string>
|
<string name="drawer_loading">Carregando …</string>
|
||||||
<string name="menu_home_search">Search</string>
|
<string name="menu_home_search">Procurar</string>
|
||||||
<string name="can_delete_source">Can\'t delete the source…</string>
|
<string name="can_delete_source">Não foi possível apagar a 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">Houve um problema ao tentar se comunicar com o seu Selfoss. Se o problema persistir, entre em contato comigo.</string>
|
||||||
<string name="pref_header_theme">Themes</string>
|
<string name="pref_header_theme">Temas</string>
|
||||||
<string name="default_theme">Default</string>
|
<string name="default_theme">Padrão</string>
|
||||||
<string name="teal_orange_theme">Teal/Orange/Light</string>
|
<string name="teal_orange_theme">Cerceta/Laranja/Claro</string>
|
||||||
<string name="cyan_pink_theme">Cyan/Pink/Light</string>
|
<string name="cyan_pink_theme">Ciano/Rosa/Claro</string>
|
||||||
<string name="grey_orange_theme">Grey/Orange/Light</string>
|
<string name="grey_orange_theme">Cinza/Laranja/Claro</string>
|
||||||
<string name="blue_amber_theme">Blue/Amber/Light</string>
|
<string name="blue_amber_theme">Azul/Âmbar/Claro</string>
|
||||||
<string name="indigo_pink_theme">Indigo/Pink/Light</string>
|
<string name="indigo_pink_theme">Índigo/Rosa/Claro</string>
|
||||||
<string name="red_teal_theme">Red/Teal/Light</string>
|
<string name="red_teal_theme">Vermelho/Cerceta/Claro</string>
|
||||||
<string name="teal_orange_dark_theme">Teal/Orange/Dark</string>
|
<string name="teal_orange_dark_theme">Cerceta/Laranja/Escuro</string>
|
||||||
<string name="cyan_pink_dark_theme">Cyan/Pink/Dark</string>
|
<string name="cyan_pink_dark_theme">Ciano/Rosa/Escuro</string>
|
||||||
<string name="default_dark_theme">Default/Dark</string>
|
<string name="default_dark_theme">Padrão/Escuro</string>
|
||||||
<string name="grey_orange_dark_theme">Grey/Orange/Dark</string>
|
<string name="grey_orange_dark_theme">Cinza/Laranja/Escuro</string>
|
||||||
<string name="blue_amber_dark_theme">Blue/Amber/Dark</string>
|
<string name="blue_amber_dark_theme">Azul/Âmbar/Escuro</string>
|
||||||
<string name="indigo_pink_dark_theme">Indigo/Pink/Dark</string>
|
<string name="indigo_pink_dark_theme">Índigo/Rosa/Escuro</string>
|
||||||
<string name="red_teal_dark_theme">Red/Teal/Dark</string>
|
<string name="red_teal_dark_theme">Vermelho/Âmbar/Escuro</string>
|
||||||
<string name="pref_header_debug">Debug</string>
|
<string name="pref_header_debug">Depurar</string>
|
||||||
<string name="login_debug_title">Activate to log login errors</string>
|
<string name="login_debug_title">Ativar para registrar erros de login</string>
|
||||||
<string name="login_debug_on">Any error on the login page will be logged</string>
|
<string name="login_debug_on">Qualquer erro na página de login será registrado</string>
|
||||||
<string name="login_debug_off">No log on the login page</string>
|
<string name="login_debug_off">Nenhum registro na página de login</string>
|
||||||
<string name="login_menu_debug">Debug</string>
|
<string name="login_menu_debug">Depurar</string>
|
||||||
<string name="self_hosted_cert_switch">Using a self hosted certificate ?</string>
|
<string name="self_hosted_cert_switch">Usando um certificado autônomo ?</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">Por motivos de segurança, certificados autônomos não são suportados por padrão. Ao ativar, não serei responsável por qualquer problema de segurança que você encontre.</string>
|
||||||
<string name="pref_selfoss_category">Selfoss Api</string>
|
<string name="pref_selfoss_category">Selfoss Api</string>
|
||||||
<string name="pref_api_items_number_title">Loaded items number</string>
|
<string name="pref_api_items_number_title">Quantidade de itens carregados</string>
|
||||||
<string name="read_debug_title">Read articles appearing as unread ?</string>
|
<string name="read_debug_title">Ler os artigos que aparecem como não lidos ?</string>
|
||||||
<string name="read_debug_off">No log when marking an item as read</string>
|
<string name="read_debug_off">Nenhum registro ao marcar um item como lido</string>
|
||||||
<string name="read_debug_on">Api calls will be logged when marking an article as read</string>
|
<string name="read_debug_on">As chamadas Api serão registradas ao marcar um artigo como lido</string>
|
||||||
<string name="summary_debug_identifier">Debug identifier</string>
|
<string name="summary_debug_identifier">Identificador de depuração</string>
|
||||||
<string name="unique_id_to_clipboard">Identifier copied to your clipboard</string>
|
<string name="unique_id_to_clipboard">Identificador copiado para a área de transferência</string>
|
||||||
<string name="display_header_drawer_summary">Display a header with the selfoss instance url on the lateral drawer.</string>
|
<string name="display_header_drawer_summary">Exibir um cabeçalho com o URL da instância do Selfoss na barra lateral.</string>
|
||||||
<string name="display_header_drawer_title">Account header</string>
|
<string name="display_header_drawer_title">Cabeçalho da conta</string>
|
||||||
<string name="login_everything_title">Logging every api calls</string>
|
<string name="login_everything_title">Registrando todas as chamadas a api</string>
|
||||||
<string name="login_everything_on">This will log every api call for debug purpose.</string>
|
<string name="login_everything_on">Isso registrará todas as chamadas api para fins de depuração.</string>
|
||||||
<string name="login_everything_off">No api call will be logged</string>
|
<string name="login_everything_off">Nenhuma chamada a api será registrada</string>
|
||||||
<string name="pref_general_infinite_loading_title">(BETA) Load more articles on scroll</string>
|
<string name="pref_general_infinite_loading_title">(BETA) Carregar mais artigos ao realizar o scroll</string>
|
||||||
<string name="translation">Translation</string>
|
<string name="translation">Traduções</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">A url está inválida. Estou tentando resolver esse problema para que o aplicativo não encerre.</string>
|
||||||
<string name="drawer_report_bug">Report a bug</string>
|
<string name="drawer_report_bug">Reportar erro</string>
|
||||||
|
<string name="items_number_should_be_number">O número dos itens deve ser um número inteiro.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -154,4 +154,5 @@
|
|||||||
<string name="translation">Translation</string>
|
<string name="translation">Translation</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">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
@ -157,4 +157,5 @@
|
|||||||
<string name="report_github_user" translatable="false">aminecmi</string>
|
<string name="report_github_user" translatable="false">aminecmi</string>
|
||||||
<string name="report_github_repo" translatable="false">ReaderforSelfoss</string>
|
<string name="report_github_repo" translatable="false">ReaderforSelfoss</string>
|
||||||
<string name="drawer_report_bug">Report a bug</string>
|
<string name="drawer_report_bug">Report a bug</string>
|
||||||
|
<string name="items_number_should_be_number">The items number should be an integer.</string>
|
||||||
</resources>
|
</resources>
|
@ -14,6 +14,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarDark" parent="MaterialDrawerTheme">
|
<style name="NoBarDark" parent="MaterialDrawerTheme">
|
||||||
@ -27,6 +29,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<!-- ToolBar -->
|
<!-- ToolBar -->
|
||||||
@ -50,6 +54,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarBlueAmberDark" parent="MaterialDrawerTheme">
|
<style name="NoBarBlueAmberDark" parent="MaterialDrawerTheme">
|
||||||
@ -63,6 +69,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarGreyOrange" parent="MaterialDrawerTheme.Light">
|
<style name="NoBarGreyOrange" parent="MaterialDrawerTheme.Light">
|
||||||
@ -75,6 +83,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarGreyOrangeDark" parent="MaterialDrawerTheme">
|
<style name="NoBarGreyOrangeDark" parent="MaterialDrawerTheme">
|
||||||
@ -88,6 +98,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarIndigoPink" parent="MaterialDrawerTheme.Light">
|
<style name="NoBarIndigoPink" parent="MaterialDrawerTheme.Light">
|
||||||
@ -100,6 +112,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarIndigoPinkDark" parent="MaterialDrawerTheme">
|
<style name="NoBarIndigoPinkDark" parent="MaterialDrawerTheme">
|
||||||
@ -113,6 +127,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarRedTeal" parent="MaterialDrawerTheme.Light">
|
<style name="NoBarRedTeal" parent="MaterialDrawerTheme.Light">
|
||||||
@ -125,6 +141,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarRedTealDark" parent="MaterialDrawerTheme">
|
<style name="NoBarRedTealDark" parent="MaterialDrawerTheme">
|
||||||
@ -138,6 +156,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarCyanPink" parent="MaterialDrawerTheme.Light">
|
<style name="NoBarCyanPink" parent="MaterialDrawerTheme.Light">
|
||||||
@ -150,6 +170,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarCyanPinkDark" parent="MaterialDrawerTheme">
|
<style name="NoBarCyanPinkDark" parent="MaterialDrawerTheme">
|
||||||
@ -163,6 +185,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|
||||||
@ -176,6 +200,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
<item name="android:textColorPrimary">@color/md_grey_900</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
<item name="android:textColorSecondary">@color/md_grey_400</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="NoBarTealOrangeDark" parent="MaterialDrawerTheme">
|
<style name="NoBarTealOrangeDark" parent="MaterialDrawerTheme">
|
||||||
@ -189,6 +215,8 @@
|
|||||||
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
<item name="android:textColorPrimary">@color/md_white_1000</item>
|
||||||
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
<item name="android:textColorSecondary">@color/md_grey_600</item>
|
||||||
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
<item name="material_drawer_header_selection_text">@color/md_grey_900</item>
|
||||||
|
|
||||||
|
<item name="toolbarPopupTheme">@style/ThemeOverlay.AppCompat.Dark</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<style name="Theme.App.Light" parent="Theme.IssueReporter.Light.DarkActionBar">
|
<style name="Theme.App.Light" parent="Theme.IssueReporter.Light.DarkActionBar">
|
||||||
|
Reference in New Issue
Block a user