diff --git a/app/src/main/java/org/linphone/LinphoneApplication.kt b/app/src/main/java/org/linphone/LinphoneApplication.kt
index 47ac73384..107992dd6 100644
--- a/app/src/main/java/org/linphone/LinphoneApplication.kt
+++ b/app/src/main/java/org/linphone/LinphoneApplication.kt
@@ -87,8 +87,6 @@ class LinphoneApplication : Application(), ImageLoaderFactory {
override fun newImageLoader(): ImageLoader {
return ImageLoader.Builder(this)
- .crossfade(true)
- .crossfade(400)
.components {
add(VideoFrameDecoder.Factory())
add(SvgDecoder.Factory())
diff --git a/app/src/main/java/org/linphone/ui/assistant/fragment/PermissionsFragment.kt b/app/src/main/java/org/linphone/ui/assistant/fragment/PermissionsFragment.kt
index 0ea622a61..7dce673ad 100644
--- a/app/src/main/java/org/linphone/ui/assistant/fragment/PermissionsFragment.kt
+++ b/app/src/main/java/org/linphone/ui/assistant/fragment/PermissionsFragment.kt
@@ -30,11 +30,8 @@ import androidx.annotation.UiThread
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
-import androidx.navigation.navGraphViewModels
-import org.linphone.R
import org.linphone.core.tools.Log
import org.linphone.databinding.AssistantPermissionsFragmentBinding
-import org.linphone.ui.assistant.viewmodel.PermissionsViewModel
@UiThread
class PermissionsFragment : Fragment() {
@@ -44,41 +41,19 @@ class PermissionsFragment : Fragment() {
private lateinit var binding: AssistantPermissionsFragmentBinding
- private val viewModel: PermissionsViewModel by navGraphViewModels(
- R.id.assistant_nav_graph
- )
-
private val requestPermissionLauncher = registerForActivityResult(
ActivityResultContracts.RequestMultiplePermissions()
) { permissions ->
permissions.entries.forEach() {
val permissionName = it.key
val isGranted = it.value
-
- when (permissionName) {
- "READ_CONTACTS" -> {
- viewModel.readContacts.value = isGranted
- }
- "POST_NOTIFICATIONS" -> {
- viewModel.postNotifications.value = isGranted
- }
- "RECORD_AUDIO" -> {
- viewModel.recordAudio.value = isGranted
- }
- "CAMERA" -> {
- viewModel.accessCamera.value = isGranted
- }
- else -> {}
- }
-
if (isGranted) {
Log.i("Permission [$permissionName] is now granted")
} else {
Log.i("Permission [$permissionName] has been denied")
}
}
-
- checkIfAllPermissionsHaveBeenGranted()
+ goToLoginFragment()
}
override fun onCreateView(
@@ -94,33 +69,11 @@ class PermissionsFragment : Fragment() {
super.onViewCreated(view, savedInstanceState)
binding.lifecycleOwner = viewLifecycleOwner
- binding.viewModel = viewModel
binding.setBackClickListener {
findNavController().popBackStack()
}
- binding.setGrantReadContactsClickListener {
- Log.i("$TAG Requesting READ_CONTACTS permission")
- requestPermissionLauncher.launch(arrayOf(Manifest.permission.READ_CONTACTS))
- }
-
- // TODO FIXME: use compat for older Androids
- binding.setGrantPostNotificationsClickListener {
- Log.i("$TAG Requesting POST_NOTIFICATIONS permission")
- requestPermissionLauncher.launch(arrayOf(Manifest.permission.POST_NOTIFICATIONS))
- }
-
- binding.setGrantRecordAudioClickListener {
- Log.i("$TAG Requesting RECORD_AUDIO permission")
- requestPermissionLauncher.launch(arrayOf(Manifest.permission.RECORD_AUDIO))
- }
-
- binding.setGrantAccessCameraClickListener {
- Log.i("$TAG Requesting CAMERA permission")
- requestPermissionLauncher.launch(arrayOf(Manifest.permission.CAMERA))
- }
-
binding.setSkipClickListener {
Log.i("$TAG User clicked skip...")
goToLoginFragment()
@@ -130,8 +83,8 @@ class PermissionsFragment : Fragment() {
Log.i("$TAG Requesting all permissions")
requestPermissionLauncher.launch(
arrayOf(
- Manifest.permission.READ_CONTACTS,
Manifest.permission.POST_NOTIFICATIONS,
+ Manifest.permission.READ_CONTACTS,
Manifest.permission.RECORD_AUDIO,
Manifest.permission.CAMERA
)
@@ -147,42 +100,8 @@ class PermissionsFragment : Fragment() {
}
}
- override fun onResume() {
- super.onResume()
-
- viewModel.readContacts.value = ContextCompat.checkSelfPermission(
- requireContext(),
- Manifest.permission.READ_CONTACTS
- ) == PackageManager.PERMISSION_GRANTED
-
- // TODO FIXME: use compat for older Androids
- viewModel.postNotifications.value = ContextCompat.checkSelfPermission(
- requireContext(),
- Manifest.permission.POST_NOTIFICATIONS
- ) == PackageManager.PERMISSION_GRANTED
-
- viewModel.recordAudio.value = ContextCompat.checkSelfPermission(
- requireContext(),
- Manifest.permission.RECORD_AUDIO
- ) == PackageManager.PERMISSION_GRANTED
-
- viewModel.accessCamera.value = ContextCompat.checkSelfPermission(
- requireContext(),
- Manifest.permission.CAMERA
- ) == PackageManager.PERMISSION_GRANTED
-
- checkIfAllPermissionsHaveBeenGranted()
- }
-
private fun goToLoginFragment() {
val action = PermissionsFragmentDirections.actionPermissionsFragmentToLoginFragment()
findNavController().navigate(action)
}
-
- private fun checkIfAllPermissionsHaveBeenGranted() {
- if (viewModel.readContacts.value == true && viewModel.postNotifications.value == true && viewModel.recordAudio.value == true && viewModel.accessCamera.value == true) {
- Log.i("$TAG All permissions are granted, continuing to login fragment")
- goToLoginFragment()
- }
- }
}
diff --git a/app/src/main/java/org/linphone/ui/assistant/viewmodel/PermissionsViewModel.kt b/app/src/main/java/org/linphone/ui/assistant/viewmodel/PermissionsViewModel.kt
deleted file mode 100644
index b2870f29d..000000000
--- a/app/src/main/java/org/linphone/ui/assistant/viewmodel/PermissionsViewModel.kt
+++ /dev/null
@@ -1,34 +0,0 @@
-/*
- * Copyright (c) 2010-2023 Belledonne Communications SARL.
- *
- * This file is part of linphone-android
- * (see https://www.linphone.org).
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see .
- */
-package org.linphone.ui.assistant.viewmodel
-
-import androidx.annotation.UiThread
-import androidx.lifecycle.MutableLiveData
-import androidx.lifecycle.ViewModel
-
-class PermissionsViewModel @UiThread constructor() : ViewModel() {
- val readContacts = MutableLiveData()
-
- val postNotifications = MutableLiveData()
-
- val recordAudio = MutableLiveData()
-
- val accessCamera = MutableLiveData()
-}
diff --git a/app/src/main/res/drawable/bell_ringing.xml b/app/src/main/res/drawable/bell_ringing.xml
new file mode 100644
index 000000000..256b640d8
--- /dev/null
+++ b/app/src/main/res/drawable/bell_ringing.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/app/src/main/res/layout/assistant_permissions_fragment.xml b/app/src/main/res/layout/assistant_permissions_fragment.xml
index 4936024bd..05b2b883e 100644
--- a/app/src/main/res/layout/assistant_permissions_fragment.xml
+++ b/app/src/main/res/layout/assistant_permissions_fragment.xml
@@ -26,9 +26,6 @@
-
-
-
-
+ android:background="@drawable/circle_light_blue_button_background"
+ android:padding="12dp"
+ android:src="@drawable/bell_ringing"
+ app:tint="@color/gray_main2_500"
+ app:layout_constraintTop_toBottomOf="@id/subtitle"
+ app:layout_constraintStart_toStartOf="parent"/>
-
-
-
-
+ app:layout_constraintTop_toTopOf="@id/post_notifications_icon"
+ app:layout_constraintStart_toEndOf="@id/post_notifications_icon"
+ app:layout_constraintBottom_toBottomOf="@id/post_notifications_icon"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+
-
-
+ android:text="@string/assistant_permissions_read_contacts_title"
+ android:maxLines="2"
+ android:ellipsize="end"
+ app:layout_constraintTop_toTopOf="@id/read_contacts_icon"
+ app:layout_constraintStart_toEndOf="@id/read_contacts_icon"
+ app:layout_constraintBottom_toBottomOf="@id/read_contacts_icon"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+
-
-
-
-
+ android:text="@string/assistant_permissions_record_audio_title"
+ android:maxLines="2"
+ android:ellipsize="end"
+ app:layout_constraintTop_toTopOf="@id/record_audio_icon"
+ app:layout_constraintStart_toEndOf="@id/record_audio_icon"
+ app:layout_constraintBottom_toBottomOf="@id/record_audio_icon"
+ app:layout_constraintEnd_toEndOf="parent"/>
+
+
-
-
+ app:layout_constraintTop_toTopOf="@id/access_camera_icon"
+ app:layout_constraintStart_toEndOf="@id/access_camera_icon"
+ app:layout_constraintBottom_toBottomOf="@id/access_camera_icon"
+ app:layout_constraintEnd_toEndOf="parent"/>
+ app:layout_constraintEnd_toEndOf="parent" />
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e42e9994a..da08f822d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -160,16 +160,13 @@
Failed to login: error code is %i
Grant permissions
Grant all
+ Do it later
- To be able to work properly, we need you to grand the application the following permissions.\n\nIf you don\'t, some features won\'t be available, but you can grant them later.
- Read contacts
- This allows us to import your address-book in &appName;
- Post notifications
- To notify incoming calls & chat messages
- Record audio
- For audio calls, duh!
- Access camera
- For video calls & scan QR codes
+ To fully enjoy &appName; we need you to grant us the following permissions :
+ Read contacts: To display your contacts and find whom is using &appName;.
+ Post notifications: To be informed when you receive a message or a call.
+ Record audio: So your correspondent can hear you and to record voice messages.
+ Access camera: To capture video during video calls and conferences.
Manage the profile
Connected
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 49c0466d2..948d03404 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -3,26 +3,32 @@