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.