From f931407d56c94ccfc7626f3a294b3caa8798e1fc Mon Sep 17 00:00:00 2001 From: Andy Scherzinger Date: Tue, 19 Dec 2023 13:37:27 +0100 Subject: [PATCH] Add general receiver registration implementation Signed-off-by: alperozturk Signed-off-by: Andy Scherzinger --- .../nextcloud/talk/utils/ContextExtensions.kt | 54 +++++++++++++++++++ .../com/nextcloud/talk/utils/ReceiverFlag.kt | 35 ++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 app/src/main/java/com/nextcloud/talk/utils/ContextExtensions.kt create mode 100644 app/src/main/java/com/nextcloud/talk/utils/ReceiverFlag.kt diff --git a/app/src/main/java/com/nextcloud/talk/utils/ContextExtensions.kt b/app/src/main/java/com/nextcloud/talk/utils/ContextExtensions.kt new file mode 100644 index 000000000..ed85664f3 --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/ContextExtensions.kt @@ -0,0 +1,54 @@ +/* + * Nextcloud Android client application + * + * @author Alper Ozturk + * Copyright (C) 2023 Alper Ozturk + * Copyright (C) 2023 Nextcloud GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.utils + +import android.annotation.SuppressLint +import android.content.BroadcastReceiver +import android.content.Context +import android.content.Intent +import android.content.IntentFilter +import android.os.Build +import android.os.Handler + +@SuppressLint("UnspecifiedRegisterReceiverFlag") +fun Context.registerBroadcastReceiver(receiver: BroadcastReceiver?, filter: IntentFilter, flag: ReceiverFlag): Intent? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + registerReceiver(receiver, filter, flag.getId()) + } else { + registerReceiver(receiver, filter) + } +} + +@SuppressLint("UnspecifiedRegisterReceiverFlag") +fun Context.registerPermissionHandlerBroadcastReceiver( + receiver: BroadcastReceiver?, + filter: IntentFilter, + broadcastPermission: String?, + scheduler: Handler?, + flag: ReceiverFlag +): Intent? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + registerReceiver(receiver, filter, broadcastPermission, scheduler, flag.getId()) + } else { + registerReceiver(receiver, filter, broadcastPermission, scheduler) + } +} diff --git a/app/src/main/java/com/nextcloud/talk/utils/ReceiverFlag.kt b/app/src/main/java/com/nextcloud/talk/utils/ReceiverFlag.kt new file mode 100644 index 000000000..8ceda84be --- /dev/null +++ b/app/src/main/java/com/nextcloud/talk/utils/ReceiverFlag.kt @@ -0,0 +1,35 @@ +/* + * Nextcloud Android client application + * + * @author Alper Ozturk + * Copyright (C) 2023 Alper Ozturk + * Copyright (C) 2023 Nextcloud GmbH + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +package com.nextcloud.talk.utils + +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi + +enum class ReceiverFlag { + NotExported; + + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + fun getId(): Int { + return Context.RECEIVER_NOT_EXPORTED + } +}