From ecd3bd0edc2209688909de1cbbc2ce590ceebcdc Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 18 Oct 2023 11:38:33 +0200 Subject: [PATCH 1/4] Replace kotlin extension with view bindings in SelectPermissionBottomSheetDialog --- .../SelectPermissionBottomSheetDialog.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt index 14b98afb3f..0dc99f4091 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt @@ -39,30 +39,30 @@ import com.infomaniak.drive.data.models.Permission import com.infomaniak.drive.data.models.ShareLink.* import com.infomaniak.drive.data.models.Shareable import com.infomaniak.drive.data.models.Shareable.ShareablePermission +import com.infomaniak.drive.databinding.FragmentSelectPermissionBinding import com.infomaniak.drive.ui.fileList.fileShare.PermissionsAdapter import com.infomaniak.drive.views.FullScreenBottomSheetDialog import com.infomaniak.lib.core.models.ApiResponse import com.infomaniak.lib.core.utils.* import kotlinx.android.parcel.Parcelize -import kotlinx.android.synthetic.main.fragment_select_permission.permissionsRecyclerView -import kotlinx.android.synthetic.main.fragment_select_permission.saveButton -import kotlinx.android.synthetic.main.fragment_select_permission.toolbar import kotlinx.coroutines.Dispatchers class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { + private var binding: FragmentSelectPermissionBinding by safeBinding() + private lateinit var adapter: PermissionsAdapter private lateinit var permissionsGroup: PermissionsGroup private val navigationArgs: SelectPermissionBottomSheetDialogArgs by navArgs() private val selectPermissionViewModel: SelectPermissionViewModel by viewModels() - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_select_permission, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + return FragmentSelectPermissionBinding.inflate(inflater, container, false).also { binding = it }.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - toolbar.setNavigationOnClickListener { findNavController().popBackStack() } + binding.toolbar.setNavigationOnClickListener { findNavController().popBackStack() } selectPermissionViewModel.apply { currentPermission = currentPermission ?: navigationArgs.currentPermission @@ -83,7 +83,7 @@ class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { setAll(getPermissions()) selectionPosition = permissionList.indexOf(selectPermissionViewModel.currentPermission) } - permissionsRecyclerView.adapter = adapter + binding.permissionsRecyclerView.adapter = adapter } private fun getPermissions(): ArrayList { @@ -124,7 +124,7 @@ class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { } private fun configureSaveButton() { - saveButton.setOnClickListener { + binding.saveButton.setOnClickListener { with(selectPermissionViewModel) { when (permissionsGroup) { PermissionsGroup.EXTERNAL_USERS_RIGHTS, PermissionsGroup.USERS_RIGHTS -> { @@ -148,7 +148,7 @@ class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { } } - private fun updateShareLinkOfficePermission(file: File, permission: Permission?) { + private fun updateShareLinkOfficePermission(file: File, permission: Permission?) = with(binding) { saveButton.initProgress(viewLifecycleOwner) saveButton.showProgress() selectPermissionViewModel.editFileShareLinkOfficePermission( @@ -159,7 +159,7 @@ class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { } } - private fun updatePermission(file: File, shareableItem: Shareable?, permission: ShareablePermission? = null) { + private fun updatePermission(file: File, shareableItem: Shareable?, permission: ShareablePermission? = null) = with(binding) { saveButton.initProgress(viewLifecycleOwner) saveButton.showProgress() shareableItem?.let { shareable -> @@ -198,7 +198,7 @@ class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { } else { SnackbarUtils.showSnackbar(requireView(), errorMessage) } - saveButton.hideProgress(R.string.buttonSave) + binding.saveButton.hideProgress(R.string.buttonSave) } internal class SelectPermissionViewModel : ViewModel() { From ac6e839c173006b76b094ccb1e31dad13d9ce0fc Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 18 Oct 2023 11:53:07 +0200 Subject: [PATCH 2/4] Replace kotlin extension with view bindings in SelectMediaFoldersDialog --- .../menu/settings/SelectMediaFoldersDialog.kt | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectMediaFoldersDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectMediaFoldersDialog.kt index 178335c7d4..687eae952b 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectMediaFoldersDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectMediaFoldersDialog.kt @@ -28,17 +28,15 @@ import androidx.fragment.app.viewModels import androidx.lifecycle.* import com.infomaniak.drive.R import com.infomaniak.drive.data.models.MediaFolder +import com.infomaniak.drive.databinding.FragmentBottomSheetSelectMediaFoldersBinding import com.infomaniak.drive.utils.DrivePermissions import com.infomaniak.drive.utils.IsComplete import com.infomaniak.drive.utils.MediaFoldersProvider import com.infomaniak.drive.views.FullScreenBottomSheetDialog import com.infomaniak.drive.views.NoItemsLayoutView +import com.infomaniak.lib.core.utils.safeBinding import com.infomaniak.lib.core.views.DividerItemDecorator import io.realm.Realm -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_media_folders.mediaFolderList -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_media_folders.noMediaFolderLayout -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_media_folders.swipeRefreshLayout -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_media_folders.toolbar import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job import kotlinx.coroutines.launch @@ -46,18 +44,20 @@ import kotlinx.coroutines.runInterruptible class SelectMediaFoldersDialog : FullScreenBottomSheetDialog(), NoItemsLayoutView.INoItemsLayoutView { + private var binding: FragmentBottomSheetSelectMediaFoldersBinding by safeBinding() + private val mediaViewModel: MediaViewModel by viewModels() private lateinit var mediaFoldersAdapter: MediaFoldersAdapter override val noItemsIcon = R.drawable.ic_folder_filled override val noItemsTitle = R.string.noMediaFolderTitle - override val noItemsInitialListView: View by lazy { mediaFolderList } + override val noItemsInitialListView: View by lazy { binding.mediaFolderList } - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - return inflater.inflate(R.layout.fragment_bottom_sheet_select_media_folders, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + return FragmentBottomSheetSelectMediaFoldersBinding.inflate(inflater, container, false).also { binding = it }.root } - override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(binding) { super.onViewCreated(view, savedInstanceState) toolbar.setNavigationOnClickListener { @@ -66,7 +66,7 @@ class SelectMediaFoldersDialog : FullScreenBottomSheetDialog(), NoItemsLayoutVie swipeRefreshLayout.isEnabled = false - noMediaFolderLayout.iNoItemsLayoutView = this + noMediaFolderLayout.iNoItemsLayoutView = this@SelectMediaFoldersDialog mediaFoldersAdapter = MediaFoldersAdapter { mediaFolder, isChecked -> lifecycleScope.launch(Dispatchers.IO) { @@ -84,7 +84,7 @@ class SelectMediaFoldersDialog : FullScreenBottomSheetDialog(), NoItemsLayoutVie if (drivePermissions.checkWriteStoragePermission()) loadFolders() } - private fun loadFolders() { + private fun loadFolders() = with(binding) { swipeRefreshLayout.isRefreshing = true mediaViewModel.elementsToRemove.observe(viewLifecycleOwner) { elementsToRemove -> mediaFolderList.post { @@ -103,7 +103,7 @@ class SelectMediaFoldersDialog : FullScreenBottomSheetDialog(), NoItemsLayoutVie ) } if (isComplete) { - swipeRefreshLayout?.isRefreshing = false + swipeRefreshLayout.isRefreshing = false } } } From 9ba8a18161e36061ae4434672d262b35777eef37 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley Date: Wed, 18 Oct 2023 12:02:58 +0200 Subject: [PATCH 3/4] Replace kotlin extension with view bindings in SelectDriveDialog --- .../ui/menu/settings/SelectDriveDialog.kt | 39 +++++++++++-------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt index c53797aa0a..7d88ca2e62 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt @@ -24,59 +24,64 @@ import android.view.ViewGroup import android.widget.PopupWindow import androidx.core.view.isVisible import androidx.fragment.app.activityViewModels -import com.infomaniak.drive.R import com.infomaniak.drive.data.cache.DriveInfosController import com.infomaniak.drive.data.models.drive.Drive +import com.infomaniak.drive.databinding.FragmentBottomSheetSelectDriveBinding +import com.infomaniak.drive.databinding.PopupSelectUserBinding import com.infomaniak.drive.ui.menu.UserAdapter import com.infomaniak.drive.utils.AccountUtils import com.infomaniak.drive.utils.setUserView import com.infomaniak.drive.views.FullScreenBottomSheetDialog import com.infomaniak.lib.core.models.user.User -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_drive.driveList -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_drive.toolbar -import kotlinx.android.synthetic.main.fragment_bottom_sheet_select_drive.userCardview -import kotlinx.android.synthetic.main.popup_select_user.view.usersRecyclerView +import com.infomaniak.lib.core.utils.safeBinding class SelectDriveDialog : FullScreenBottomSheetDialog() { + private var binding: FragmentBottomSheetSelectDriveBinding by safeBinding() + private var popupLayoutBinding: PopupSelectUserBinding by safeBinding() + private val selectDriveViewModel: SelectDriveViewModel by activityViewModels() - private lateinit var popupLayout: View + private lateinit var popupWindow: PopupWindow - override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { - popupLayout = inflater.inflate(R.layout.popup_select_user, container, false) - return inflater.inflate(R.layout.fragment_bottom_sheet_select_drive, container, false) + override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { + popupLayoutBinding = PopupSelectUserBinding.inflate(inflater, container, false) + return FragmentBottomSheetSelectDriveBinding.inflate(inflater, container, false).also { binding = it }.root } override fun onViewCreated(view: View, savedInstanceState: Bundle?) = with(selectDriveViewModel) { super.onViewCreated(view, savedInstanceState) - toolbar.setNavigationOnClickListener { dismiss() } + binding.toolbar.setNavigationOnClickListener { dismiss() } val driveListAdapter = DriveListAdapter(getDriveList(), false) { newSelectedDrive -> selectedDrive.value = newSelectedDrive dismiss() } - driveList.adapter = driveListAdapter + binding.driveList.adapter = driveListAdapter AccountUtils.getAllUsers().observe(viewLifecycleOwner) { users -> if (users.size > 1) { val selectedUser = users.find { it.id == selectedUserId.value } ?: users.first() - userCardview.setUserView(selectedUser) { - popupWindow = PopupWindow(popupLayout, userCardview.width, ViewGroup.LayoutParams.WRAP_CONTENT).apply { + binding.userCardview.root.setUserView(selectedUser) { + popupWindow = PopupWindow( + popupLayoutBinding.root, + binding.userCardview.root.width, + ViewGroup.LayoutParams.WRAP_CONTENT + ).apply { isOutsideTouchable = true isFocusable = true elevation = 20.0f - showAsDropDown(userCardview) + showAsDropDown(binding.userCardview.root) } } - userCardview.isVisible = true + binding.userCardview.root.isVisible = true - popupLayout.usersRecyclerView.adapter = UserAdapter(users as ArrayList, isCardview = false) { user -> + popupLayoutBinding.usersRecyclerView.adapter = UserAdapter(users as ArrayList, isCardview = false) { user -> selectedUserId.value = user.id driveListAdapter.setDrives(getDriveList()) - userCardview.setUserView(user) { popupWindow.showAsDropDown(userCardview) } + binding.userCardview.root.setUserView(user) { popupWindow.showAsDropDown(binding.userCardview.root) } popupWindow.dismiss() } From e96c7eb1fa880c9dfecf847a2b3c8ec3442fc010 Mon Sep 17 00:00:00 2001 From: Gibran Chevalley <32095402+LunarX@users.noreply.github.com> Date: Wed, 18 Oct 2023 13:40:42 +0200 Subject: [PATCH 4/4] Apply suggestions from code review Co-authored-by: Kevin Boulongne <1788629+KevinBoulongne@users.noreply.github.com> --- .../ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt | 1 + .../com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt index 0dc99f4091..71d6e6b67b 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/bottomSheetDialogs/SelectPermissionBottomSheetDialog.kt @@ -48,6 +48,7 @@ import kotlinx.android.parcel.Parcelize import kotlinx.coroutines.Dispatchers class SelectPermissionBottomSheetDialog : FullScreenBottomSheetDialog() { + private var binding: FragmentSelectPermissionBinding by safeBinding() private lateinit var adapter: PermissionsAdapter diff --git a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt index 7d88ca2e62..7daa58922a 100644 --- a/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt +++ b/app/src/main/java/com/infomaniak/drive/ui/menu/settings/SelectDriveDialog.kt @@ -67,7 +67,7 @@ class SelectDriveDialog : FullScreenBottomSheetDialog() { popupWindow = PopupWindow( popupLayoutBinding.root, binding.userCardview.root.width, - ViewGroup.LayoutParams.WRAP_CONTENT + ViewGroup.LayoutParams.WRAP_CONTENT, ).apply { isOutsideTouchable = true isFocusable = true