diff --git a/build.gradle b/build.gradle index ef3ae891a12964c0f3cd9db067cd703260dd1135..45ad2bbf7d1714a5d8dbc5adf284a113d0ef79d9 100644 --- a/build.gradle +++ b/build.gradle @@ -293,6 +293,12 @@ android { abortOnError false } + testOptions { + unitTests { + includeAndroidResources = true + } + } + subprojects { afterEvaluate { diff --git a/src/cheogram/java/com/cheogram/android/DownloadDefaultStickers.java b/src/cheogram/java/com/cheogram/android/DownloadDefaultStickers.java index f8923f838958d9c4dddd6198e79f020169ea5955..6515679511036d32596fc677260368904b8a6a04 100644 --- a/src/cheogram/java/com/cheogram/android/DownloadDefaultStickers.java +++ b/src/cheogram/java/com/cheogram/android/DownloadDefaultStickers.java @@ -45,6 +45,7 @@ import eu.siacs.conversations.entities.Message; import eu.siacs.conversations.http.HttpConnectionManager; import eu.siacs.conversations.persistance.DatabaseBackend; import eu.siacs.conversations.persistance.FileBackend; +import eu.siacs.conversations.services.NotificationService; import eu.siacs.conversations.utils.Compatibility; import eu.siacs.conversations.utils.FileUtils; import eu.siacs.conversations.utils.MimeUtils; @@ -61,8 +62,10 @@ public class DownloadDefaultStickers extends Service { @Override public void onCreate() { - mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext()); notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + NotificationService.ensureChannelExists( + notificationManager, "backup", getString(R.string.backup_channel_name), NotificationManager.IMPORTANCE_LOW); + mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext()); mStickerDir = stickerDir(); } diff --git a/src/cheogram/java/eu/siacs/conversations/services/ImportBackupService.java b/src/cheogram/java/eu/siacs/conversations/services/ImportBackupService.java index 8aec7df93b4bd54ee678958ad42705832fc0b10a..b2999c40a89075d589385df1a9c3ec70ae94893a 100644 --- a/src/cheogram/java/eu/siacs/conversations/services/ImportBackupService.java +++ b/src/cheogram/java/eu/siacs/conversations/services/ImportBackupService.java @@ -83,8 +83,10 @@ public class ImportBackupService extends Service { @Override public void onCreate() { + notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); + NotificationService.ensureChannelExists( + notificationManager, "backup", getString(R.string.backup_channel_name), NotificationManager.IMPORTANCE_LOW); mDatabaseBackend = DatabaseBackend.getInstance(getBaseContext()); - notificationManager = (android.app.NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); } @Override diff --git a/src/main/java/eu/siacs/conversations/services/NotificationService.java b/src/main/java/eu/siacs/conversations/services/NotificationService.java index 62c498266124eac55de7d4f70bf0f2d944966063..8517688a854856692a1b9e42871677c65e2a09d7 100644 --- a/src/main/java/eu/siacs/conversations/services/NotificationService.java +++ b/src/main/java/eu/siacs/conversations/services/NotificationService.java @@ -162,6 +162,20 @@ public class NotificationService { && message.getFileParams().height > 0; } + public static void ensureChannelExists( + final NotificationManager notificationManager, + final String channelId, + final String channelName, + final int importance) { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return; + } + final NotificationChannel channel = + new NotificationChannel(channelId, channelName, importance); + channel.setShowBadge(false); + notificationManager.createNotificationChannel(channel); + } + @RequiresApi(api = Build.VERSION_CODES.O) void initializeChannels() { final Context c = mXmppConnectionService; diff --git a/src/test/java/com/cheogram/android/DownloadDefaultStickersTest.java b/src/test/java/com/cheogram/android/DownloadDefaultStickersTest.java new file mode 100644 index 0000000000000000000000000000000000000000..1f29a75cdb6250d2d576485f9b57e9a309b78747 --- /dev/null +++ b/src/test/java/com/cheogram/android/DownloadDefaultStickersTest.java @@ -0,0 +1,36 @@ +package com.cheogram.android; + +import static org.junit.Assert.assertNotNull; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.os.Build; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.ConscryptMode; + +import eu.siacs.conversations.Conversations; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = Build.VERSION_CODES.TIRAMISU, application = Conversations.class) +@ConscryptMode(ConscryptMode.Mode.OFF) +public class DownloadDefaultStickersTest { + + @Test + public void testBackupChannelExistsAfterOnCreate() { + Robolectric.buildService(DownloadDefaultStickers.class).create().get(); + + NotificationManager nm = (NotificationManager) + RuntimeEnvironment.getApplication() + .getSystemService(Context.NOTIFICATION_SERVICE); + + NotificationChannel channel = nm.getNotificationChannel("backup"); + assertNotNull("backup channel should exist after onCreate", channel); + } +} diff --git a/src/test/java/eu/siacs/conversations/services/ImportBackupServiceTest.java b/src/test/java/eu/siacs/conversations/services/ImportBackupServiceTest.java new file mode 100644 index 0000000000000000000000000000000000000000..286f52b57d5bc46a3c3f9b08179c9db045340fca --- /dev/null +++ b/src/test/java/eu/siacs/conversations/services/ImportBackupServiceTest.java @@ -0,0 +1,36 @@ +package eu.siacs.conversations.services; + +import static org.junit.Assert.assertNotNull; + +import android.app.NotificationChannel; +import android.app.NotificationManager; +import android.content.Context; +import android.os.Build; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.robolectric.Robolectric; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; +import org.robolectric.annotation.Config; +import org.robolectric.annotation.ConscryptMode; + +import eu.siacs.conversations.Conversations; + +@RunWith(RobolectricTestRunner.class) +@Config(sdk = Build.VERSION_CODES.TIRAMISU, application = Conversations.class) +@ConscryptMode(ConscryptMode.Mode.OFF) +public class ImportBackupServiceTest { + + @Test + public void testBackupChannelExistsAfterOnCreate() { + Robolectric.buildService(ImportBackupService.class).create().get(); + + NotificationManager nm = (NotificationManager) + RuntimeEnvironment.getApplication() + .getSystemService(Context.NOTIFICATION_SERVICE); + + NotificationChannel channel = nm.getNotificationChannel("backup"); + assertNotNull("backup channel should exist after onCreate", channel); + } +} diff --git a/src/test/resources/robolectric.properties b/src/test/resources/robolectric.properties new file mode 100644 index 0000000000000000000000000000000000000000..979b5eebcf6c90ce5be12452aa155aaf797a083e --- /dev/null +++ b/src/test/resources/robolectric.properties @@ -0,0 +1 @@ +sdk=34