Allow marking articles as read from the article reader (#346)
* Add new items according to the selfoss id, to avoid duplicate items. * Migrate setting articles as read from ArticleFragment to SharedItems * Removed unused assertion * Allow marking articles as read from the article reader
This commit is contained in:
parent
46e723a238
commit
58a498868d
@ -377,11 +377,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener {
|
||||
|
||||
handleOfflineActions()
|
||||
|
||||
if (markOnScroll) {
|
||||
items = SharedItems.focusedItems
|
||||
allItems = SharedItems.items
|
||||
handleListResult()
|
||||
}
|
||||
getElementsAccordingToTab()
|
||||
}
|
||||
|
||||
private fun getAndStoreAllItems() {
|
||||
|
@ -14,6 +14,7 @@ import android.os.Bundle
|
||||
import android.preference.PreferenceManager
|
||||
import android.view.*
|
||||
import android.webkit.*
|
||||
import android.widget.Toast
|
||||
import androidx.browser.customtabs.CustomTabsIntent
|
||||
import com.google.android.material.floatingactionbutton.FloatingActionButton
|
||||
import androidx.fragment.app.Fragment
|
||||
@ -28,25 +29,17 @@ import apps.amine.bou.readerforselfoss.api.mercury.MercuryApi
|
||||
import apps.amine.bou.readerforselfoss.api.mercury.ParsedContent
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.Item
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.SelfossApi
|
||||
import apps.amine.bou.readerforselfoss.api.selfoss.SuccessResponse
|
||||
import apps.amine.bou.readerforselfoss.databinding.FragmentArticleBinding
|
||||
import apps.amine.bou.readerforselfoss.persistence.database.AppDatabase
|
||||
import apps.amine.bou.readerforselfoss.persistence.entities.ActionEntity
|
||||
import apps.amine.bou.readerforselfoss.persistence.migrations.MIGRATION_1_2
|
||||
import apps.amine.bou.readerforselfoss.persistence.migrations.MIGRATION_2_3
|
||||
import apps.amine.bou.readerforselfoss.persistence.migrations.MIGRATION_3_4
|
||||
import apps.amine.bou.readerforselfoss.themes.AppColors
|
||||
import apps.amine.bou.readerforselfoss.utils.Config
|
||||
import apps.amine.bou.readerforselfoss.utils.buildCustomTabsIntent
|
||||
import apps.amine.bou.readerforselfoss.utils.*
|
||||
import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper
|
||||
import apps.amine.bou.readerforselfoss.utils.glide.loadMaybeBasicAuth
|
||||
import apps.amine.bou.readerforselfoss.utils.glide.getBitmapInputStream
|
||||
import apps.amine.bou.readerforselfoss.utils.isEmptyOrNullOrNullString
|
||||
import apps.amine.bou.readerforselfoss.utils.network.isNetworkAccessible
|
||||
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.bumptech.glide.Glide
|
||||
import com.bumptech.glide.load.engine.DiskCacheStrategy
|
||||
import com.bumptech.glide.request.RequestOptions
|
||||
@ -58,7 +51,6 @@ import java.net.MalformedURLException
|
||||
import java.net.URL
|
||||
import java.util.concurrent.ExecutionException
|
||||
import kotlin.collections.ArrayList
|
||||
import kotlin.concurrent.thread
|
||||
|
||||
class ArticleFragment : Fragment() {
|
||||
private lateinit var pageNumber: Number
|
||||
@ -181,25 +173,33 @@ class ArticleFragment : Fragment() {
|
||||
false,
|
||||
requireActivity()
|
||||
)
|
||||
R.id.unread_action -> if ((context != null && requireContext().isNetworkAccessible(null)) || context == null) {
|
||||
api.unmarkItem(allItems[pageNumber.toInt()].id).enqueue(
|
||||
object : Callback<SuccessResponse> {
|
||||
override fun onResponse(
|
||||
call: Call<SuccessResponse>,
|
||||
response: Response<SuccessResponse>
|
||||
) {
|
||||
}
|
||||
|
||||
override fun onFailure(
|
||||
call: Call<SuccessResponse>,
|
||||
t: Throwable
|
||||
) {
|
||||
}
|
||||
}
|
||||
)
|
||||
} else {
|
||||
thread {
|
||||
db.actionsDao().insertAllActions(ActionEntity(allItems[pageNumber.toInt()].id, false, true, false, false))
|
||||
R.id.unread_action -> if (context != null) {
|
||||
if (allItems[pageNumber.toInt()].unread) {
|
||||
SharedItems.readItem(
|
||||
context!!,
|
||||
api,
|
||||
db,
|
||||
allItems[pageNumber.toInt()]
|
||||
)
|
||||
allItems[pageNumber.toInt()].unread = false
|
||||
Toast.makeText(
|
||||
context,
|
||||
R.string.marked_as_read,
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
} else {
|
||||
SharedItems.unreadItem(
|
||||
context!!,
|
||||
api,
|
||||
db,
|
||||
allItems[pageNumber.toInt()]
|
||||
)
|
||||
allItems[pageNumber.toInt()].unread = true
|
||||
Toast.makeText(
|
||||
context,
|
||||
R.string.marked_as_unread,
|
||||
Toast.LENGTH_LONG
|
||||
).show()
|
||||
}
|
||||
}
|
||||
else -> Unit
|
||||
|
@ -72,10 +72,17 @@ object SharedItems {
|
||||
var badgeAll = -1
|
||||
var badgeStarred = -1
|
||||
|
||||
/**
|
||||
* Add new items to the SharedItems list
|
||||
*
|
||||
* The new items are considered more updated than the ones already in the list.
|
||||
* The old items present in the new list are discarded and replaced by the new ones.
|
||||
* Items are compared according to the selfoss id, which should always be unique.
|
||||
*/
|
||||
fun appendNewItems(newItems: ArrayList<Item>) {
|
||||
val tmpItems = items
|
||||
var tmpItems = items
|
||||
if (tmpItems != newItems) {
|
||||
newItems.removeAll(tmpItems)
|
||||
tmpItems = tmpItems.filter { item -> newItems.find { it.id == item.id } == null } as ArrayList<Item>
|
||||
tmpItems.addAll(newItems)
|
||||
items = tmpItems
|
||||
|
||||
|
5
app/src/main/res/drawable/ic_baseline_white_eye_24dp.xml
Normal file
5
app/src/main/res/drawable/ic_baseline_white_eye_24dp.xml
Normal file
@ -0,0 +1,5 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24" android:viewportWidth="24"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="@android:color/white" android:pathData="M12,4.5C7,4.5 2.73,7.61 1,12c1.73,4.39 6,7.5 11,7.5s9.27,-3.11 11,-7.5c-1.73,-4.39 -6,-7.5 -11,-7.5zM12,17c-2.76,0 -5,-2.24 -5,-5s2.24,-5 5,-5 5,2.24 5,5 -2.24,5 -5,5zM12,9c-1.66,0 -3,1.34 -3,3s1.34,3 3,3 3,-1.34 3,-3 -1.34,-3 -3,-3z"/>
|
||||
</vector>
|
@ -1,5 +0,0 @@
|
||||
<vector android:height="24dp" android:tint="#FFFFFF"
|
||||
android:viewportHeight="24.0" android:viewportWidth="24.0"
|
||||
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<path android:fillColor="#FF000000" android:pathData="M20,4L4,4c-1.11,0 -1.99,0.89 -1.99,2L2,18c0,1.11 0.89,2 2,2h16c1.11,0 2,-0.89 2,-2L22,6c0,-1.11 -0.89,-2 -2,-2zM8.5,15L7.3,15l-2.55,-3.5L4.75,15L3.5,15L3.5,9h1.25l2.5,3.5L7.25,9L8.5,9v6zM13.5,10.26L11,10.26v1.12h2.5v1.26L11,12.64v1.11h2.5L13.5,15h-4L9.5,9h4v1.26zM20.5,14c0,0.55 -0.45,1 -1,1h-4c-0.55,0 -1,-0.45 -1,-1L14.5,9h1.25v4.51h1.13L16.88,9.99h1.25v3.51h1.12L19.25,9h1.25v5z"/>
|
||||
</vector>
|
@ -4,7 +4,7 @@
|
||||
|
||||
<item
|
||||
android:id="@+id/unread_action"
|
||||
android:icon="@drawable/ic_fiber_new_white_24dp"
|
||||
android:icon="@drawable/ic_baseline_white_eye_24dp"
|
||||
android:title="@string/unmark"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
@ -17,7 +17,6 @@
|
||||
<item
|
||||
android:id="@+id/open_action"
|
||||
android:icon="@drawable/ic_open_in_browser_white_24dp"
|
||||
android:iconTint="@color/white"
|
||||
android:title="@string/reader_action_open"
|
||||
app:showAsAction="ifRoom" />
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user