From 641e7d5f2ebce3d2591363652a90b19f5732bbcc Mon Sep 17 00:00:00 2001 From: Riley Testut Date: Fri, 26 May 2023 16:10:21 -0500 Subject: [PATCH] Revises store page permissions UI MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Switches “Permissions” and “Privacy” titles * Makes “Entitlements” and “Other Entitlements” top-level sections * Matches parent table view layout margins --- .../AppDetailCollectionViewController.swift | 23 ++++++++++++------- AltStore/Base.lproj/Main.storyboard | 4 ++-- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/AltStore/App Detail/AppDetailCollectionViewController.swift b/AltStore/App Detail/AppDetailCollectionViewController.swift index 25de214c..3e51abf2 100644 --- a/AltStore/App Detail/AppDetailCollectionViewController.swift +++ b/AltStore/App Detail/AppDetailCollectionViewController.swift @@ -100,6 +100,10 @@ class AppDetailCollectionViewController: UICollectionViewController // Allow parent background color to show through. self.collectionView.backgroundColor = nil + // Match the parent table view margins. + self.collectionView.directionalLayoutMargins.leading = 20 + self.collectionView.directionalLayoutMargins.trailing = 20 + let collectionViewLayout = self.makeLayout() self.collectionView.collectionViewLayout = collectionViewLayout @@ -109,21 +113,21 @@ class AppDetailCollectionViewController: UICollectionViewController self.headerRegistration = UICollectionView.SupplementaryRegistration(elementKind: UICollectionView.elementKindSectionHeader) { [weak self] (headerView, elementKind, indexPath) in var configuration = UIListContentConfiguration.plainHeader() + // Match parent table view section headers. + configuration.textProperties.font = UIFont.systemFont(ofSize: 22, weight: .bold) // .boldSystemFont(ofSize:) returns *semi-bold* color smh. + configuration.textProperties.color = .label + switch Section(rawValue: indexPath.section)! { case .privacy: break case .knownEntitlements: - let fontDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .title3).withSymbolicTraits(.traitBold) ?? UIFontDescriptor.preferredFontDescriptor(withTextStyle: .title3) - configuration.textProperties.font = UIFont(descriptor: fontDescriptor, size: 0.0) configuration.text = NSLocalizedString("Entitlements", comment: "") configuration.secondaryTextProperties.font = UIFont.preferredFont(forTextStyle: .callout) configuration.textToSecondaryTextVerticalPadding = 8 - configuration.secondaryText = NSLocalizedString("Entitlements are additional permissions that grant access to certain system services, including potentially sensitive information. We recommend reviewing these before sideloading.", comment: "") + configuration.secondaryText = NSLocalizedString("Entitlements are additional permissions that grant access to certain system services, including potentially sensitive information.", comment: "") case .unknownEntitlements: - let fontDescriptor = UIFontDescriptor.preferredFontDescriptor(withTextStyle: .body).withSymbolicTraits(.traitBold) ?? UIFontDescriptor.preferredFontDescriptor(withTextStyle: .body) - configuration.textProperties.font = UIFont(descriptor: fontDescriptor, size: 0.0) configuration.text = NSLocalizedString("Other Entitlements", comment: "") let action = UIAction(image: UIImage(systemName: "questionmark.circle")) { _ in @@ -149,6 +153,9 @@ private extension AppDetailCollectionViewController { func makeLayout() -> UICollectionViewCompositionalLayout { + let layoutConfig = UICollectionViewCompositionalLayoutConfiguration() + layoutConfig.contentInsetsReference = .layoutMargins + let layout = UICollectionViewCompositionalLayout(sectionProvider: { [privacyPermissions, knownEntitlementPermissions, unknownEntitlementPermissions] (sectionIndex, layoutEnvironment) -> NSCollectionLayoutSection? in guard let section = Section(rawValue: sectionIndex) else { return nil } switch section @@ -179,7 +186,7 @@ private extension AppDetailCollectionViewController case .knownEntitlements, .unknownEntitlements: return nil } - }) + }, configuration: layoutConfig) return layout } @@ -199,12 +206,12 @@ private extension AppDetailCollectionViewController guard let self, #available(iOS 16, *) else { return } cell.contentConfiguration = UIHostingConfiguration { - AppPermissionsCard(title: "Privacy", + AppPermissionsCard(title: "Permissions", description: "\(self.app.name) may request access to the following:", tintColor: Color(uiColor: self.app.tintColor ?? .altPrimary), permissions: self.privacyPermissions) } - .margins(.horizontal, 20) + .margins(.horizontal, 0) } if #available(iOS 16, *) diff --git a/AltStore/Base.lproj/Main.storyboard b/AltStore/Base.lproj/Main.storyboard index 8511d102..aecbe1ca 100644 --- a/AltStore/Base.lproj/Main.storyboard +++ b/AltStore/Base.lproj/Main.storyboard @@ -402,8 +402,8 @@ -