diff --git a/README.md b/README.md index aa2e98d..c4eb0a5 100644 --- a/README.md +++ b/README.md @@ -20,8 +20,8 @@ - [x] Modifier la question - [x] Supprimer la question - [ ] Afficher les statistiques du jeu de question en cours -- [ ] Notification - - [ ] une fois par jour +- [x] Notification + - [x] une fois par jour - [x] Paramètres - [ ] Temps de réponse aux questions - [ ] Thème diff --git a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/MemoApplication.kt b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/MemoApplication.kt index c8764d2..0ad4780 100644 --- a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/MemoApplication.kt +++ b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/MemoApplication.kt @@ -6,7 +6,6 @@ import android.app.NotificationManager import android.content.Context import android.content.pm.PackageManager import android.os.Build -import android.util.Log import androidx.work.PeriodicWorkRequest import androidx.work.WorkManager import fr.uparis.diamantkennel.memorisationapplication.data.QuestionsDB @@ -22,18 +21,15 @@ class MemoApplication : Application() { super.onCreate() createChannel(this) - if (this.checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) + if (this.checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED) { schedule() - else - Log.d("MemoApplication", "onCreate: no permission") + } } - private fun createChannel(c: Context) - { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) - { - val name = "MY_CHANNEL" - val descriptionText = "notification channel for Memorisation project" + private fun createChannel(c: Context) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val name = c.getString(R.string.notif_channel_name) + val descriptionText = c.getString(R.string.notif_channel_desc) val importance = NotificationManager.IMPORTANCE_DEFAULT val channel = NotificationChannel(CHANNEL_ID, name, importance).apply { description = descriptionText @@ -44,15 +40,13 @@ class MemoApplication : Application() { } } - private fun schedule() - { + private fun schedule() { val wm = WorkManager.getInstance(this) wm.cancelAllWork() wm.enqueue(request(10, 45)) } - private fun request(h: Int, m: Int): PeriodicWorkRequest - { + private fun request(h: Int, m: Int): PeriodicWorkRequest { val now = Calendar.getInstance() val target = Calendar.getInstance().apply { set(Calendar.HOUR_OF_DAY, h) @@ -60,11 +54,10 @@ class MemoApplication : Application() { } if (target.before(now)) target.add(Calendar.DAY_OF_YEAR, 1) - val delta=target.timeInMillis - now.timeInMillis - val request = PeriodicWorkRequest.Builder(RappelWorker::class.java, 1, TimeUnit.DAYS) - .setInitialDelay(delta, TimeUnit.MILLISECONDS) - .build() - Log.d("Periodic", "request: $request") - return request + val delta = target.timeInMillis - now.timeInMillis + + return PeriodicWorkRequest.Builder(RappelWorker::class.java, 1, TimeUnit.DAYS) + .setInitialDelay(delta, TimeUnit.MILLISECONDS) + .build() } } diff --git a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/RappelWorker.kt b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/RappelWorker.kt index 3bdf58a..b7c9ee9 100644 --- a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/RappelWorker.kt +++ b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/RappelWorker.kt @@ -16,8 +16,7 @@ class RappelWorker(private val context: Context, workerParams: WorkerParameters) return Result.success() } - private fun createNotification(context: Context) - { + private fun createNotification(context: Context) { val intent = Intent(context, MainActivity::class.java) val pendingIntent = PendingIntent.getActivity( context, 0, intent, PendingIntent.FLAG_IMMUTABLE @@ -25,8 +24,8 @@ class RappelWorker(private val context: Context, workerParams: WorkerParameters) val builder = NotificationCompat.Builder(context, CHANNEL_ID) .setSmallIcon(R.drawable.ic_launcher_foreground) - .setContentTitle("Rappel") - .setContentText("Il est temps de réviser !") + .setContentTitle(context.getString(R.string.notif_reminder_title)) + .setContentText(context.getString(R.string.notif_reminder_content)) .setContentIntent(pendingIntent) .setPriority(NotificationCompat.PRIORITY_DEFAULT) val notification = builder.build() @@ -34,4 +33,4 @@ class RappelWorker(private val context: Context, workerParams: WorkerParameters) as NotificationManager notificationManager.notify(0, notification) } -} \ No newline at end of file +} diff --git a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/SettingsScreen.kt b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/SettingsScreen.kt index b67982c..9ed1951 100644 --- a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/SettingsScreen.kt +++ b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/SettingsScreen.kt @@ -1,8 +1,9 @@ package fr.uparis.diamantkennel.memorisationapplication -import android.util.Log +import android.os.Build import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts +import androidx.annotation.RequiresApi import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues @@ -29,17 +30,22 @@ import androidx.compose.ui.unit.sp import androidx.lifecycle.viewmodel.compose.viewModel import fr.uparis.diamantkennel.memorisationapplication.ui.SettingsViewModel +@RequiresApi(Build.VERSION_CODES.TIRAMISU) @Composable fun SettingsScreen(padding: PaddingValues, model: SettingsViewModel = viewModel()) { val context = LocalContext.current var deletionDBRequest by model.deletionDB var cleanStatRequest by model.deletionStat + var permissionNotif by model.gavePermissionNow + model.checkPermission(context) val permissionLauncher = rememberLauncherForActivityResult( contract = ActivityResultContracts.RequestPermission(), ) { - Log.d("permissions", if(it) "granted" else "denied") + if (it) { + permissionNotif = true + } } if (deletionDBRequest) { @@ -81,7 +87,7 @@ fun SettingsScreen(padding: PaddingValues, model: SettingsViewModel = viewModel( } Button( - enabled = model.isNotGranted(context), + enabled = !permissionNotif, onClick = { model.requestNotificationPermission(permissionLauncher) } diff --git a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/ui/SettingsViewModel.kt b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/ui/SettingsViewModel.kt index 30df806..a80e26b 100644 --- a/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/ui/SettingsViewModel.kt +++ b/app/src/main/java/fr/uparis/diamantkennel/memorisationapplication/ui/SettingsViewModel.kt @@ -3,7 +3,9 @@ package fr.uparis.diamantkennel.memorisationapplication.ui import android.app.Application import android.content.Context import android.content.pm.PackageManager +import android.os.Build import androidx.activity.result.ActivityResultLauncher +import androidx.annotation.RequiresApi import androidx.compose.runtime.mutableStateOf import androidx.datastore.preferences.core.edit import androidx.datastore.preferences.core.intPreferencesKey @@ -36,6 +38,8 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application val deletionDB = mutableStateOf(false) val deletionStat = mutableStateOf(false) + val gavePermissionNow = mutableStateOf(false) + fun deleteDb() { deletionDB.value = false viewModelScope.launch(Dispatchers.IO) { @@ -63,13 +67,14 @@ class SettingsViewModel(application: Application) : AndroidViewModel(application return ((good.toFloat() / total.toFloat()) * 100).toInt() } - fun requestNotificationPermission(launcher: ActivityResultLauncher) - { + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + fun requestNotificationPermission(launcher: ActivityResultLauncher) { launcher.launch(android.Manifest.permission.POST_NOTIFICATIONS) } - fun isNotGranted(context: Context): Boolean - { - return context.checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) != PackageManager.PERMISSION_GRANTED + @RequiresApi(Build.VERSION_CODES.TIRAMISU) + fun checkPermission(context: Context) { + gavePermissionNow.value = + context.checkSelfPermission(android.Manifest.permission.POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED } } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 83c0b79..ea7ff63 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -51,4 +51,8 @@ Réinitialiser les statistiques Voulez-vous réinitialiser les statistiques ? Autoriser notification + Rappels + Notifications de rappel + Rappel + Il est temps de réviser !