aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/foundation/e/privacycentralapp/Notifications.kt
diff options
context:
space:
mode:
authorGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2023-05-02 21:25:17 +0200
committerGuillaume Jacquart <guillaume.jacquart@hoodbrains.com>2023-05-02 22:00:35 +0200
commita8874167f663885f2d3371801cf03681576ac817 (patch)
tree5be07b8768142efeade536d4135f2250c1ac9071 /app/src/main/java/foundation/e/privacycentralapp/Notifications.kt
parenta0ee04ea9dbc0802c828afdf660eb37dc6fa350f (diff)
downloadadvanced-privacy-a8874167f663885f2d3371801cf03681576ac817.tar.gz
1200: rename everything to AdvancedPrivacy
Diffstat (limited to 'app/src/main/java/foundation/e/privacycentralapp/Notifications.kt')
-rw-r--r--app/src/main/java/foundation/e/privacycentralapp/Notifications.kt210
1 files changed, 0 insertions, 210 deletions
diff --git a/app/src/main/java/foundation/e/privacycentralapp/Notifications.kt b/app/src/main/java/foundation/e/privacycentralapp/Notifications.kt
deleted file mode 100644
index 0df3e18..0000000
--- a/app/src/main/java/foundation/e/privacycentralapp/Notifications.kt
+++ /dev/null
@@ -1,210 +0,0 @@
-/*
- * Copyright (C) 2022 MURENA SAS
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-package foundation.e.privacycentralapp
-
-import android.app.NotificationChannel
-import android.app.NotificationManager
-import android.app.PendingIntent
-import android.content.Context
-import android.content.Intent
-import androidx.annotation.StringRes
-import androidx.core.app.NotificationCompat
-import androidx.core.app.NotificationManagerCompat
-import foundation.e.privacycentralapp.domain.entities.InternetPrivacyMode
-import foundation.e.privacycentralapp.domain.entities.MainFeatures
-import foundation.e.privacycentralapp.domain.usecases.GetQuickPrivacyStateUseCase
-import foundation.e.privacycentralapp.main.MainActivity
-import foundation.e.privacymodules.permissions.PermissionsPrivacyModule
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.flow.distinctUntilChanged
-import kotlinx.coroutines.flow.launchIn
-import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.flow.onEach
-
-object Notifications {
- const val CHANNEL_FIRST_BOOT = "first_boot_notification"
- const val CHANNEL_FAKE_LOCATION_FLAG = "fake_location_flag"
- const val CHANNEL_IPSCRAMBLING_FLAG = "ipscrambling_flag"
-
- const val NOTIFICATION_FIRST_BOOT = 1000
- const val NOTIFICATION_FAKE_LOCATION_FLAG = NOTIFICATION_FIRST_BOOT + 1
- const val NOTIFICATION_IPSCRAMBLING_FLAG = NOTIFICATION_FAKE_LOCATION_FLAG + 1
-
- fun showFirstBootNotification(context: Context) {
- createNotificationFirstBootChannel(context)
- val notificationBuilder: NotificationCompat.Builder = notificationBuilder(
- context,
- NotificationContent(
- channelId = CHANNEL_FIRST_BOOT,
- icon = R.drawable.ic_notification_logo,
- title = R.string.first_notification_title,
- description = R.string.first_notification_summary,
- destinationIntent =
- context.packageManager.getLaunchIntentForPackage(context.packageName)
- )
- )
- .setAutoCancel(true)
-
- NotificationManagerCompat.from(context).notify(
- NOTIFICATION_FIRST_BOOT, notificationBuilder.build()
- )
- }
-
- fun startListening(
- appContext: Context,
- getQuickPrivacyStateUseCase: GetQuickPrivacyStateUseCase,
- permissionsPrivacyModule: PermissionsPrivacyModule,
- appScope: CoroutineScope
- ) {
- createNotificationFlagChannel(
- context = appContext,
- permissionsPrivacyModule = permissionsPrivacyModule,
- channelId = CHANNEL_FAKE_LOCATION_FLAG,
- channelName = R.string.notifications_fake_location_channel_name,
- channelDescription = R.string.notifications_fake_location_channel_description
- )
-
- createNotificationFlagChannel(
- context = appContext,
- permissionsPrivacyModule = permissionsPrivacyModule,
- channelId = CHANNEL_IPSCRAMBLING_FLAG,
- channelName = R.string.notifications_ipscrambling_channel_name,
- channelDescription = R.string.notifications_ipscrambling_channel_description
- )
-
- getQuickPrivacyStateUseCase.isLocationHidden.onEach {
- if (it) {
- showFlagNotification(appContext, MainFeatures.FAKE_LOCATION)
- } else {
- hideFlagNotification(appContext, MainFeatures.FAKE_LOCATION)
- }
- }.launchIn(appScope)
-
- getQuickPrivacyStateUseCase.ipScramblingMode.map {
- it != InternetPrivacyMode.REAL_IP
- }.distinctUntilChanged().onEach {
- if (it) {
- showFlagNotification(appContext, MainFeatures.IP_SCRAMBLING)
- } else {
- hideFlagNotification(appContext, MainFeatures.IP_SCRAMBLING)
- }
- }.launchIn(appScope)
- }
-
- private fun createNotificationFirstBootChannel(context: Context) {
- val channel = NotificationChannel(
- CHANNEL_FIRST_BOOT,
- context.getString(R.string.notifications_first_boot_channel_name),
- NotificationManager.IMPORTANCE_HIGH
- )
- NotificationManagerCompat.from(context).createNotificationChannel(channel)
- }
-
- private fun createNotificationFlagChannel(
- context: Context,
- permissionsPrivacyModule: PermissionsPrivacyModule,
- channelId: String,
- @StringRes channelName: Int,
- @StringRes channelDescription: Int,
- ) {
- val channel = NotificationChannel(
- channelId, context.getString(channelName), NotificationManager.IMPORTANCE_LOW
- )
- channel.description = context.getString(channelDescription)
- permissionsPrivacyModule.setBlockable(channel)
- NotificationManagerCompat.from(context).createNotificationChannel(channel)
- }
-
- private fun showFlagNotification(context: Context, feature: MainFeatures) {
- when (feature) {
- MainFeatures.FAKE_LOCATION -> showFlagNotification(
- context = context,
- id = NOTIFICATION_FAKE_LOCATION_FLAG,
- content = NotificationContent(
- channelId = CHANNEL_FAKE_LOCATION_FLAG,
- icon = R.drawable.ic_fmd_bad,
- title = R.string.notifications_fake_location_title,
- description = R.string.notifications_fake_location_content,
- destinationIntent = MainActivity.createFakeLocationIntent(context),
- )
- )
- MainFeatures.IP_SCRAMBLING -> showFlagNotification(
- context = context,
- id = NOTIFICATION_IPSCRAMBLING_FLAG,
- content = NotificationContent(
- channelId = CHANNEL_IPSCRAMBLING_FLAG,
- icon = R.drawable.ic_language,
- title = R.string.notifications_ipscrambling_title,
- description = R.string.notifications_ipscrambling_content,
- destinationIntent = MainActivity.createIpScramblingIntent(context),
- )
- )
- else -> {}
- }
- }
-
- private fun showFlagNotification(
- context: Context,
- id: Int,
- content: NotificationContent,
- ) {
- val builder = notificationBuilder(context, content)
- .setPriority(NotificationCompat.PRIORITY_LOW)
- .setOngoing(true)
-
- NotificationManagerCompat.from(context).notify(id, builder.build())
- }
-
- private fun hideFlagNotification(context: Context, feature: MainFeatures) {
- val id = when (feature) {
- MainFeatures.FAKE_LOCATION -> NOTIFICATION_FAKE_LOCATION_FLAG
- MainFeatures.IP_SCRAMBLING -> NOTIFICATION_IPSCRAMBLING_FLAG
- else -> return
- }
- NotificationManagerCompat.from(context).cancel(id)
- }
-
- private data class NotificationContent(
- val channelId: String,
- val icon: Int,
- val title: Int,
- val description: Int,
- val destinationIntent: Intent?
- )
-
- private fun notificationBuilder(
- context: Context,
- content: NotificationContent
- ): NotificationCompat.Builder {
- val builder = NotificationCompat.Builder(context, content.channelId)
- .setSmallIcon(content.icon)
- .setPriority(NotificationCompat.PRIORITY_LOW)
- .setContentTitle(context.getString(content.title))
- .setStyle(NotificationCompat.BigTextStyle().bigText(context.getString(content.description)))
-
- content.destinationIntent?.let {
- it.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
- val pendingIntent: PendingIntent = PendingIntent.getActivity(
- context, 0, it, PendingIntent.FLAG_IMMUTABLE
- )
- builder.setContentIntent(pendingIntent)
- }
-
- return builder
- }
-}