Various tweaks following code review

This commit is contained in:
Stefan Ceriu
2023-03-31 16:44:28 +03:00
committed by Stefan Ceriu
parent 5f6edacc1a
commit 8b11727f19
19 changed files with 82 additions and 74 deletions
@@ -24,6 +24,6 @@ final class DeveloperOptionsScreenCoordinator: CoordinatorProtocol {
}
func toPresentable() -> AnyView {
AnyView(DeveloperOptionsScreenScreen(context: viewModel.context))
AnyView(DeveloperOptionsScreen(context: viewModel.context))
}
}
@@ -24,12 +24,12 @@ struct DeveloperOptionsScreenViewState: BindableState {
struct DeveloperOptionsScreenViewStateBindings {
var shouldCollapseRoomStateEvents: Bool
var showStartChatFlow: Bool
var startChatFlowEnabled: Bool
var mediaUploadFlowEnabled: Bool
}
enum DeveloperOptionsScreenViewAction {
case changedShouldCollapseRoomStateEvents
case changedShowStartChatFlow
case changedShowMediaUploadFlow
case changedStartChatFlowEnabled
case changedMediaUploadFlowEnabled
}
@@ -23,7 +23,7 @@ class DeveloperOptionsScreenViewModel: DeveloperOptionsScreenViewModelType, Deve
init() {
let bindings = DeveloperOptionsScreenViewStateBindings(shouldCollapseRoomStateEvents: ServiceLocator.shared.settings.shouldCollapseRoomStateEvents,
showStartChatFlow: ServiceLocator.shared.settings.startChatFlowFeatureFlag,
startChatFlowEnabled: ServiceLocator.shared.settings.startChatFlowEnabled,
mediaUploadFlowEnabled: ServiceLocator.shared.settings.mediaUploadingFlowEnabled)
let state = DeveloperOptionsScreenViewState(bindings: bindings)
@@ -38,9 +38,9 @@ class DeveloperOptionsScreenViewModel: DeveloperOptionsScreenViewModelType, Deve
switch viewAction {
case .changedShouldCollapseRoomStateEvents:
ServiceLocator.shared.settings.shouldCollapseRoomStateEvents = state.bindings.shouldCollapseRoomStateEvents
case .changedShowStartChatFlow:
ServiceLocator.shared.settings.startChatFlowFeatureFlag = state.bindings.showStartChatFlow
case .changedShowMediaUploadFlow:
case .changedStartChatFlowEnabled:
ServiceLocator.shared.settings.startChatFlowEnabled = state.bindings.startChatFlowEnabled
case .changedMediaUploadFlowEnabled:
ServiceLocator.shared.settings.mediaUploadingFlowEnabled = state.bindings.mediaUploadFlowEnabled
}
}
@@ -16,7 +16,7 @@
import SwiftUI
struct DeveloperOptionsScreenScreen: View {
struct DeveloperOptionsScreen: View {
@ObservedObject var context: DeveloperOptionsScreenViewModel.Context
@State private var showConfetti = false
@@ -32,18 +32,18 @@ struct DeveloperOptionsScreenScreen: View {
context.send(viewAction: .changedShouldCollapseRoomStateEvents)
}
Toggle(isOn: $context.showStartChatFlow) {
Toggle(isOn: $context.startChatFlowEnabled) {
Text("Show Start Chat flow")
}
.onChange(of: context.showStartChatFlow) { _ in
context.send(viewAction: .changedShowStartChatFlow)
.onChange(of: context.startChatFlowEnabled) { _ in
context.send(viewAction: .changedStartChatFlowEnabled)
}
Toggle(isOn: $context.mediaUploadFlowEnabled) {
Text("Show Media Uploading flow")
}
.onChange(of: context.mediaUploadFlowEnabled) { _ in
context.send(viewAction: .changedShowMediaUploadFlow)
context.send(viewAction: .changedMediaUploadFlowEnabled)
}
}
@@ -86,6 +86,6 @@ struct DeveloperOptionsScreenScreen: View {
struct DeveloperOptionsScreen_Previews: PreviewProvider {
static var previews: some View {
let viewModel = DeveloperOptionsScreenViewModel()
DeveloperOptionsScreenScreen(context: viewModel.context)
DeveloperOptionsScreen(context: viewModel.context)
}
}
@@ -69,8 +69,8 @@ struct HomeScreenViewState: BindableState {
var roomListMode: HomeScreenRoomListMode = .skeletons
var showStartChatFlowEnabled: Bool {
ServiceLocator.shared.settings.startChatFlowFeatureFlag
var startChatFlowEnabled: Bool {
ServiceLocator.shared.settings.startChatFlowEnabled
}
var visibleRooms: [HomeScreenRoom] {
@@ -103,7 +103,7 @@ struct HomeScreen: View {
ToolbarItem(placement: .navigationBarLeading) {
userMenuButton
}
if context.viewState.showStartChatFlowEnabled {
if context.viewState.startChatFlowEnabled {
ToolbarItemGroup(placement: .bottomBar) {
Spacer()
newRoomButton
@@ -15,12 +15,17 @@
//
import SwiftUI
import UIKit
enum CameraPickerAction {
case selectFile(URL)
case cancel
case error(Error?)
case error(CameraPickerError)
}
enum CameraPickerError: Error {
case invalidJpegData
case invalidOriginalImage
case failedWritingToTemporaryDirectory
}
struct CameraPicker: UIViewControllerRepresentable {
@@ -50,31 +55,31 @@ struct CameraPicker: UIViewControllerRepresentable {
}
final class Coordinator: NSObject, UIImagePickerControllerDelegate, UINavigationControllerDelegate {
private var parent: CameraPicker
private var cameraPicker: CameraPicker
init(_ parent: CameraPicker) {
self.parent = parent
init(_ cameraPicker: CameraPicker) {
self.cameraPicker = cameraPicker
}
func imagePickerController(_ picker: UIImagePickerController, didFinishPickingMediaWithInfo info: [UIImagePickerController.InfoKey: Any]) {
if let videoURL = info[.mediaURL] as? URL {
parent.callback(.selectFile(videoURL))
cameraPicker.callback(.selectFile(videoURL))
} else if let image = info[.originalImage] as? UIImage {
guard let jpegData = image.jpegData(compressionQuality: 1.0) else {
parent.callback(.error(nil))
cameraPicker.callback(.error(.invalidJpegData))
return
}
let fileName = "\(UUID().uuidString).jpg"
let fileName = "\(Date.now.formatted(date: .abbreviated, time: .shortened)).jpg"
do {
let url = try FileManager.default.writeDataToTemporaryLocation(data: jpegData, fileName: fileName)
parent.callback(.selectFile(url))
let url = try FileManager.default.writeDataToTemporaryDirectory(data: jpegData, fileName: fileName)
cameraPicker.callback(.selectFile(url))
} catch {
parent.callback(.error(error))
cameraPicker.callback(.error(.failedWritingToTemporaryDirectory))
}
} else {
parent.callback(.error(nil))
cameraPicker.callback(.error(.invalidOriginalImage))
}
}
}
@@ -15,12 +15,15 @@
//
import SwiftUI
import UIKit
enum DocumentPickerAction {
case selectFile(URL)
case cancel
case error(Error?)
case error(DocumentPickerError)
}
enum DocumentPickerError: Error {
case unknown
}
struct DocumentPicker: UIViewControllerRepresentable {
@@ -45,25 +48,25 @@ struct DocumentPicker: UIViewControllerRepresentable {
}
final class Coordinator: NSObject, UIDocumentPickerDelegate {
private var parent: DocumentPicker
private var documentPicker: DocumentPicker
init(_ parent: DocumentPicker) {
self.parent = parent
init(_ documentPicker: DocumentPicker) {
self.documentPicker = documentPicker
}
// MARK: UIDocumentPickerDelegate
func documentPickerWasCancelled(_ controller: UIDocumentPickerViewController) {
parent.callback(.cancel)
documentPicker.callback(.cancel)
}
func documentPicker(_ controller: UIDocumentPickerViewController, didPickDocumentsAt urls: [URL]) {
guard let url = urls.first else {
parent.callback(.error(nil))
documentPicker.callback(.error(.unknown))
return
}
parent.callback(.selectFile(url))
documentPicker.callback(.selectFile(url))
}
}
}
@@ -47,36 +47,36 @@ struct PhotoLibraryPicker: UIViewControllerRepresentable {
}
final class Coordinator: NSObject, PHPickerViewControllerDelegate {
private var parent: PhotoLibraryPicker
private var photoLibraryPicker: PhotoLibraryPicker
init(_ parent: PhotoLibraryPicker) {
self.parent = parent
init(_ photoLibraryPicker: PhotoLibraryPicker) {
self.photoLibraryPicker = photoLibraryPicker
}
// MARK: PHPickerViewControllerDelegate
func picker(_ picker: PHPickerViewController, didFinishPicking results: [PHPickerResult]) {
guard let provider = results.first?.itemProvider else {
parent.callback(.cancel)
photoLibraryPicker.callback(.cancel)
return
}
provider.loadFileRepresentation(forTypeIdentifier: "public.item") { @MainActor [weak self] url, error in
provider.loadFileRepresentation(forTypeIdentifier: "public.item") { [weak self] url, error in
guard let url else {
self?.parent.callback(.error(error))
self?.photoLibraryPicker.callback(.error(error))
return
}
do {
let _ = url.startAccessingSecurityScopedResource()
let newURL = try FileManager.default.copyFileToTemporaryLocation(url: url)
let newURL = try FileManager.default.copyFileToTemporaryDirectory(url: url)
url.stopAccessingSecurityScopedResource()
Task { @MainActor in
self?.parent.callback(.selectFile(newURL))
self?.photoLibraryPicker.callback(.selectFile(newURL))
}
} catch {
self?.parent.callback(.error(error))
self?.photoLibraryPicker.callback(.error(error))
}
}
}
@@ -51,6 +51,6 @@ final class MediaPickerPreviewScreenCoordinator: CoordinatorProtocol {
}
func toPresentable() -> AnyView {
AnyView(MediaPickerPreviewScreenScreen(context: viewModel.context))
AnyView(MediaPickerPreviewScreen(context: viewModel.context))
}
}
@@ -17,7 +17,7 @@
import QuickLook
import SwiftUI
struct MediaPickerPreviewScreenScreen: View {
struct MediaPickerPreviewScreen: View {
@ObservedObject var context: MediaPickerPreviewScreenViewModel.Context
var body: some View {
@@ -105,6 +105,6 @@ private class PreviewItem: NSObject, QLPreviewItem {
struct MediaPickerPreviewScreen_Previews: PreviewProvider {
static let viewModel = MediaPickerPreviewScreenViewModel(url: URL.picturesDirectory, title: nil)
static var previews: some View {
MediaPickerPreviewScreenScreen(context: viewModel.context)
MediaPickerPreviewScreen(context: viewModel.context)
}
}