From 48a31aa534c1ab7e94ea57e32c9f3906f43e8cda Mon Sep 17 00:00:00 2001
From: kean <grebenyuk.alexander@gmail.com>
Date: Tue, 19 Nov 2024 18:39:21 -0500
Subject: [PATCH] Fix crash in UserProfileSheetViewController

---
 .../NotificationDetailsViewController.swift   |  9 +++--
 .../ReaderDetailLikesListController.swift     |  9 +++--
 .../UserProfileSheetViewController.swift      | 37 ++-----------------
 3 files changed, 15 insertions(+), 40 deletions(-)

diff --git a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationDetailsViewController.swift b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationDetailsViewController.swift
index b465a3d641fd..0d9329260f00 100644
--- a/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationDetailsViewController.swift
+++ b/WordPress/Classes/ViewRelated/Notifications/Controllers/NotificationDetailsViewController.swift
@@ -919,10 +919,11 @@ private extension NotificationDetailsViewController {
     func displayUserProfile(_ user: LikeUser, from indexPath: IndexPath) {
         let userProfileVC = UserProfileSheetViewController(user: user)
         userProfileVC.blogUrlPreviewedSource = "notif_like_list_user_profile"
-        let bottomSheet = BottomSheetViewController(childViewController: userProfileVC)
-
-        let sourceView = tableView.cellForRow(at: indexPath) ?? view
-        bottomSheet.show(from: self, sourceView: sourceView)
+        userProfileVC.modalPresentationStyle = .popover
+        userProfileVC.popoverPresentationController?.sourceView = tableView.cellForRow(at: indexPath) ?? view
+        userProfileVC.popoverPresentationController?.adaptiveSheetPresentationController.prefersGrabberVisible = true
+        userProfileVC.popoverPresentationController?.adaptiveSheetPresentationController.detents = [.medium()]
+        present(userProfileVC, animated: true)
 
         WPAnalytics.track(.userProfileSheetShown, properties: ["source": "like_notification_list"])
     }
diff --git a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift
index 218e3d6951c8..9d3e09b91dd0 100644
--- a/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift
+++ b/WordPress/Classes/ViewRelated/Reader/Detail/Views/ReaderDetailLikesListController.swift
@@ -55,9 +55,12 @@ private extension ReaderDetailLikesListController {
     func displayUserProfile(_ user: LikeUser, from indexPath: IndexPath) {
         let userProfileVC = UserProfileSheetViewController(user: user)
         userProfileVC.blogUrlPreviewedSource = "reader_like_list_user_profile"
-        let bottomSheet = BottomSheetViewController(childViewController: userProfileVC)
-        let sourceView = tableView.cellForRow(at: indexPath) ?? view
-        bottomSheet.show(from: self, sourceView: sourceView)
+        userProfileVC.modalPresentationStyle = .popover
+        userProfileVC.popoverPresentationController?.sourceView = tableView.cellForRow(at: indexPath) ?? view
+        userProfileVC.popoverPresentationController?.adaptiveSheetPresentationController.prefersGrabberVisible = true
+        userProfileVC.popoverPresentationController?.adaptiveSheetPresentationController.detents = [.medium()]
+        present(userProfileVC, animated: true)
+
         WPAnalytics.track(.userProfileSheetShown, properties: ["source": "like_reader_list"])
     }
 
diff --git a/WordPress/Classes/ViewRelated/User Profile Sheet/UserProfileSheetViewController.swift b/WordPress/Classes/ViewRelated/User Profile Sheet/UserProfileSheetViewController.swift
index 212668a69928..a9a429895a53 100644
--- a/WordPress/Classes/ViewRelated/User Profile Sheet/UserProfileSheetViewController.swift	
+++ b/WordPress/Classes/ViewRelated/User Profile Sheet/UserProfileSheetViewController.swift	
@@ -32,48 +32,22 @@ class UserProfileSheetViewController: UITableViewController {
 
     override func viewDidLoad() {
         super.viewDidLoad()
+
         configureTable()
         registerTableCells()
+
+        tableView.contentInset.top = 24 // For grabber and extra inset in popover
     }
 
     override func viewDidLayoutSubviews() {
         super.viewDidLayoutSubviews()
 
         var size = tableView.contentSize
-
-        // Apply a slight padding to the bottom of the view to give it some space to breathe
-        // when being presented in a popover or bottom sheet
-        let bottomPadding = WPDeviceIdentification.isiPad() ? Constants.iPadBottomPadding : Constants.iPhoneBottomPadding
-        size.height += bottomPadding
-
+        size.height += tableView.contentInset.top
         preferredContentSize = size
     }
 }
 
-// MARK: - DrawerPresentable Extension
-
-extension UserProfileSheetViewController: DrawerPresentable {
-
-    var collapsedHeight: DrawerHeight {
-        if traitCollection.verticalSizeClass == .compact {
-            return .maxHeight
-        }
-
-        // Force the table layout to update so the Bottom Sheet gets the right height.
-        tableView.layoutIfNeeded()
-        return .intrinsicHeight
-    }
-
-    var scrollableView: UIScrollView? {
-        return tableView
-    }
-
-    var allowsUserTransition: Bool {
-        false
-    }
-
-}
-
 // MARK: - UITableViewDataSource methods
 
 extension UserProfileSheetViewController {
@@ -212,8 +186,5 @@ private extension UserProfileSheetViewController {
     enum Constants {
         static let userInfoSection = 0
         static let siteSectionTitle = NSLocalizedString("Site", comment: "Header for a single site, shown in Notification user profile.").localizedUppercase
-        static let iPadBottomPadding: CGFloat = 10
-        static let iPhoneBottomPadding: CGFloat = 40
     }
-
 }