diff --git a/vector/src/main/java/im/vector/riotx/core/utils/PermissionsTools.kt b/vector/src/main/java/im/vector/riotx/core/utils/PermissionsTools.kt index 360a5efccc..6f081d52de 100644 --- a/vector/src/main/java/im/vector/riotx/core/utils/PermissionsTools.kt +++ b/vector/src/main/java/im/vector/riotx/core/utils/PermissionsTools.kt @@ -68,6 +68,7 @@ const val PERMISSION_REQUEST_CODE_DOWNLOAD_FILE = 575 const val PERMISSION_REQUEST_CODE_PICK_ATTACHMENT = 576 const val PERMISSION_REQUEST_CODE_INCOMING_URI = 577 const val PERMISSION_REQUEST_CODE_PREVIEW_FRAGMENT = 578 +const val PERMISSION_REQUEST_CODE_READ_CONTACTS = 579 /** * Log the used permissions statuses. diff --git a/vector/src/main/java/im/vector/riotx/features/createdirect/CreateDirectRoomActivity.kt b/vector/src/main/java/im/vector/riotx/features/createdirect/CreateDirectRoomActivity.kt index 256d9902f6..6acd0e099b 100644 --- a/vector/src/main/java/im/vector/riotx/features/createdirect/CreateDirectRoomActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/createdirect/CreateDirectRoomActivity.kt @@ -38,9 +38,14 @@ import im.vector.riotx.core.extensions.addFragmentToBackstack import im.vector.riotx.core.extensions.exhaustive import im.vector.riotx.core.platform.SimpleFragmentActivity import im.vector.riotx.core.platform.WaitingViewData +import im.vector.riotx.core.utils.PERMISSIONS_FOR_MEMBERS_SEARCH +import im.vector.riotx.core.utils.PERMISSION_REQUEST_CODE_READ_CONTACTS +import im.vector.riotx.core.utils.allGranted +import im.vector.riotx.core.utils.checkPermissions +import im.vector.riotx.features.phonebook.PhoneBookFragment +import im.vector.riotx.features.phonebook.PhoneBookViewModel import im.vector.riotx.features.userdirectory.KnownUsersFragment import im.vector.riotx.features.userdirectory.KnownUsersFragmentArgs -import im.vector.riotx.features.phonebook.PhoneBookViewModel import im.vector.riotx.features.userdirectory.UserDirectoryFragment import im.vector.riotx.features.userdirectory.UserDirectorySharedAction import im.vector.riotx.features.userdirectory.UserDirectorySharedActionViewModel @@ -76,7 +81,7 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() { UserDirectorySharedAction.Close -> finish() UserDirectorySharedAction.GoBack -> onBackPressed() is UserDirectorySharedAction.OnMenuItemSelected -> onMenuItemSelected(sharedAction) - UserDirectorySharedAction.OpenPhoneBook -> TODO() + UserDirectorySharedAction.OpenPhoneBook -> openPhoneBook() }.exhaustive } .disposeOnDestroy() @@ -95,6 +100,24 @@ class CreateDirectRoomActivity : SimpleFragmentActivity() { } } + private fun openPhoneBook() { + // Check permission first + if (checkPermissions(PERMISSIONS_FOR_MEMBERS_SEARCH, + this, + PERMISSION_REQUEST_CODE_READ_CONTACTS, + 0)) { + addFragmentToBackstack(R.id.container, PhoneBookFragment::class.java) + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + if (allGranted(grantResults)) { + if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS) { + addFragmentToBackstack(R.id.container, PhoneBookFragment::class.java) + } + } + } + private fun onMenuItemSelected(action: UserDirectorySharedAction.OnMenuItemSelected) { if (action.itemId == R.id.action_create_direct_room) { viewModel.handle(CreateDirectRoomAction.CreateRoomAndInviteSelectedUsers(action.selectedUsers)) diff --git a/vector/src/main/java/im/vector/riotx/features/invite/InviteUsersToRoomActivity.kt b/vector/src/main/java/im/vector/riotx/features/invite/InviteUsersToRoomActivity.kt index 4d869aacee..29d230ba34 100644 --- a/vector/src/main/java/im/vector/riotx/features/invite/InviteUsersToRoomActivity.kt +++ b/vector/src/main/java/im/vector/riotx/features/invite/InviteUsersToRoomActivity.kt @@ -33,11 +33,15 @@ import im.vector.riotx.core.extensions.addFragmentToBackstack import im.vector.riotx.core.extensions.exhaustive import im.vector.riotx.core.platform.SimpleFragmentActivity import im.vector.riotx.core.platform.WaitingViewData +import im.vector.riotx.core.utils.PERMISSIONS_FOR_MEMBERS_SEARCH +import im.vector.riotx.core.utils.PERMISSION_REQUEST_CODE_READ_CONTACTS +import im.vector.riotx.core.utils.allGranted +import im.vector.riotx.core.utils.checkPermissions import im.vector.riotx.core.utils.toast -import im.vector.riotx.features.userdirectory.KnownUsersFragment -import im.vector.riotx.features.userdirectory.KnownUsersFragmentArgs import im.vector.riotx.features.phonebook.PhoneBookFragment import im.vector.riotx.features.phonebook.PhoneBookViewModel +import im.vector.riotx.features.userdirectory.KnownUsersFragment +import im.vector.riotx.features.userdirectory.KnownUsersFragmentArgs import im.vector.riotx.features.userdirectory.UserDirectoryFragment import im.vector.riotx.features.userdirectory.UserDirectorySharedAction import im.vector.riotx.features.userdirectory.UserDirectorySharedActionViewModel @@ -78,8 +82,7 @@ class InviteUsersToRoomActivity : SimpleFragmentActivity() { UserDirectorySharedAction.Close -> finish() UserDirectorySharedAction.GoBack -> onBackPressed() is UserDirectorySharedAction.OnMenuItemSelected -> onMenuItemSelected(sharedAction) - UserDirectorySharedAction.OpenPhoneBook -> - addFragmentToBackstack(R.id.container, PhoneBookFragment::class.java) + UserDirectorySharedAction.OpenPhoneBook -> openPhoneBook() }.exhaustive } .disposeOnDestroy() @@ -98,6 +101,24 @@ class InviteUsersToRoomActivity : SimpleFragmentActivity() { viewModel.observeViewEvents { renderInviteEvents(it) } } + private fun openPhoneBook() { + // Check permission first + if (checkPermissions(PERMISSIONS_FOR_MEMBERS_SEARCH, + this, + PERMISSION_REQUEST_CODE_READ_CONTACTS, + 0)) { + addFragmentToBackstack(R.id.container, PhoneBookFragment::class.java) + } + } + + override fun onRequestPermissionsResult(requestCode: Int, permissions: Array, grantResults: IntArray) { + if (allGranted(grantResults)) { + if (requestCode == PERMISSION_REQUEST_CODE_READ_CONTACTS) { + addFragmentToBackstack(R.id.container, PhoneBookFragment::class.java) + } + } + } + private fun onMenuItemSelected(action: UserDirectorySharedAction.OnMenuItemSelected) { if (action.itemId == R.id.action_invite_users_to_room_invite) { viewModel.handle(InviteUsersToRoomAction.InviteSelectedUsers(action.selectedUsers))