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 @@