Add actions for single result notification case
This commit is contained in:
parent
ffeb955a82
commit
1676e9f637
@ -35,6 +35,9 @@
|
|||||||
|
|
||||||
<service android:name=".utils.feedscolors.FeedsColorsIntentService" />
|
<service android:name=".utils.feedscolors.FeedsColorsIntentService" />
|
||||||
|
|
||||||
|
<receiver android:name=".utils.SyncWorker$MarkReadReceiver" />
|
||||||
|
<receiver android:name=".utils.SyncWorker$ReadLaterReceiver" />
|
||||||
|
|
||||||
<activity android:name=".activities.SettingsActivity" />
|
<activity android:name=".activities.SettingsActivity" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".activities.SplashActivity"
|
android:name=".activities.SplashActivity"
|
||||||
|
@ -109,7 +109,7 @@ public abstract class ARepository<T> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Completable setItemReadState(Item item, boolean read) {
|
public Completable setItemReadState(Item item, boolean read) {
|
||||||
return database.itemDao().setReadState(item.getId(), read ? 1 : 0, !item.isReadChanged() ? 1 : 0);
|
return database.itemDao().setReadState(item.getId(), read, !item.isReadChanged());
|
||||||
}
|
}
|
||||||
|
|
||||||
public Completable setAllItemsReadState(boolean read) {
|
public Completable setAllItemsReadState(boolean read) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package com.readrops.app.utils
|
package com.readrops.app.utils
|
||||||
|
|
||||||
import android.app.PendingIntent
|
import android.app.PendingIntent
|
||||||
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.core.app.NotificationCompat
|
import androidx.core.app.NotificationCompat
|
||||||
@ -12,9 +13,11 @@ import com.readrops.app.ReadropsApp
|
|||||||
import com.readrops.app.activities.MainActivity
|
import com.readrops.app.activities.MainActivity
|
||||||
import com.readrops.app.repositories.ARepository
|
import com.readrops.app.repositories.ARepository
|
||||||
import com.readrops.readropsdb.Database
|
import com.readrops.readropsdb.Database
|
||||||
|
import com.readrops.readropsdb.entities.Item
|
||||||
import com.readrops.readropsdb.entities.account.Account
|
import com.readrops.readropsdb.entities.account.Account
|
||||||
import com.readrops.readropslibrary.services.SyncResult
|
import com.readrops.readropslibrary.services.SyncResult
|
||||||
import io.reactivex.disposables.Disposable
|
import io.reactivex.disposables.Disposable
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
|
||||||
class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(context, parameters) {
|
class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(context, parameters) {
|
||||||
|
|
||||||
@ -24,7 +27,6 @@ class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(contex
|
|||||||
private val database = Database.getInstance(applicationContext)
|
private val database = Database.getInstance(applicationContext)
|
||||||
|
|
||||||
override fun doWork(): Result {
|
override fun doWork(): Result {
|
||||||
|
|
||||||
val accounts = database.accountDao().selectAll()
|
val accounts = database.accountDao().selectAll()
|
||||||
var result = Result.success()
|
var result = Result.success()
|
||||||
|
|
||||||
@ -67,18 +69,26 @@ class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(contex
|
|||||||
if (notifContent.title != null && notifContent.content != null) {
|
if (notifContent.title != null && notifContent.content != null) {
|
||||||
val intent = Intent(applicationContext, MainActivity::class.java)
|
val intent = Intent(applicationContext, MainActivity::class.java)
|
||||||
|
|
||||||
notifContent.item?.let {
|
|
||||||
intent.putExtra(ReadropsKeys.ITEM_ID, it.id)
|
|
||||||
intent.putExtra(ReadropsKeys.IMAGE_URL, it.imageLink)
|
|
||||||
}
|
|
||||||
|
|
||||||
val notificationBuilder = NotificationCompat.Builder(applicationContext, ReadropsApp.SYNC_CHANNEL_ID)
|
val notificationBuilder = NotificationCompat.Builder(applicationContext, ReadropsApp.SYNC_CHANNEL_ID)
|
||||||
.setContentTitle(notifContent.title)
|
.setContentTitle(notifContent.title)
|
||||||
.setContentText(notifContent.content)
|
.setContentText(notifContent.content)
|
||||||
.setSmallIcon(R.drawable.ic_notif)
|
.setSmallIcon(R.drawable.ic_notif)
|
||||||
.setContentIntent(PendingIntent.getActivity(applicationContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT))
|
.setContentIntent(PendingIntent.getActivity(applicationContext, 0, intent, 0))
|
||||||
.setAutoCancel(true)
|
.setAutoCancel(true)
|
||||||
|
|
||||||
|
notifContent.item?.let {
|
||||||
|
with(intent) {
|
||||||
|
putExtra(ReadropsKeys.ITEM_ID, it.id)
|
||||||
|
putExtra(ReadropsKeys.IMAGE_URL, it.imageLink)
|
||||||
|
}
|
||||||
|
|
||||||
|
val feed = database.feedDao().getFeedById(it.feedId)
|
||||||
|
|
||||||
|
notificationBuilder.addAction(buildReadlaterAction(it))
|
||||||
|
.addAction(buildMarkAsRead(it))
|
||||||
|
.setColor(feed.backgroundColor)
|
||||||
|
}
|
||||||
|
|
||||||
notifContent.largeIcon?.let {
|
notifContent.largeIcon?.let {
|
||||||
notificationBuilder.setLargeIcon(it)
|
notificationBuilder.setLargeIcon(it)
|
||||||
}
|
}
|
||||||
@ -89,9 +99,66 @@ class SyncWorker(context: Context, parameters: WorkerParameters) : Worker(contex
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun buildReadlaterAction(item: Item): NotificationCompat.Action {
|
||||||
|
val broadcastIntent = Intent(applicationContext, ReadLaterReceiver::class.java).apply {
|
||||||
|
putExtra(ReadropsKeys.ITEM_ID, item.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotificationCompat.Action.Builder(R.drawable.ic_read_later, applicationContext.getString(R.string.read_later),
|
||||||
|
PendingIntent.getBroadcast(applicationContext, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT))
|
||||||
|
.setAllowGeneratedReplies(false)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun buildMarkAsRead(item: Item): NotificationCompat.Action {
|
||||||
|
val broadcastIntent = Intent(applicationContext, MarkReadReceiver::class.java).apply {
|
||||||
|
putExtra(ReadropsKeys.ITEM_ID, item.id)
|
||||||
|
}
|
||||||
|
|
||||||
|
return NotificationCompat.Action.Builder(R.drawable.ic_read, applicationContext.getString(R.string.read),
|
||||||
|
PendingIntent.getBroadcast(applicationContext, 0, broadcastIntent, PendingIntent.FLAG_UPDATE_CURRENT))
|
||||||
|
.setAllowGeneratedReplies(false)
|
||||||
|
.build()
|
||||||
|
}
|
||||||
|
|
||||||
|
class MarkReadReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
|
val itemId = intent?.getIntExtra(ReadropsKeys.ITEM_ID, 0)!!
|
||||||
|
|
||||||
|
with(Database.getInstance(context)) {
|
||||||
|
itemDao().setReadState(itemId, true, true)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.subscribe()
|
||||||
|
}
|
||||||
|
|
||||||
|
with(NotificationManagerCompat.from(context!!)) {
|
||||||
|
cancel(SYNC_RESULT_NOTIFICATION_ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class ReadLaterReceiver : BroadcastReceiver() {
|
||||||
|
|
||||||
|
override fun onReceive(context: Context?, intent: Intent?) {
|
||||||
|
val itemId = intent?.getIntExtra(ReadropsKeys.ITEM_ID, 0)!!
|
||||||
|
|
||||||
|
with(Database.getInstance(context)) {
|
||||||
|
itemDao().setReadItLater(itemId)
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.subscribe()
|
||||||
|
}
|
||||||
|
|
||||||
|
with(NotificationManagerCompat.from(context!!)) {
|
||||||
|
cancel(SYNC_RESULT_NOTIFICATION_ID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
val TAG = SyncWorker::class.java.simpleName
|
val TAG = SyncWorker::class.java.simpleName
|
||||||
private const val SYNC_NOTIFICATION_ID = 2
|
private const val SYNC_NOTIFICATION_ID = 2
|
||||||
private const val SYNC_RESULT_NOTIFICATION_ID = 3
|
const val SYNC_RESULT_NOTIFICATION_ID = 3
|
||||||
}
|
}
|
||||||
}
|
}
|
@ -237,10 +237,7 @@ public class MainViewModel extends AndroidViewModel {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Completable setItemReadItLater(int itemId) {
|
public Completable setItemReadItLater(int itemId) {
|
||||||
return Completable.create(emitter -> {
|
return db.itemDao().setReadItLater(itemId);
|
||||||
db.itemDao().setReadItLater(itemId);
|
|
||||||
emitter.onComplete();
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
@ -34,11 +34,11 @@ public abstract class ItemDao implements BaseDao<Item> {
|
|||||||
* Set an item read or unread
|
* Set an item read or unread
|
||||||
*
|
*
|
||||||
* @param itemId id of the item to update
|
* @param itemId id of the item to update
|
||||||
* @param readState 1 for read, 0 for unread
|
* @param read 1 for read, 0 for unread
|
||||||
* @param readChanged
|
* @param readChanged
|
||||||
*/
|
*/
|
||||||
@Query("Update Item Set read_changed = :readChanged, read = :readState Where id = :itemId")
|
@Query("Update Item Set read_changed = :readChanged, read = :read Where id = :itemId")
|
||||||
public abstract Completable setReadState(int itemId, int readState, int readChanged);
|
public abstract Completable setReadState(int itemId, boolean read, boolean readChanged);
|
||||||
|
|
||||||
@Query("Update Item set read_changed = 1, read = :readState Where feed_id In (Select id From Feed Where account_id = :accountId)")
|
@Query("Update Item set read_changed = 1, read = :readState Where feed_id In (Select id From Feed Where account_id = :accountId)")
|
||||||
public abstract Completable setAllItemsReadState(int readState, int accountId);
|
public abstract Completable setAllItemsReadState(int readState, int accountId);
|
||||||
@ -47,7 +47,7 @@ public abstract class ItemDao implements BaseDao<Item> {
|
|||||||
public abstract Completable setAllFeedItemsReadState(int feedId, int readState);
|
public abstract Completable setAllFeedItemsReadState(int feedId, int readState);
|
||||||
|
|
||||||
@Query("Update Item set read_it_later = 1 Where id = :itemId")
|
@Query("Update Item set read_it_later = 1 Where id = :itemId")
|
||||||
public abstract void setReadItLater(int itemId);
|
public abstract Completable setReadItLater(int itemId);
|
||||||
|
|
||||||
@Query("Select count(*) From Item Where feed_id = :feedId And read = 0")
|
@Query("Select count(*) From Item Where feed_id = :feedId And read = 0")
|
||||||
public abstract int getUnreadCount(int feedId);
|
public abstract int getUnreadCount(int feedId);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user