mirror of
https://gitlab.linphone.org/BC/public/linphone-android.git
synced 2026-01-17 11:28:06 +00:00
Improved permission request in-app when it has already been denied once
This commit is contained in:
parent
ec9984c86b
commit
d05da148e7
7 changed files with 63 additions and 45 deletions
|
|
@ -20,9 +20,12 @@
|
|||
package org.linphone.ui
|
||||
|
||||
import android.annotation.SuppressLint
|
||||
import android.content.Intent
|
||||
import android.content.res.Configuration
|
||||
import android.content.res.Resources
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.ViewGroup
|
||||
import android.view.WindowManager
|
||||
import androidx.annotation.DrawableRes
|
||||
|
|
@ -219,6 +222,19 @@ open class GenericActivity : AppCompatActivity() {
|
|||
}
|
||||
}
|
||||
|
||||
fun goToAndroidPermissionSettings() {
|
||||
Log.i("$TAG Going into Android settings for our app")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
Uri.fromParts(
|
||||
"package",
|
||||
packageName, null
|
||||
)
|
||||
)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
startActivity(intent)
|
||||
}
|
||||
|
||||
private fun enableWindowSecureMode(enable: Boolean) {
|
||||
val flags: Int = window.attributes.flags
|
||||
if ((enable && flags and WindowManager.LayoutParams.FLAG_SECURE != 0) ||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.navigation.fragment.findNavController
|
||||
import androidx.navigation.navGraphViewModels
|
||||
|
|
@ -96,8 +97,13 @@ class QrCodeScannerFragment : GenericFragment() {
|
|||
}
|
||||
|
||||
if (!isCameraPermissionGranted()) {
|
||||
Log.w("$TAG CAMERA permission wasn't granted yet, asking for it now")
|
||||
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.CAMERA)) {
|
||||
Log.w("$TAG CAMERA permission wasn't granted yet, asking for it now")
|
||||
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for CAMERA will be automatically denied, go to android app settings instead")
|
||||
(requireActivity() as GenericActivity).goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,10 +24,8 @@ import android.content.Intent
|
|||
import android.content.pm.PackageManager
|
||||
import android.content.res.Resources
|
||||
import android.graphics.Color
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.os.PowerManager
|
||||
import android.provider.Settings
|
||||
import androidx.activity.SystemBarStyle
|
||||
import androidx.activity.enableEdgeToEdge
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
|
|
@ -96,7 +94,6 @@ class CallActivity : GenericActivity() {
|
|||
callViewModel.toggleVideo()
|
||||
} else {
|
||||
Log.e("$TAG CAMERA permission has been denied")
|
||||
goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -108,7 +105,6 @@ class CallActivity : GenericActivity() {
|
|||
callViewModel.toggleMuteMicrophone()
|
||||
} else {
|
||||
Log.e("$TAG RECORD_AUDIO permission has been denied")
|
||||
goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -249,15 +245,25 @@ class CallActivity : GenericActivity() {
|
|||
|
||||
callViewModel.requestRecordAudioPermission.observe(this) {
|
||||
it.consume {
|
||||
Log.w("$TAG Asking for RECORD_AUDIO permission")
|
||||
requestRecordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.RECORD_AUDIO)) {
|
||||
Log.w("$TAG Asking for RECORD_AUDIO permission")
|
||||
requestRecordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for RECORD_AUDIO will be automatically denied, go to android app settings instead")
|
||||
goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
callViewModel.requestCameraPermission.observe(this) {
|
||||
it.consume {
|
||||
Log.w("$TAG Asking for CAMERA permission")
|
||||
requestCameraPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
|
||||
Log.w("$TAG Asking for CAMERA permission")
|
||||
requestCameraPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for CAMERA will be automatically denied, go to android app settings instead")
|
||||
goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -551,17 +557,4 @@ class CallActivity : GenericActivity() {
|
|||
proximityWakeLock.release(PowerManager.RELEASE_FLAG_WAIT_FOR_NO_PROXIMITY)
|
||||
}
|
||||
}
|
||||
|
||||
private fun goToAndroidPermissionSettings() {
|
||||
Log.i("$TAG Going into Android settings for our app")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
Uri.fromParts(
|
||||
"package",
|
||||
packageName, null
|
||||
)
|
||||
)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -37,6 +37,7 @@ import androidx.activity.enableEdgeToEdge
|
|||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.car.app.connection.CarConnection
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.os.bundleOf
|
||||
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
|
||||
import androidx.core.view.ViewCompat
|
||||
|
|
@ -188,7 +189,13 @@ class MainActivity : GenericActivity() {
|
|||
|
||||
viewModel.askPostNotificationsPermissionEvent.observe(this) {
|
||||
it.consume {
|
||||
postNotificationsPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.POST_NOTIFICATIONS)) {
|
||||
Log.w("$TAG Asking for POST_NOTIFICATIONS permission")
|
||||
postNotificationsPermissionLauncher.launch(Manifest.permission.POST_NOTIFICATIONS)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for POST_NOTIFICATIONS will be automatically denied, go to android app settings instead")
|
||||
goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -723,8 +723,14 @@ open class ConversationFragment : SlidingPaneChildFragment() {
|
|||
|
||||
sendMessageViewModel.askRecordAudioPermissionEvent.observe(viewLifecycleOwner) {
|
||||
it.consume {
|
||||
Log.w("$TAG Asking for RECORD_AUDIO permission")
|
||||
requestRecordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.RECORD_AUDIO)) {
|
||||
Log.w("$TAG Asking for RECORD_AUDIO permission")
|
||||
requestRecordAudioPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for RECORD_AUDIO will be automatically denied, go to android app settings instead")
|
||||
(requireActivity() as GenericActivity).goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -27,6 +27,7 @@ import android.view.View
|
|||
import android.view.ViewGroup
|
||||
import androidx.activity.result.contract.ActivityResultContracts
|
||||
import androidx.annotation.UiThread
|
||||
import androidx.core.app.ActivityCompat
|
||||
import androidx.core.content.ContextCompat
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import androidx.navigation.fragment.findNavController
|
||||
|
|
@ -143,8 +144,13 @@ class MeetingWaitingRoomFragment : GenericMainFragment() {
|
|||
|
||||
if (!isCameraPermissionGranted()) {
|
||||
viewModel.isVideoAvailable.value = false
|
||||
Log.w("$TAG CAMERA permission wasn't granted yet, asking for it now")
|
||||
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
if (ActivityCompat.shouldShowRequestPermissionRationale(requireActivity(), Manifest.permission.CAMERA)) {
|
||||
Log.w("$TAG CAMERA permission wasn't granted yet, asking for it now")
|
||||
requestPermissionLauncher.launch(Manifest.permission.CAMERA)
|
||||
} else {
|
||||
Log.i("$TAG Permission request for CAMERA will be automatically denied, go to android app settings instead")
|
||||
(requireActivity() as GenericActivity).goToAndroidPermissionSettings()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -19,10 +19,7 @@
|
|||
*/
|
||||
package org.linphone.ui.main.settings.fragment
|
||||
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Bundle
|
||||
import android.provider.Settings
|
||||
import android.view.LayoutInflater
|
||||
import android.view.View
|
||||
import android.view.ViewGroup
|
||||
|
|
@ -31,8 +28,8 @@ import android.widget.ArrayAdapter
|
|||
import androidx.annotation.UiThread
|
||||
import androidx.lifecycle.ViewModelProvider
|
||||
import org.linphone.R
|
||||
import org.linphone.core.tools.Log
|
||||
import org.linphone.databinding.SettingsAdvancedFragmentBinding
|
||||
import org.linphone.ui.GenericActivity
|
||||
import org.linphone.ui.main.fragment.GenericMainFragment
|
||||
import org.linphone.ui.main.settings.viewmodel.SettingsViewModel
|
||||
|
||||
|
|
@ -97,7 +94,7 @@ class SettingsAdvancedFragment : GenericMainFragment() {
|
|||
}
|
||||
|
||||
binding.setAndroidSettingsClickListener {
|
||||
goToAndroidPermissionSettings()
|
||||
(requireActivity() as GenericActivity).goToAndroidPermissionSettings()
|
||||
}
|
||||
|
||||
viewModel.mediaEncryptionIndex.observe(viewLifecycleOwner) {
|
||||
|
|
@ -161,17 +158,4 @@ class SettingsAdvancedFragment : GenericMainFragment() {
|
|||
binding.outputAudioDevice.onItemSelectedListener = outputAudioDeviceDropdownListener
|
||||
binding.outputAudioDevice.setSelection(index)
|
||||
}
|
||||
|
||||
private fun goToAndroidPermissionSettings() {
|
||||
Log.i("$TAG Going into Android settings for our app")
|
||||
val intent = Intent(
|
||||
Settings.ACTION_APPLICATION_DETAILS_SETTINGS,
|
||||
Uri.fromParts(
|
||||
"package",
|
||||
requireContext().packageName, null
|
||||
)
|
||||
)
|
||||
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||
startActivity(intent)
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue