Skip to content

Commit db869a2

Browse files
committed
Ask for notification permission in api 33 when permission is not granted
1 parent d3c83de commit db869a2

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

owncloudApp/src/main/java/com/owncloud/android/ui/activity/FileDisplayActivity.kt

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,18 +27,23 @@
2727

2828
package com.owncloud.android.ui.activity
2929

30+
import android.Manifest.permission.POST_NOTIFICATIONS
3031
import android.accounts.Account
3132
import android.content.BroadcastReceiver
3233
import android.content.Context
3334
import android.content.Intent
3435
import android.content.IntentFilter
36+
import android.content.pm.PackageManager
3537
import android.net.Uri
38+
import android.os.Build
3639
import android.os.Bundle
3740
import android.os.RemoteException
3841
import android.view.Menu
3942
import android.view.MenuItem
4043
import android.view.View
4144
import android.widget.FrameLayout
45+
import androidx.activity.result.contract.ActivityResultContracts
46+
import androidx.core.content.ContextCompat
4247
import androidx.core.view.isVisible
4348
import androidx.fragment.app.Fragment
4449
import androidx.localbroadcastmanager.content.LocalBroadcastManager
@@ -47,6 +52,7 @@ import com.owncloud.android.AppRater
4752
import com.owncloud.android.BuildConfig
4853
import com.owncloud.android.MainApp
4954
import com.owncloud.android.R
55+
import com.owncloud.android.data.preferences.datasources.SharedPreferencesProvider
5056
import com.owncloud.android.databinding.ActivityMainBinding
5157
import com.owncloud.android.domain.camerauploads.model.UploadBehavior
5258
import com.owncloud.android.domain.capabilities.model.OCCapability
@@ -164,6 +170,8 @@ class FileDisplayActivity : FileActivity(),
164170
private val fileOperationsViewModel: FileOperationsViewModel by viewModel()
165171
private val transfersViewModel: TransfersViewModel by viewModel()
166172

173+
private val sharedPreferences: SharedPreferencesProvider by inject()
174+
167175
var filesUploadHelper: FilesUploadHelper? = null
168176
internal set
169177

@@ -246,9 +254,34 @@ class FileDisplayActivity : FileActivity(),
246254
AppRater.appLaunched(this, packageName)
247255
}
248256

257+
checkNotificationPermission()
249258
Timber.v("onCreate() end")
250259
}
251260

261+
private fun checkNotificationPermission() {
262+
// Ask for permission only in case it's api >= 33 and notifications are not granted.
263+
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU ||
264+
ContextCompat.checkSelfPermission(this, POST_NOTIFICATIONS) == PackageManager.PERMISSION_GRANTED
265+
) return
266+
267+
// Permission denied. Can be because notifications are off by default or because they were denied by the user.
268+
val alreadyRequested = sharedPreferences.getBoolean(PREFERENCE_NOTIFICATION_PERMISSION_REQUESTED, false)
269+
val shouldShowPermissionRequest = shouldShowRequestPermissionRationale(POST_NOTIFICATIONS)
270+
Timber.d("Already requested notification permission $alreadyRequested and should ask again $shouldShowPermissionRequest")
271+
if (!alreadyRequested || shouldShowPermissionRequest) {
272+
// Not requested yet or system considers we can request the permission again.
273+
val requestPermissionLauncher =
274+
registerForActivityResult(ActivityResultContracts.RequestPermission()) { isGranted: Boolean ->
275+
Timber.d("Permission to send notifications granted: $isGranted")
276+
if (!isGranted) {
277+
showSnackMessage(getString(R.string.notifications_permission_denied))
278+
}
279+
sharedPreferences.putBoolean(PREFERENCE_NOTIFICATION_PERMISSION_REQUESTED, true)
280+
}
281+
requestPermissionLauncher.launch(POST_NOTIFICATIONS)
282+
}
283+
}
284+
252285
override fun onPostCreate(savedInstanceState: Bundle?) {
253286
super.onPostCreate(savedInstanceState)
254287

@@ -1535,6 +1568,7 @@ class FileDisplayActivity : FileActivity(),
15351568
private const val KEY_UPLOAD_HELPER = "FILE_UPLOAD_HELPER"
15361569
private const val KEY_FILE_LIST_OPTION = "FILE_LIST_OPTION"
15371570

1571+
private const val PREFERENCE_NOTIFICATION_PERMISSION_REQUESTED = "PREFERENCE_NOTIFICATION_PERMISSION_REQUESTED"
15381572
const val ALL_FILES_SAF_REGEX = "*/*"
15391573

15401574
const val ACTION_DETAILS = "com.owncloud.android.ui.activity.action.DETAILS"

owncloudApp/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -549,6 +549,7 @@
549549
<string name="prefs_camera_upload_behaviour_dialog_title">Original file will be</string>
550550
<string name="prefs_camera_upload_behaviour_title">Original file will be</string>
551551
<string name="prefs_camera_upload_last_sync_title">Last synchronization</string>
552+
<string name="notifications_permission_denied">You can update your preferences in Settings</string>
552553
<string name="upload_copy_files">Copy file</string>
553554
<string name="upload_move_files">Move file</string>
554555

0 commit comments

Comments
 (0)