diff --git a/app/src/androidTest/java/com/readrops/app/SyncResultAnalyserTest.kt b/app/src/androidTest/java/com/readrops/app/SyncResultAnalyserTest.kt index 8c355c35..7f422118 100644 --- a/app/src/androidTest/java/com/readrops/app/SyncResultAnalyserTest.kt +++ b/app/src/androidTest/java/com/readrops/app/SyncResultAnalyserTest.kt @@ -19,6 +19,7 @@ import org.junit.Assert.assertTrue import org.junit.Before import org.junit.Test import org.junit.runner.RunWith +import kotlin.test.assertNull @RunWith(AndroidJUnit4::class) class SyncAnalyzerTest { @@ -27,6 +28,9 @@ class SyncAnalyzerTest { private lateinit var syncAnalyzer: SyncAnalyzer private val context: Context = InstrumentationRegistry.getInstrumentation().targetContext + private val nullContentException = + NullPointerException("Notification content shouldn't be null") + private val account1 = Account( accountName = "test account 1", accountType = AccountType.FRESHRSS, @@ -87,12 +91,13 @@ class SyncAnalyzerTest { database.itemDao().insert(item) val syncResult = SyncResult(items = listOf(item)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) - assertEquals("caseOneElementEveryWhere", notificationContent.content) - assertEquals("feed 1", notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.accountId > 0) + syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult))?.let { content -> + assertEquals("caseOneElementEveryWhere", content.text) + assertEquals("feed 1", content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.accountId > 0) + } ?: throw nullContentException database.itemDao().delete(item) } @@ -100,14 +105,14 @@ class SyncAnalyzerTest { @Test fun testTwoItemsOneFeed() = runTest { val item = Item(title = "caseTwoItemsOneFeed", feedId = 1) - val syncResult = SyncResult(items = listOf(item, item, item)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) - assertEquals(context.getString(R.string.new_items, 3), notificationContent.content) - assertEquals("feed 1", notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.accountId > 0) + syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult))?.let { content -> + assertEquals(context.getString(R.string.new_items, 3), content.text) + assertEquals("feed 1", content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.accountId > 0) + } ?: throw nullContentException } @Test @@ -116,12 +121,13 @@ class SyncAnalyzerTest { val item2 = Item(feedId = 3) val syncResult = SyncResult(items = listOf(item, item2)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) - assertEquals(context.getString(R.string.new_items, 2), notificationContent.content) - assertEquals(account1.accountName, notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.accountId > 0) + syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult))?.let { content -> + assertEquals(context.getString(R.string.new_items, 2), content.text) + assertEquals(account1.accountName, content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.accountId > 0) + } ?: throw nullContentException } @Test @@ -133,9 +139,9 @@ class SyncAnalyzerTest { val syncResult2 = SyncResult(items = listOf(item, item2)) val syncResults = mapOf(account1 to syncResult, account3 to syncResult2) - val notificationContent = syncAnalyzer.getNotificationContent(syncResults) - - assertEquals(context.getString(R.string.new_items, 4), notificationContent.title) + syncAnalyzer.getNotificationContent(syncResults)?.let { content -> + assertEquals(context.getString(R.string.new_items, 4), content.title) + } ?: throw nullContentException } @Test @@ -144,11 +150,9 @@ class SyncAnalyzerTest { val item2 = Item(title = "testAccountNotificationsDisabled2", feedId = 1) val syncResult = SyncResult(items = listOf(item1, item2)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account2 to syncResult)) - assert(notificationContent.title == null) - assert(notificationContent.content == null) - assert(notificationContent.largeIcon == null) + val content = syncAnalyzer.getNotificationContent(mapOf(account2 to syncResult)) + assertNull(content) } @Test @@ -157,11 +161,8 @@ class SyncAnalyzerTest { val item2 = Item(title = "testAccountNotificationsDisabled2", feedId = 2) val syncResult = SyncResult(items = listOf(item1, item2)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) - - assert(notificationContent.title == null) - assert(notificationContent.content == null) - assert(notificationContent.largeIcon == null) + val content = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) + assertNull(content) } @Test @@ -190,18 +191,18 @@ class SyncAnalyzerTest { val syncResults = mapOf(account1 to syncResult1, account2 to syncResult2) - val notificationContent = syncAnalyzer.getNotificationContent(syncResults) - - assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notificationContent.content) - assertEquals("feed 1", notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.item != null) + syncAnalyzer.getNotificationContent(syncResults)?.let { content -> + assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", content.text) + assertEquals("feed 1", content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.item != null) + } ?: throw nullContentException database.itemDao().delete(item1) } @Test - fun testTwoAccountsWithOneFeedNotificationEnabled() = runTest{ + fun testTwoAccountsWithOneFeedNotificationEnabled() = runTest { val item1 = Item( title = "testTwoAccountsWithOneAccountNotificationsEnabled", feedId = 1, @@ -225,12 +226,13 @@ class SyncAnalyzerTest { val syncResult2 = SyncResult(items = listOf(item2, item3)) val syncResults = mapOf(account1 to syncResult1, account2 to syncResult2) - val notificationContent = syncAnalyzer.getNotificationContent(syncResults) - assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notificationContent.content) - assertEquals("feed 1", notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.item != null) + syncAnalyzer.getNotificationContent(syncResults)?.let { content -> + assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", content.text) + assertEquals("feed 1", content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.item != null) + } ?: throw nullContentException database.itemDao().delete(item1) } @@ -258,13 +260,13 @@ class SyncAnalyzerTest { database.itemDao().insert(item1) val syncResult = SyncResult(items = listOf(item1, item2, item3)) - val notificationContent = syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult)) - - assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", notificationContent.content) - assertEquals("feed 1", notificationContent.title) - assertTrue(notificationContent.largeIcon != null) - assertTrue(notificationContent.item != null) - assertTrue(notificationContent.accountId > 0) + syncAnalyzer.getNotificationContent(mapOf(account1 to syncResult))?.let { content -> + assertEquals("testTwoAccountsWithOneAccountNotificationsEnabled", content.text) + assertEquals("feed 1", content.title) + assertTrue(content.largeIcon != null) + assertTrue(content.item != null) + assertTrue(content.accountId > 0) + } ?: throw nullContentException database.itemDao().delete(item1) } diff --git a/app/src/main/java/com/readrops/app/sync/SyncAnalyzer.kt b/app/src/main/java/com/readrops/app/sync/SyncAnalyzer.kt index 6261a118..00e41fe6 100644 --- a/app/src/main/java/com/readrops/app/sync/SyncAnalyzer.kt +++ b/app/src/main/java/com/readrops/app/sync/SyncAnalyzer.kt @@ -16,7 +16,7 @@ import org.koin.core.component.KoinComponent data class NotificationContent( val title: String? = null, - val content: String? = null, + val text: String? = null, val largeIcon: Bitmap? = null, val item: Item? = null, val color: Int = 0, @@ -65,7 +65,7 @@ class SyncAnalyzer( feedsIdsForNewItems.size > 1 && itemCount > 1 -> { NotificationContent( title = account.accountName!!, - content = context.getString(R.string.new_items, itemCount.toString()), + text = context.getString(R.string.new_items, itemCount.toString()), largeIcon = ContextCompat.getDrawable( context, account.accountType!!.iconRes @@ -105,7 +105,7 @@ class SyncAnalyzer( target.drawable?.toBitmap() } - val (item, content) = if (items.size == 1) { + val (item, text) = if (items.size == 1) { val item = items.first() item to item.title } else { @@ -114,8 +114,8 @@ class SyncAnalyzer( return NotificationContent( title = feed.name, + text = text, largeIcon = icon, - content = content, item = item, color = feed.backgroundColor, accountId = account.id diff --git a/app/src/main/java/com/readrops/app/sync/SyncWorker.kt b/app/src/main/java/com/readrops/app/sync/SyncWorker.kt index 3ac154a9..7f4f16f4 100644 --- a/app/src/main/java/com/readrops/app/sync/SyncWorker.kt +++ b/app/src/main/java/com/readrops/app/sync/SyncWorker.kt @@ -252,8 +252,8 @@ class SyncWorker( val notificationBuilder = Builder(applicationContext, ReadropsApp.SYNC_CHANNEL_ID) .setContentTitle(notificationContent.title) - .setContentText(notificationContent.content) - .setStyle(NotificationCompat.BigTextStyle().bigText(notificationContent.content)) + .setContentText(notificationContent.text) + .setStyle(NotificationCompat.BigTextStyle().bigText(notificationContent.text)) .setSmallIcon(R.drawable.ic_notifications) .setColor(notificationContent.color) .setContentIntent(