diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt index a33d040..3c2c4a8 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/HomeActivity.kt @@ -39,6 +39,7 @@ import apps.amine.bou.readerforselfoss.settings.SettingsActivity import apps.amine.bou.readerforselfoss.themes.AppColors import apps.amine.bou.readerforselfoss.themes.Toppings import apps.amine.bou.readerforselfoss.utils.Config +import apps.amine.bou.readerforselfoss.utils.SharedItems import apps.amine.bou.readerforselfoss.utils.bottombar.maybeShow import apps.amine.bou.readerforselfoss.utils.bottombar.removeBadge import apps.amine.bou.readerforselfoss.utils.customtabs.CustomTabActivityHelper @@ -384,7 +385,9 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { handleOfflineActions() if (markOnScroll) { - getElementsAccordingToTab() + items = SharedItems.focusedItems + allItems = SharedItems.items + handleListResult() } } @@ -1096,6 +1099,8 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { if (!allItems.contains(it)) allItems.add(it) } } + SharedItems.focusedItems = items + SharedItems.items = allItems } } else { if (!appendResults) { @@ -1234,7 +1239,7 @@ class HomeActivity : AppCompatActivity(), SearchView.OnQueryTextListener { binding.recyclerView.adapter = recyclerAdapter } else { if (!appendResults) { - (recyclerAdapter as ItemsAdapter<*>).updateAllItems(items) + (recyclerAdapter as ItemsAdapter<*>).updateAllItems() } else { (recyclerAdapter as ItemsAdapter<*>).addItemsAtEnd(items) } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/ReaderActivity.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/ReaderActivity.kt index c496525..9715b1d 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/ReaderActivity.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/ReaderActivity.kt @@ -32,6 +32,7 @@ import apps.amine.bou.readerforselfoss.themes.AppColors import apps.amine.bou.readerforselfoss.themes.Toppings import apps.amine.bou.readerforselfoss.transformers.DepthPageTransformer import apps.amine.bou.readerforselfoss.utils.Config +import apps.amine.bou.readerforselfoss.utils.SharedItems import apps.amine.bou.readerforselfoss.utils.network.isNetworkAccessible import apps.amine.bou.readerforselfoss.utils.persistence.toEntity import apps.amine.bou.readerforselfoss.utils.succeeded @@ -146,42 +147,16 @@ class ReaderActivity : AppCompatActivity() { } else { canFavorite() } - readItem(allItems[binding.pager.currentItem]) + readItem(allItems[position]) } } ) } - fun readItem(item: Item) { + private fun readItem(item: Item) { if (markOnScroll) { - thread { - db.itemsDao().delete(item.toEntity()) + SharedItems.readItem(applicationContext, api, db, item) } - if (this@ReaderActivity.isNetworkAccessible(this@ReaderActivity.findViewById(R.id.reader_activity_view))) { - api.markItem(item.id).enqueue( - object : Callback { - override fun onResponse( - call: Call, - response: Response - ) { - } - - override fun onFailure( - call: Call, - t: Throwable - ) { - thread { - db.itemsDao().insertAllItems(item.toEntity()) - } - } - } - ) - } else { - thread { - db.actionsDao().insertAllActions(ActionEntity(item.id, true, false, false, false)) - } - } - } } private fun notifyAdapter() { diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemsAdapter.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemsAdapter.kt index 438349a..68d132c 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemsAdapter.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/adapters/ItemsAdapter.kt @@ -14,6 +14,7 @@ import apps.amine.bou.readerforselfoss.persistence.database.AppDatabase import apps.amine.bou.readerforselfoss.persistence.entities.ActionEntity import apps.amine.bou.readerforselfoss.themes.AppColors import apps.amine.bou.readerforselfoss.utils.Config +import apps.amine.bou.readerforselfoss.utils.SharedItems import apps.amine.bou.readerforselfoss.utils.network.isNetworkAccessible import apps.amine.bou.readerforselfoss.utils.persistence.toEntity import apps.amine.bou.readerforselfoss.utils.succeeded @@ -32,8 +33,8 @@ abstract class ItemsAdapter : RecyclerView.Adapte abstract val config: Config abstract val updateItems: (ArrayList) -> Unit - fun updateAllItems(newItems: ArrayList) { - items = newItems + fun updateAllItems() { + items = SharedItems.focusedItems notifyDataSetChanged() updateItems(items) } diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt index cb09669..b3f42b6 100644 --- a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/LinksUtils.kt @@ -74,6 +74,7 @@ fun Context.openItemUrlInternally( ) { if (articleViewer) { ReaderActivity.allItems = allItems + SharedItems.position = currentItem val intent = Intent(this, ReaderActivity::class.java) intent.putExtra("currentItem", currentItem) app.startActivity(intent) diff --git a/app/src/main/java/apps/amine/bou/readerforselfoss/utils/SharedItems.kt b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/SharedItems.kt new file mode 100644 index 0000000..280eee9 --- /dev/null +++ b/app/src/main/java/apps/amine/bou/readerforselfoss/utils/SharedItems.kt @@ -0,0 +1,102 @@ +package apps.amine.bou.readerforselfoss.utils + +import android.content.Context +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.persistence.database.AppDatabase +import apps.amine.bou.readerforselfoss.persistence.entities.ActionEntity +import apps.amine.bou.readerforselfoss.utils.persistence.toEntity +import apps.amine.bou.readerforselfoss.utils.network.isNetworkAccessible +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import kotlin.concurrent.thread + +/* +* Singleton class that contains the articles fetched from Selfoss, it allows sharing the items list +* between Activities and Fragments +*/ +object SharedItems { + var items: ArrayList = arrayListOf() + get() { + return ArrayList(field) + } + set(value) { + field = ArrayList(value) + } + var focusedItems: ArrayList = arrayListOf() + get() { + return ArrayList(field) + } + set(value) { + field = ArrayList(value) + } + var position = 0 + set(value) { + field = when { + value < 0 -> 0 + value > focusedItems.size -> focusedItems.size + else -> value + } + } + + fun readItem(app: Context, api: SelfossApi, db: AppDatabase, item: Item) { + if (focusedItems.contains(item)) { + position = focusedItems.indexOf(item) + readItemAtIndex(app, api, db) + } + } + + fun readItemAtIndex(app: Context, api: SelfossApi, db: AppDatabase) { + val i = focusedItems[position] + var tmpItems = items + tmpItems.remove(i) + items = tmpItems + var tmpFocusedItems = focusedItems + tmpFocusedItems.remove(i) + focusedItems = tmpFocusedItems + + thread { + db.itemsDao().delete(i.toEntity()) + } + + if (app.isNetworkAccessible(null)) { + api.markItem(i.id).enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + + //unmarkSnackbar(i, position) + } + + override fun onFailure(call: Call, t: Throwable) { + Toast.makeText( + app, + app.getString(R.string.cant_mark_read), + Toast.LENGTH_SHORT + ).show() + tmpItems.add(position, i) + tmpFocusedItems.add(position, i) + items = tmpItems + focusedItems = tmpFocusedItems + + thread { + db.itemsDao().insertAllItems(i.toEntity()) + } + } + }) + } else { + thread { + db.actionsDao().insertAllActions(ActionEntity(i.id, true, false, false, false)) + } + } + + if (position > focusedItems.size) { + position -= 1 + } + } +} \ No newline at end of file