From 65cda66f82e74979fd807eb34f3dc1cbccbb32b9 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Mon, 12 Aug 2024 11:58:22 +0300 Subject: [PATCH] Fixes #3146 - Remove the account migration screen --- .../Sources/Application/AppCoordinator.swift | 14 ----- .../Sources/Application/AppSettings.swift | 10 +--- .../Other/AccessibilityIdentifiers.swift | 5 -- .../Screens/HomeScreen/HomeScreenModels.swift | 3 -- .../HomeScreen/HomeScreenViewModel.swift | 29 +---------- .../Screens/HomeScreen/View/HomeScreen.swift | 15 +----- .../HomeScreen/View/HomeScreenContent.swift | 52 +------------------ .../UITests/UITestsAppCoordinator.swift | 3 -- IntegrationTests/Sources/Common.swift | 9 ---- .../test_homeScreen-iPad-en-GB.Migrating.png | 3 -- .../test_homeScreen-iPad-pseudo.Migrating.png | 3 -- ...t_homeScreen-iPhone-15-en-GB.Migrating.png | 3 -- ..._homeScreen-iPhone-15-pseudo.Migrating.png | 3 -- 13 files changed, 6 insertions(+), 146 deletions(-) delete mode 100644 PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png delete mode 100644 PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png delete mode 100644 PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-en-GB.Migrating.png delete mode 100644 PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-pseudo.Migrating.png diff --git a/ElementX/Sources/Application/AppCoordinator.swift b/ElementX/Sources/Application/AppCoordinator.swift index e1659f514f..f03d7d84e6 100644 --- a/ElementX/Sources/Application/AppCoordinator.swift +++ b/ElementX/Sources/Application/AppCoordinator.swift @@ -356,20 +356,6 @@ class AppCoordinator: AppCoordinatorProtocol, AuthenticationFlowCoordinatorDeleg MXLog.info("The app was upgraded from \(oldVersion) to \(newVersion)") - if oldVersion < Version(1, 1, 0) { - MXLog.info("Migrating to v1.1.0, signing out the user.") - // Version 1.1.0 switched the Rust crypto store to SQLite - // There are no migrations in place so we need to sign the user out - wipeUserData() - } - - if oldVersion < Version(1, 1, 7) { - MXLog.info("Migrating to v1.1.7, marking accounts as migrated.") - for userID in userSessionStore.userIDs { - appSettings.migratedAccounts[userID] = true - } - } - if oldVersion < Version(1, 6, 0) { MXLog.info("Migrating to v1.6.0, marking identity confirmation onboarding as ran.") if !userSessionStore.userIDs.isEmpty { diff --git a/ElementX/Sources/Application/AppSettings.swift b/ElementX/Sources/Application/AppSettings.swift index 324c992d19..8dc6e2d17f 100644 --- a/ElementX/Sources/Application/AppSettings.swift +++ b/ElementX/Sources/Application/AppSettings.swift @@ -14,7 +14,6 @@ final class AppSettings { case lastVersionLaunched case appLockNumberOfPINAttempts case appLockNumberOfBiometricAttempts - case migratedAccounts case timelineStyle case analyticsConsentState @@ -159,14 +158,7 @@ final class AppSettings { contacts: [supportEmailAddress], staticRegistrations: oidcStaticRegistrations.mapKeys { $0.absoluteString }, dynamicRegistrationsFile: .sessionsBaseDirectory.appending(path: "oidc/registrations.json")) - - /// A dictionary of accounts that have performed an initial sync through their proxy. - /// - /// This is a temporary workaround. In the future we should be able to receive a signal from the - /// proxy that it is the first sync (or that an upgrade on the backend will involve a slower sync). - @UserPreference(key: UserDefaultsKeys.migratedAccounts, defaultValue: [:], storageType: .userDefaults(store)) - var migratedAccounts: [String: Bool] - + // MARK: - Notifications var pusherAppId: String { diff --git a/ElementX/Sources/Other/AccessibilityIdentifiers.swift b/ElementX/Sources/Other/AccessibilityIdentifiers.swift index 7c873ead00..e78721e64a 100644 --- a/ElementX/Sources/Other/AccessibilityIdentifiers.swift +++ b/ElementX/Sources/Other/AccessibilityIdentifiers.swift @@ -32,7 +32,6 @@ enum A11yIdentifiers { static let roomMemberDetailsScreen = RoomMemberDetailsScreen() static let createRoomScreen = CreateRoomScreen() static let inviteUsersScreen = InviteUsersScreen() - static let migrationScreen = MigrationScreen() static let notificationSettingsScreen = NotificationSettingsScreen() static let notificationSettingsEditScreen = NotificationSettingsEditScreen() static let pollFormScreen = PollFormScreen() @@ -239,10 +238,6 @@ enum A11yIdentifiers { "\(optionPrefix)-\(index)" } } - - struct MigrationScreen { - let message = "migration_screen-message" - } struct NotificationSettingsScreen { let fixMismatchConfiguration = "notification_settings_screen-fix_mismatch_configuration" diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift index d2d74556bc..d855ffcdf3 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenModels.swift @@ -43,15 +43,12 @@ enum HomeScreenViewAction { } enum HomeScreenRoomListMode: CustomStringConvertible { - case migration case skeletons case empty case rooms var description: String { switch self { - case .migration: - return "Showing account migration" case .skeletons: return "Showing placeholders" case .empty: diff --git a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift index 08ba206383..9c252f52ab 100644 --- a/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift +++ b/ElementX/Sources/Screens/HomeScreen/HomeScreenViewModel.swift @@ -19,8 +19,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol private let roomSummaryProvider: RoomSummaryProviderProtocol? - private var migrationCancellable: AnyCancellable? - private var actionsSubject: PassthroughSubject = .init() var actions: AnyPublisher { actionsSubject.eraseToAnyPublisher() @@ -223,27 +221,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol } analyticsService.signpost.beginFirstRooms() - - let hasUserBeenMigrated = appSettings.migratedAccounts[userSession.clientProxy.userID] == true - - if !hasUserBeenMigrated { - state.roomListMode = .migration - - MXLog.info("Account not migrated, setting view room list mode to \"\(state.roomListMode)\"") - - migrationCancellable = userSession.clientProxy.actionsPublisher - .receive(on: DispatchQueue.main) - .sink { [weak self] callback in - guard let self, case .receivedSyncUpdate = callback else { return } - migrationCancellable = nil - appSettings.migratedAccounts[userSession.clientProxy.userID] = true - - MXLog.info("Received first sync response, updating room list mode") - - updateRoomListMode(with: roomSummaryProvider.statePublisher.value) - } - } - + roomSummaryProvider.statePublisher .receive(on: DispatchQueue.main) .sink { [weak self] state in @@ -262,11 +240,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol } private func updateRoomListMode(with roomSummaryProviderState: RoomSummaryProviderState) { - guard appSettings.migratedAccounts[userSession.clientProxy.userID] == true else { - // Ignore room summary provider updates while "migrating" - return - } - let isLoadingData = !roomSummaryProviderState.isLoaded let hasNoRooms = roomSummaryProviderState.isLoaded && roomSummaryProviderState.totalNumberOfRooms == 0 diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift index 0ae4a04d13..51f152e1b0 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreen.swift @@ -188,17 +188,11 @@ struct HomeScreen: View { // MARK: - Previews struct HomeScreen_Previews: PreviewProvider, TestablePreview { - static let migratingViewModel = viewModel(.migration) static let loadingViewModel = viewModel(.skeletons) static let emptyViewModel = viewModel(.empty) static let loadedViewModel = viewModel(.rooms) static var previews: some View { - NavigationStack { - HomeScreen(context: migratingViewModel.context) - } - .previewDisplayName("Migrating") - NavigationStack { HomeScreen(context: loadingViewModel.context) } @@ -218,14 +212,9 @@ struct HomeScreen_Previews: PreviewProvider, TestablePreview { } static func viewModel(_ mode: HomeScreenRoomListMode) -> HomeScreenViewModel { - let userID = mode == .migration ? "@unmigrated_alice:example.com" : "@alice:example.com" - - let appSettings = AppSettings() // This uses shared storage under the hood - appSettings.migratedAccounts[userID] = mode != .migration + let userID = "@alice:example.com" let roomSummaryProviderState: RoomSummaryProviderMockConfigurationState = switch mode { - case .migration: - .loading case .skeletons: .loading case .empty: @@ -241,7 +230,7 @@ struct HomeScreen_Previews: PreviewProvider, TestablePreview { return HomeScreenViewModel(userSession: userSession, analyticsService: ServiceLocator.shared.analytics, - appSettings: appSettings, + appSettings: ServiceLocator.shared.settings, selectedRoomPublisher: CurrentValueSubject(nil).asCurrentValuePublisher(), userIndicatorController: ServiceLocator.shared.userIndicatorController) } diff --git a/ElementX/Sources/Screens/HomeScreen/View/HomeScreenContent.swift b/ElementX/Sources/Screens/HomeScreen/View/HomeScreenContent.swift index f5d54ce7bc..541711e055 100644 --- a/ElementX/Sources/Screens/HomeScreen/View/HomeScreenContent.swift +++ b/ElementX/Sources/Screens/HomeScreen/View/HomeScreenContent.swift @@ -16,13 +16,8 @@ struct HomeScreenContent: View { let scrollViewAdapter: ScrollViewAdapter var body: some View { - switch context.viewState.roomListMode { - case .migration: - migrationView - default: - roomList - .sentryTrace("\(Self.self)") - } + roomList + .sentryTrace("\(Self.self)") } private var roomList: some View { @@ -59,8 +54,6 @@ struct HomeScreenContent: View { .searchable(text: $context.searchQuery, placement: .navigationBarDrawer(displayMode: .always)) .compoundSearchField() .disableAutocorrection(true) - case .migration: - EmptyView() } } .introspect(.scrollView, on: .supportedVersions) { scrollView in @@ -141,47 +134,6 @@ struct HomeScreenContent: View { } } - @ViewBuilder - private var migrationView: some View { - if UIDevice.current.isPhone { - if verticalSizeClass == .compact { - migrationViewContent - .frame(maxWidth: .infinity, maxHeight: .infinity) - } else { - WaitingDialog { - migrationViewContent - } bottomContent: { - EmptyView() - } - } - } else { - migrationViewContent - .frame(maxWidth: .infinity, maxHeight: .infinity) - } - } - - private var migrationViewContent: some View { - VStack(spacing: 16) { - ProgressView() - .tint(.compound.iconPrimary) - .padding(.bottom, 4) - - Text(L10n.screenMigrationTitle.tinting(".", color: Asset.Colors.brandColor.swiftUIColor)) - .minimumScaleFactor(0.01) - .font(.compound.headingXLBold) - .multilineTextAlignment(.center) - .foregroundColor(.compound.textPrimary) - - Text(L10n.screenMigrationMessage) - .minimumScaleFactor(0.01) - .font(.compound.bodyLG) - .multilineTextAlignment(.center) - .foregroundColor(.compound.textPrimary) - .accessibilityIdentifier(A11yIdentifiers.migrationScreen.message) - } - .padding(.horizontal) - } - /// Often times the scroll view's content size isn't correct yet when this method is called e.g. when cancelling a search /// Dispatch it with a delay to allow the UI to update and the computations to be correct /// Once we move to iOS 17 we should remove all of this and use scroll anchors instead diff --git a/ElementX/Sources/UITests/UITestsAppCoordinator.swift b/ElementX/Sources/UITests/UITestsAppCoordinator.swift index cc78543cdf..3b398793a7 100644 --- a/ElementX/Sources/UITests/UITestsAppCoordinator.swift +++ b/ElementX/Sources/UITests/UITestsAppCoordinator.swift @@ -522,7 +522,6 @@ class MockScreen: Identifiable { let navigationSplitCoordinator = NavigationSplitCoordinator(placeholderCoordinator: PlaceholderScreenCoordinator()) let clientProxy = ClientProxyMock(.init(userID: "@mock:client.com", deviceID: "MOCKCLIENT", roomSummaryProvider: RoomSummaryProviderMock(.init(state: .loaded(.mockRooms))))) - ServiceLocator.shared.settings.migratedAccounts[clientProxy.userID] = true let appMediator = AppMediatorMock.default appMediator.underlyingWindowManager = windowManager @@ -635,8 +634,6 @@ class MockScreen: Identifiable { clientProxy.roomForIdentifierReturnValue = .joined(roomProxy) - ServiceLocator.shared.settings.migratedAccounts[clientProxy.userID] = true - let timelineController = RoomTimelineController(roomProxy: roomProxy, timelineProxy: roomProxy.timeline, initialFocussedEventID: nil, diff --git a/IntegrationTests/Sources/Common.swift b/IntegrationTests/Sources/Common.swift index 17de2d517d..51c334cd34 100644 --- a/IntegrationTests/Sources/Common.swift +++ b/IntegrationTests/Sources/Common.swift @@ -65,15 +65,6 @@ extension XCUIApplication { savePasswordButton.tap() } - - // Migration screen may be shown as an overlay. - // if that pops up soon enough, we just let that happen and wait - let message = staticTexts[A11yIdentifiers.migrationScreen.message] - - if message.waitForExistence(timeout: 10.0) { - currentTestCase.expectation(for: doesNotExistPredicate, evaluatedWith: message) - currentTestCase.waitForExpectations(timeout: 300.0) - } // Wait for the home screen to become visible. let profileButton = buttons[A11yIdentifiers.homeScreen.userAvatar] diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png b/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png deleted file mode 100644 index 38f3131db5..0000000000 --- a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-en-GB.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:82f915f692c622ca6486a0f7a0b8bab6df7959078add40a16ded37593716af57 -size 893292 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png b/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png deleted file mode 100644 index 2a3790f2f7..0000000000 --- a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPad-pseudo.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:9cbb28cd9f361a81b96057ee8738d154a9add7de7a4ca9cdcd1600d499f6bf8d -size 909428 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-en-GB.Migrating.png b/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-en-GB.Migrating.png deleted file mode 100644 index 60e1823e4f..0000000000 --- a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-en-GB.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:32dde9b6437682f702c13359337b3f21479d138a0cbcf20e47a3ff1b6ecbe2d7 -size 274869 diff --git a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-pseudo.Migrating.png b/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-pseudo.Migrating.png deleted file mode 100644 index 31d08a7e99..0000000000 --- a/PreviewTests/__Snapshots__/PreviewTests/test_homeScreen-iPhone-15-pseudo.Migrating.png +++ /dev/null @@ -1,3 +0,0 @@ -version https://git-lfs.github.com/spec/v1 -oid sha256:487cf66a31c068c0bfc33ff95b4a69c9e5a9f77c4f2f958ac266349587e1b098 -size 293724