Files
session-ios/Session/Settings/Views/ThemeSelectionView.swift
Morgan Pretty d96ef57273 Merge remote-tracking branch 'origin/feature/swift-package-manager' into feature/groups-rebuild
# Conflicts:
#	Podfile
#	Podfile.lock
#	Session.xcodeproj/project.pbxproj
#	Session/Calls/Call Management/SessionCall.swift
#	Session/Calls/Call Management/SessionCallManager.swift
#	Session/Calls/CallVC.swift
#	Session/Conversations/ConversationVC+Interaction.swift
#	Session/Conversations/ConversationVC.swift
#	Session/Conversations/ConversationViewModel.swift
#	Session/Conversations/Message Cells/Content Views/MediaAlbumView.swift
#	Session/Conversations/Settings/ThreadSettingsViewModel.swift
#	Session/Emoji/Emoji+Available.swift
#	Session/Home/GlobalSearch/GlobalSearchViewController.swift
#	Session/Home/HomeVC.swift
#	Session/Home/HomeViewModel.swift
#	Session/Home/New Conversation/NewDMVC.swift
#	Session/Media Viewing & Editing/DocumentTitleViewController.swift
#	Session/Media Viewing & Editing/GIFs/GifPickerCell.swift
#	Session/Media Viewing & Editing/GIFs/GifPickerViewController.swift
#	Session/Media Viewing & Editing/ImagePickerController.swift
#	Session/Media Viewing & Editing/MediaTileViewController.swift
#	Session/Media Viewing & Editing/PhotoCapture.swift
#	Session/Media Viewing & Editing/PhotoCaptureViewController.swift
#	Session/Media Viewing & Editing/PhotoLibrary.swift
#	Session/Media Viewing & Editing/SendMediaNavigationController.swift
#	Session/Meta/AppDelegate.swift
#	Session/Meta/AppEnvironment.swift
#	Session/Meta/MainAppContext.swift
#	Session/Meta/SessionApp.swift
#	Session/Notifications/NotificationPresenter.swift
#	Session/Notifications/PushRegistrationManager.swift
#	Session/Notifications/SyncPushTokensJob.swift
#	Session/Notifications/UserNotificationsAdaptee.swift
#	Session/Onboarding/LandingVC.swift
#	Session/Onboarding/LinkDeviceVC.swift
#	Session/Onboarding/Onboarding.swift
#	Session/Onboarding/RegisterVC.swift
#	Session/Onboarding/RestoreVC.swift
#	Session/Settings/HelpViewModel.swift
#	Session/Settings/NukeDataModal.swift
#	Session/Shared/FullConversationCell.swift
#	Session/Shared/OWSBezierPathView.m
#	Session/Utilities/BackgroundPoller.swift
#	Session/Utilities/MockDataGenerator.swift
#	SessionMessagingKit/Configuration.swift
#	SessionMessagingKit/Crypto/Crypto+SessionMessagingKit.swift
#	SessionMessagingKit/Database/Migrations/_004_RemoveLegacyYDB.swift
#	SessionMessagingKit/Database/Migrations/_014_GenerateInitialUserConfigDumps.swift
#	SessionMessagingKit/Database/Migrations/_015_BlockCommunityMessageRequests.swift
#	SessionMessagingKit/Database/Migrations/_018_DisappearingMessagesConfiguration.swift
#	SessionMessagingKit/Database/Models/Attachment.swift
#	SessionMessagingKit/Database/Models/DisappearingMessageConfiguration.swift
#	SessionMessagingKit/Database/Models/Interaction.swift
#	SessionMessagingKit/Database/Models/Profile.swift
#	SessionMessagingKit/Database/Models/SessionThread.swift
#	SessionMessagingKit/File Server/FileServerAPI.swift
#	SessionMessagingKit/Jobs/AttachmentDownloadJob.swift
#	SessionMessagingKit/Jobs/CheckForAppUpdatesJob.swift
#	SessionMessagingKit/Jobs/DisappearingMessagesJob.swift
#	SessionMessagingKit/Jobs/FailedMessageSendsJob.swift
#	SessionMessagingKit/Jobs/MessageSendJob.swift
#	SessionMessagingKit/Jobs/Types/GroupLeavingJob.swift
#	SessionMessagingKit/LibSession/Config Handling/LibSession+Contacts.swift
#	SessionMessagingKit/LibSession/Config Handling/LibSession+ConvoInfoVolatile.swift
#	SessionMessagingKit/LibSession/Config Handling/LibSession+Shared.swift
#	SessionMessagingKit/LibSession/Config Handling/LibSession+UserGroups.swift
#	SessionMessagingKit/LibSession/LibSession+SessionMessagingKit.swift
#	SessionMessagingKit/Messages/Message.swift
#	SessionMessagingKit/Open Groups/Crypto/Crypto+OpenGroupAPI.swift
#	SessionMessagingKit/Open Groups/Models/SOGSMessage.swift
#	SessionMessagingKit/Open Groups/OpenGroupAPI.swift
#	SessionMessagingKit/Open Groups/OpenGroupManager.swift
#	SessionMessagingKit/Sending & Receiving/Attachments/SignalAttachment.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+ExpirationTimers.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+LegacyClosedGroups.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageReceiver+VisibleMessages.swift
#	SessionMessagingKit/Sending & Receiving/Message Handling/MessageSender+LegacyClosedGroups.swift
#	SessionMessagingKit/Sending & Receiving/MessageReceiver.swift
#	SessionMessagingKit/Sending & Receiving/MessageSender+Convenience.swift
#	SessionMessagingKit/Sending & Receiving/MessageSender.swift
#	SessionMessagingKit/Sending & Receiving/Notifications/Models/SubscribeRequest.swift
#	SessionMessagingKit/Sending & Receiving/Notifications/Models/UnsubscribeRequest.swift
#	SessionMessagingKit/Sending & Receiving/Notifications/PushNotificationAPI.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/CurrentUserPoller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/GroupPoller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/OpenGroupAPI+Poller.swift
#	SessionMessagingKit/Sending & Receiving/Pollers/Poller.swift
#	SessionMessagingKit/Utilities/ProfileManager.swift
#	SessionMessagingKitTests/Jobs/MessageSendJobSpec.swift
#	SessionMessagingKitTests/LibSession/LibSessionSpec.swift
#	SessionMessagingKitTests/LibSession/LibSessionUtilSpec.swift
#	SessionMessagingKitTests/Open Groups/Models/SOGSMessageSpec.swift
#	SessionMessagingKitTests/Open Groups/OpenGroupAPISpec.swift
#	SessionMessagingKitTests/Open Groups/OpenGroupManagerSpec.swift
#	SessionMessagingKitTests/Utilities/CryptoSMKSpec.swift
#	SessionMessagingKitTests/_TestUtilities/MockOGMCache.swift
#	SessionNotificationServiceExtension/NSENotificationPresenter.swift
#	SessionNotificationServiceExtension/NotificationServiceExtension.swift
#	SessionShareExtension/ShareAppExtensionContext.swift
#	SessionShareExtension/ShareNavController.swift
#	SessionShareExtension/ThreadPickerVC.swift
#	SessionSnodeKit/Crypto/Crypto+SessionSnodeKit.swift
#	SessionSnodeKit/Models/DeleteAllBeforeResponse.swift
#	SessionSnodeKit/Models/DeleteAllMessagesResponse.swift
#	SessionSnodeKit/Models/DeleteMessagesResponse.swift
#	SessionSnodeKit/Models/RevokeSubkeyRequest.swift
#	SessionSnodeKit/Models/RevokeSubkeyResponse.swift
#	SessionSnodeKit/Models/SendMessageResponse.swift
#	SessionSnodeKit/Models/SnodeAuthenticatedRequestBody.swift
#	SessionSnodeKit/Models/UpdateExpiryAllResponse.swift
#	SessionSnodeKit/Models/UpdateExpiryResponse.swift
#	SessionSnodeKit/Networking/SnodeAPI.swift
#	SessionTests/Conversations/Settings/ThreadDisappearingMessagesViewModelSpec.swift
#	SessionTests/Conversations/Settings/ThreadSettingsViewModelSpec.swift
#	SessionTests/Database/DatabaseSpec.swift
#	SessionTests/Settings/NotificationContentViewModelSpec.swift
#	SessionUIKit/Components/ToastController.swift
#	SessionUIKit/Style Guide/Values.swift
#	SessionUtilitiesKit/Crypto/Crypto+SessionUtilitiesKit.swift
#	SessionUtilitiesKit/Crypto/Crypto.swift
#	SessionUtilitiesKit/Database/Models/Identity.swift
#	SessionUtilitiesKit/Database/Models/Job.swift
#	SessionUtilitiesKit/Database/Storage.swift
#	SessionUtilitiesKit/Database/Types/Migration.swift
#	SessionUtilitiesKit/General/AppContext.swift
#	SessionUtilitiesKit/General/Data+Utilities.swift
#	SessionUtilitiesKit/General/Logging.swift
#	SessionUtilitiesKit/General/SNUserDefaults.swift
#	SessionUtilitiesKit/General/String+Trimming.swift
#	SessionUtilitiesKit/General/String+Utilities.swift
#	SessionUtilitiesKit/General/TimestampUtils.swift
#	SessionUtilitiesKit/General/UIEdgeInsets.swift
#	SessionUtilitiesKit/JobRunner/JobRunner.swift
#	SessionUtilitiesKit/LibSession/LibSessionError.swift
#	SessionUtilitiesKit/Media/DataSource.swift
#	SessionUtilitiesKit/Meta/SessionUtilitiesKit.h
#	SessionUtilitiesKit/Networking/NetworkType.swift
#	SessionUtilitiesKit/Networking/ProxiedContentDownloader.swift
#	SessionUtilitiesKit/Utilities/BackgroundTaskManager.swift
#	SessionUtilitiesKit/Utilities/BencodeResponse.swift
#	SessionUtilitiesKit/Utilities/CExceptionHelper.mm
#	SessionUtilitiesKit/Utilities/FileManagerType.swift
#	SessionUtilitiesKit/Utilities/KeychainStorageType.swift
#	SessionUtilitiesKitTests/Database/Models/IdentitySpec.swift
#	SessionUtilitiesKitTests/Database/Utilities/PersistableRecordUtilitiesSpec.swift
#	SessionUtilitiesKitTests/General/SessionIdSpec.swift
#	SessionUtilitiesKitTests/JobRunner/JobRunnerSpec.swift
#	SignalUtilitiesKit/Configuration.swift
#	SignalUtilitiesKit/Media Viewing & Editing/Attachment Approval/AttachmentApprovalInputAccessoryView.swift
#	SignalUtilitiesKit/Media Viewing & Editing/Attachment Approval/AttachmentApprovalViewController.swift
#	SignalUtilitiesKit/Media Viewing & Editing/Attachment Approval/AttachmentTextToolbar.swift
#	SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorCropViewController.swift
#	SignalUtilitiesKit/Media Viewing & Editing/Image Editing/ImageEditorModel.swift
#	SignalUtilitiesKit/Media Viewing & Editing/MediaMessageView.swift
#	SignalUtilitiesKit/Meta/SignalUtilitiesKit.h
#	SignalUtilitiesKit/Shared View Controllers/OWSViewController.swift
#	SignalUtilitiesKit/Shared Views/CircleView.swift
#	SignalUtilitiesKit/Shared Views/TappableView.swift
#	SignalUtilitiesKit/Utilities/AppSetup.swift
#	SignalUtilitiesKit/Utilities/Bench.swift
#	SignalUtilitiesKit/Utilities/NoopNotificationsManager.swift
#	_SharedTestUtilities/CommonMockedExtensions.swift
#	_SharedTestUtilities/MockCrypto.swift
#	_SharedTestUtilities/Mocked.swift
#	_SharedTestUtilities/SynchronousStorage.swift
2024-07-10 14:44:33 +10:00

138 lines
4.9 KiB
Swift

// Copyright © 2022 Rangeproof Pty Ltd. All rights reserved.
import UIKit
import SessionUIKit
class ThemeSelectionView: UIView {
private static let selectionBorderSize: CGFloat = 26
private static let selectionSize: CGFloat = 20
public let theme: Theme
private let onSelected: (Theme) -> ()
// MARK: - Components
private lazy var backgroundButton: UIButton = {
let result: UIButton = UIButton()
result.translatesAutoresizingMaskIntoConstraints = false
result.setThemeBackgroundColor(.appearance_buttonBackground, for: .normal)
result.setThemeBackgroundColor(.highlighted(.appearance_buttonBackground), for: .highlighted)
result.addTarget(self, action: #selector(itemSelected), for: .touchUpInside)
return result
}()
private let previewView: UIView = {
let result: UIView = UIView()
result.translatesAutoresizingMaskIntoConstraints = false
result.isUserInteractionEnabled = false
result.layer.cornerRadius = 6
result.layer.borderWidth = 1
return result
}()
private let previewIncomingMessageView: UIView = {
let result: UIView = UIView()
result.translatesAutoresizingMaskIntoConstraints = false
result.isUserInteractionEnabled = false
result.layer.cornerRadius = 6
return result
}()
private let previewOutgoingMessageView: UIView = {
let result: UIView = UIView()
result.translatesAutoresizingMaskIntoConstraints = false
result.isUserInteractionEnabled = false
result.layer.cornerRadius = 6
return result
}()
private let selectionView: RadioButton = {
let result: RadioButton = RadioButton(size: .medium)
result.translatesAutoresizingMaskIntoConstraints = false
result.isUserInteractionEnabled = false
result.font = .systemFont(ofSize: Values.mediumFontSize, weight: .bold)
return result
}()
// MARK: - Initializtion
init(theme: Theme, onSelected: @escaping (Theme) -> ()) {
self.theme = theme
self.onSelected = onSelected
super.init(frame: .zero)
setupUI(theme: theme)
}
required init?(coder: NSCoder) {
fatalError("Use init(theme:) instead")
}
// MARK: - Layout
private func setupUI(theme: Theme) {
self.themeBackgroundColor = .appearance_sectionBackground
// Set the appropriate colors
previewView.themeBackgroundColorForced = .theme(theme, color: .backgroundPrimary)
previewView.themeBorderColorForced = .theme(theme, color: .borderSeparator)
previewIncomingMessageView.themeBackgroundColorForced = .theme(theme, color: .messageBubble_incomingBackground)
previewOutgoingMessageView.themeBackgroundColorForced = .theme(theme, color: .defaultPrimary)
selectionView.text = theme.title
// Add the UI
addSubview(backgroundButton)
addSubview(previewView)
addSubview(selectionView)
previewView.addSubview(previewIncomingMessageView)
previewView.addSubview(previewOutgoingMessageView)
setupLayout()
}
private func setupLayout() {
backgroundButton.pin(to: self)
previewView.pin(.top, to: .top, of: self, withInset: Values.smallSpacing)
previewView.pin(.leading, to: .leading, of: self, withInset: Values.largeSpacing)
previewView.pin(.bottom, to: .bottom, of: self, withInset: -Values.smallSpacing)
previewView.set(.width, to: 76)
previewView.set(.height, to: 70)
previewIncomingMessageView.bottomAnchor
.constraint(equalTo: previewView.centerYAnchor, constant: -1)
.isActive = true
previewIncomingMessageView.pin(.leading, to: .leading, of: previewView, withInset: Values.smallSpacing)
previewIncomingMessageView.set(.width, to: 40)
previewIncomingMessageView.set(.height, to: 12)
previewOutgoingMessageView.topAnchor
.constraint(equalTo: previewView.centerYAnchor, constant: 1)
.isActive = true
previewOutgoingMessageView.pin(.trailing, to: .trailing, of: previewView, withInset: -Values.smallSpacing)
previewOutgoingMessageView.set(.width, to: 40)
previewOutgoingMessageView.set(.height, to: 12)
selectionView.center(.vertical, in: self)
selectionView.pin(.leading, to: .trailing, of: previewView, withInset: Values.mediumSpacing)
selectionView.pin(.trailing, to: .trailing, of: self, withInset: -Values.veryLargeSpacing)
}
// MARK: - Content
func update(isSelected: Bool) {
selectionView.update(isSelected: isSelected)
}
@objc func itemSelected() {
onSelected(theme)
}
}