Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: ios: Remove App State #2172

Merged
merged 4 commits into from
Nov 10, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions ios/PolkadotVault.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,6 @@
6DA317C3299F6FF1005DD060 /* AirgapMediatorAssembler.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA317C2299F6FF1005DD060 /* AirgapMediatorAssembler.swift */; };
6DA501CC290A48190096DA4E /* KeyDetails+ViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA501CB290A48190096DA4E /* KeyDetails+ViewModel.swift */; };
6DA501D4290BC55A0096DA4E /* KeyDetailsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA501D3290BC55A0096DA4E /* KeyDetailsService.swift */; };
6DA501D7290BECBE0096DA4E /* AppState.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA501D6290BECBE0096DA4E /* AppState.swift */; };
6DA501D9290C1C3E0096DA4E /* MKeyAndNetworkCard+PathAndNetwork.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA501D8290C1C3E0096DA4E /* MKeyAndNetworkCard+PathAndNetwork.swift */; };
6DA9DAE929E5831C009CC12C /* ManageNetworkDetailsService.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DA9DAE829E5831C009CC12C /* ManageNetworkDetailsService.swift */; };
6DAA6CB129BF482E002329A8 /* AuthenticatedStateMediator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 6DAA6CB029BF482E002329A8 /* AuthenticatedStateMediator.swift */; };
Expand Down Expand Up @@ -552,7 +551,6 @@
6DA317C2299F6FF1005DD060 /* AirgapMediatorAssembler.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AirgapMediatorAssembler.swift; sourceTree = "<group>"; };
6DA501CB290A48190096DA4E /* KeyDetails+ViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "KeyDetails+ViewModel.swift"; sourceTree = "<group>"; };
6DA501D3290BC55A0096DA4E /* KeyDetailsService.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyDetailsService.swift; sourceTree = "<group>"; };
6DA501D6290BECBE0096DA4E /* AppState.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppState.swift; sourceTree = "<group>"; };
6DA501D8290C1C3E0096DA4E /* MKeyAndNetworkCard+PathAndNetwork.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "MKeyAndNetworkCard+PathAndNetwork.swift"; sourceTree = "<group>"; };
6DA9DAE829E5831C009CC12C /* ManageNetworkDetailsService.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ManageNetworkDetailsService.swift; sourceTree = "<group>"; };
6DAA6CB029BF482E002329A8 /* AuthenticatedStateMediator.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AuthenticatedStateMediator.swift; sourceTree = "<group>"; };
Expand Down Expand Up @@ -1560,7 +1558,6 @@
6DA501D5290BECB60096DA4E /* Data */ = {
isa = PBXGroup;
children = (
6DA501D6290BECBE0096DA4E /* AppState.swift */,
);
path = Data;
sourceTree = "<group>";
Expand Down Expand Up @@ -2349,7 +2346,6 @@
6D42793728DB147800C141DC /* PrivateKeyQRCodeService.swift in Sources */,
6D77F323296D4D8900044C7C /* CreateDerivedKeyService.swift in Sources */,
6D5801D928991F48006C41D8 /* ProcessInfoProtocol.swift in Sources */,
6DA501D7290BECBE0096DA4E /* AppState.swift in Sources */,
6D019972289D183200F4C317 /* Navigation.swift in Sources */,
6DC33723295ACF2D0067284B /* CornerRadiusModifier.swift in Sources */,
);
Expand Down
41 changes: 0 additions & 41 deletions ios/PolkadotVault/Core/Data/AppState.swift

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -112,7 +112,7 @@ final class KeychainAccessAdapter: KeychainAccessAdapting {
var item: CFTypeRef?
let query = queryProvider.query(for: .search(seedName: seedName))
let osStatus = SecItemCopyMatching(query, &item)
if osStatus == errSecSuccess,
if osStatus == errSecSuccess || osStatus == errSecItemNotFound,
let itemAsData = item as? Data,
let result = String(data: itemAsData, encoding: .utf8) {
return .success(result)
Expand Down
1 change: 0 additions & 1 deletion ios/PolkadotVault/Core/ServiceLocator.swift
Original file line number Diff line number Diff line change
Expand Up @@ -17,5 +17,4 @@ enum ServiceLocator {
static var onboardingMediator: OnboardingMediator = OnboardingMediator()

static var networkColorsGenerator = UnknownNetworkColorsGenerator()
static var appState = AppState()
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ struct NetworkSelectionModal: View {
}

@StateObject var viewModel: ViewModel
@EnvironmentObject private var appState: AppState

var body: some View {
FullScreenRoundedModal(
Expand Down Expand Up @@ -55,10 +54,6 @@ struct NetworkSelectionModal: View {
}
}
)
.onAppear {
viewModel.use(appState: appState)
viewModel.loadCurrentSelection()
}
}

@ViewBuilder
Expand Down Expand Up @@ -114,50 +109,46 @@ struct NetworkSelectionModal: View {

extension NetworkSelectionModal {
final class ViewModel: ObservableObject {
private weak var appState: AppState!
@Published var animateBackground: Bool = false
@Published var networks: [MmNetwork] = []
@Published var selectedNetworks: [MmNetwork] = []
@Published var networksSelection: [MmNetwork]
@Binding var networks: [MmNetwork]
@Binding var selectedNetworks: [MmNetwork]
@Binding var isPresented: Bool

init(
isPresented: Binding<Bool>
isPresented: Binding<Bool>,
networks: Binding<[MmNetwork]>,
selectedNetworks: Binding<[MmNetwork]>
) {
_isPresented = isPresented
}

func use(appState: AppState) {
self.appState = appState
networks = appState.userData.allNetworks
}

func loadCurrentSelection() {
selectedNetworks = appState.userData.selectedNetworks
_networks = networks
_selectedNetworks = selectedNetworks
_networksSelection = .init(initialValue: selectedNetworks.wrappedValue)
}

func cancelAction() {
animateDismissal()
}

func resetAction() {
appState.userData.selectedNetworks = []
selectedNetworks = []
animateDismissal()
}

func doneAction() {
appState.userData.selectedNetworks = selectedNetworks
selectedNetworks = networksSelection
animateDismissal()
}

func isSelected(_ network: MmNetwork) -> Bool {
selectedNetworks.contains(network)
networksSelection.contains(network)
}

func toggleSelection(_ network: MmNetwork) {
if selectedNetworks.contains(network) {
selectedNetworks.removeAll { $0 == network }
if networksSelection.contains(network) {
networksSelection.removeAll { $0 == network }
} else {
selectedNetworks.append(network)
networksSelection.append(network)
}
}

Expand All @@ -179,9 +170,12 @@ extension NetworkSelectionModal {
struct NetworkSelectionModal_Previews: PreviewProvider {
static var previews: some View {
NetworkSelectionModal(
viewModel: .init(isPresented: Binding<Bool>.constant(true))
viewModel: .init(
isPresented: Binding<Bool>.constant(true),
networks: .constant(MmNetwork.stubList),
selectedNetworks: .constant([.stub])
)
)
.environmentObject(AppState.preview)
}
}
#endif
1 change: 0 additions & 1 deletion ios/PolkadotVault/PolkadotVaultApp.swift
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ struct PolkadotVaultApp: App {
.background(.backgroundPrimary)
.environmentObject(navigation)
.environmentObject(connectivityMediator)
.environmentObject(ServiceLocator.appState)
.environmentObject(jailbreakDetectionPublisher)
.environmentObject(applicationStatePublisher)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import SwiftUI

struct AuthenticatedScreenContainer: View {
@EnvironmentObject private var navigation: NavigationCoordinator
@EnvironmentObject private var appState: AppState
@StateObject var viewModel: ViewModel

var body: some View {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ struct DerivationPathNameView: View {
@FocusState var focusedPath: Bool
@FocusState var focusedField: SecurePrimaryTextField.Field?
@StateObject var viewModel: ViewModel
@EnvironmentObject private var appState: AppState
@State var isUpdatingText = false
@Environment(\.presentationMode) var presentationMode

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@ import SwiftUI

struct DerivationMethodsInfoView: View {
@StateObject var viewModel: ViewModel
@EnvironmentObject private var appState: AppState

var body: some View {
FullScreenRoundedModal(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,6 @@ struct ExportKeysSelectionModal: View {
}

@StateObject var viewModel: ViewModel
@EnvironmentObject private var appState: AppState

var body: some View {
FullScreenRoundedModal(
Expand Down Expand Up @@ -236,7 +235,6 @@ extension ExportKeysSelectionModal {
onCompletion: { _ in }
)
)
.environmentObject(AppState.preview)
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ extension KeyDetailsView {
private let exportPrivateKeyService: PrivateKeyQRCodeService
private let keyDetailsActionsService: KeyDetailsActionService
private let seedsMediator: SeedsMediating
private var appState: AppState

@Published var keyName: String
@Published var keysData: MKeysNew?
Expand All @@ -53,6 +52,8 @@ extension KeyDetailsView {

@Published var derivedKeys: [DerivedKeyRowModel] = []
@Published var isFilteringActive: Bool = false
@Published var networks: [MmNetwork] = []
@Published var selectedNetworks: [MmNetwork] = []
// Error handling
@Published var isPresentingError: Bool = false
@Published var presentableError: ErrorBottomModalViewModel = .noNetworksAvailable()
Expand All @@ -75,36 +76,26 @@ extension KeyDetailsView {
keyDetailsService: KeyDetailsService = KeyDetailsService(),
networksService: GetManagedNetworksService = GetManagedNetworksService(),
keyDetailsActionsService: KeyDetailsActionService = KeyDetailsActionService(),
appState: AppState = ServiceLocator.appState,
seedsMediator: SeedsMediating = ServiceLocator.seedsMediator
) {
self.onDeleteCompletion = onDeleteCompletion
self.exportPrivateKeyService = exportPrivateKeyService
self.keyDetailsService = keyDetailsService
self.networksService = networksService
self.keyDetailsActionsService = keyDetailsActionsService
self.appState = appState
self.seedsMediator = seedsMediator
_keyName = .init(initialValue: initialKeyName)
use(appState: appState)
subscribeToNetworkChanges()
}

func use(appState _: AppState) {
$isPresentingNetworkSelection.sink { newValue in
guard !newValue else { return }
self.isFilteringActive = !self.appState.userData.selectedNetworks.isEmpty
}
.store(in: cancelBag)
}

func onAppear() {
refreshData()
}

func subscribeToNetworkChanges() {
$isPresentingNetworkSelection.sink { newValue in
guard !newValue else { return }
self.isFilteringActive = !self.selectedNetworks.isEmpty
self.refreshDerivedKeys()
}
.store(in: cancelBag)
Expand Down Expand Up @@ -132,7 +123,7 @@ extension KeyDetailsView {
networksService.getNetworks { result in
switch result {
case let .success(networks):
self.appState.userData.allNetworks = networks
self.networks = networks
case let .failure(error):
self.presentableError = .alertError(message: error.description)
self.isPresentingError = true
Expand Down Expand Up @@ -238,7 +229,7 @@ extension KeyDetailsView {
}
case let .viewKeySet(selectedKeySet):
isFilteringActive = false
appState.userData.selectedNetworks = []
selectedNetworks = []
keyName = selectedKeySet.seedName
refreshData()
}
Expand Down Expand Up @@ -268,7 +259,7 @@ extension KeyDetailsView {

extension KeyDetailsView.ViewModel {
func onCreateDerivedKeyTap() {
if appState.userData.allNetworks.isEmpty {
if networks.isEmpty {
presentableError = .noNetworksAvailable()
isPresentingError = true
} else {
Expand Down Expand Up @@ -299,7 +290,7 @@ extension KeyDetailsView.ViewModel {
func onNetworkSelectionTap() {
networksService.getNetworks { result in
if case let .success(networks) = result {
self.appState.userData.allNetworks = networks
self.networks = networks
self.isPresentingNetworkSelection = true
}
}
Expand Down Expand Up @@ -388,11 +379,11 @@ private extension KeyDetailsView.ViewModel {
guard let keysData else { return }
let sortedDerivedKeys = keysData.set
.sorted(by: { $0.key.address.path < $1.key.address.path })
let filteredKeys: [MKeyAndNetworkCard] = if appState.userData.selectedNetworks.isEmpty {
let filteredKeys: [MKeyAndNetworkCard] = if selectedNetworks.isEmpty {
sortedDerivedKeys
} else {
sortedDerivedKeys.filter {
appState.userData.selectedNetworks
selectedNetworks
.map(\.key)
.contains($0.network.networkSpecsKey)
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,11 @@ struct KeyDetailsView: View {
isPresented: $viewModel.isPresentingNetworkSelection
) {
NetworkSelectionModal(
viewModel: .init(isPresented: $viewModel.isPresentingNetworkSelection)
viewModel: .init(
isPresented: $viewModel.isPresentingNetworkSelection,
networks: $viewModel.networks,
selectedNetworks: $viewModel.selectedNetworks
)
)
.clearModalBackground()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -210,7 +210,6 @@ extension ManageKeySetsView {
onCompletion: { _ in }
)
)
.environmentObject(AppState.preview)
}
}
#endif
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import SwiftUI

struct VerifierCertificateView: View {
@StateObject var viewModel: ViewModel
@EnvironmentObject private var appState: AppState
@Environment(\.presentationMode) var presentationMode

var body: some View {
Expand Down