diff --git a/app/src/main/java/org/wikipedia/activity/BaseActivity.kt b/app/src/main/java/org/wikipedia/activity/BaseActivity.kt
index 7c21878e1aa..6e0b64a91f3 100644
--- a/app/src/main/java/org/wikipedia/activity/BaseActivity.kt
+++ b/app/src/main/java/org/wikipedia/activity/BaseActivity.kt
@@ -2,6 +2,7 @@ package org.wikipedia.activity
import android.content.Intent
import android.graphics.drawable.ColorDrawable
+import android.os.Build
import android.os.Bundle
import android.view.MenuItem
import android.view.MotionEvent
@@ -79,7 +80,25 @@ abstract class BaseActivity : AppCompatActivity(), ConnectionStateMonitor.Callba
}
private val notificationPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()) { granted ->
- // TODO: Show message(s) to the user if they deny the permission
+ if(!granted){
+ if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.O){
+ if(ActivityCompat.shouldShowRequestPermissionRationale(this,android.Manifest.permission.POST_NOTIFICATIONS)){
+ //User denied once->Show Snackbar
+ FeedbackUtil.makeSnackbar(this, getString(R.string.notification_permission_rationale))
+ .setAction(R.string.notification_permission_rationale_action){
+ DeviceUtil.openNotificationSettings(this)
+ }
+ .show()
+ }else{
+ //User denied (with "Don't Ask Again")
+ FeedbackUtil.makeSnackbar(this, getString(R.string.notification_permission_denied))
+ .setAction(R.string.app_settings){
+ DeviceUtil.openNotificationSettings(this)
+ }
+ .show()
+ }
+ }
+ }
}
private val yearInReviewLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) {
diff --git a/app/src/main/java/org/wikipedia/util/DeviceUtil.kt b/app/src/main/java/org/wikipedia/util/DeviceUtil.kt
index 7fd74887650..b691c5c407c 100644
--- a/app/src/main/java/org/wikipedia/util/DeviceUtil.kt
+++ b/app/src/main/java/org/wikipedia/util/DeviceUtil.kt
@@ -2,12 +2,14 @@ package org.wikipedia.util
import android.app.Activity
import android.content.Context
+import android.content.Intent
import android.content.res.Configuration
import android.content.res.Resources
import android.graphics.Color
import android.net.ConnectivityManager
import android.os.Build
import android.os.Handler
+import android.provider.Settings
import android.view.KeyCharacterMap
import android.view.KeyEvent
import android.view.View
@@ -107,6 +109,19 @@ object DeviceUtil {
WindowCompat.getInsetsController(activity.window, activity.window.decorView).isAppearanceLightStatusBars = !WikipediaApp.instance.currentTheme.isDark
}
+ fun openNotificationSettings(context: Context){
+ val intent= if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS).apply {
+ putExtra(Settings.EXTRA_APP_PACKAGE,context.packageName)
+ }
+ }else{
+ Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS).apply {
+ data = android.net.Uri.fromParts("package", context.packageName, null)
+ }
+ }
+ context.startActivity(intent as? Intent)
+ }
+
val isOnWiFi: Boolean
get() {
val info = (WikipediaApp.instance.getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager)
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 8bfa5d736ef..e8ddd3e0d55 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -825,6 +825,9 @@
All types
%s\'s talk page
The function is not available while offline.
+ Enable Notification to stay updated
+ Settings
+ Notifications are disabled. Enable them in settings.