From 6f92b5eb7ccd903362dbc76daaf2da709f97294e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20B=C3=B6ttcher?= <95238930+mboe-signal@users.noreply.github.com> Date: Thu, 20 Jan 2022 08:57:06 +0100 Subject: [PATCH] rotating the device lost the selection state of the home view tableview (#3906) * rotating the device lost the selection state of the home view tableview * changed indexpath based selection state restoration to uniqueIds of associated threads * unified table data reload method call --- .../HomeView/HomeViewController.m | 2 +- .../HomeView/HomeViewController.swift | 25 ++++++++++++++++++- 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.m b/Signal/src/ViewControllers/HomeView/HomeViewController.m index 47d14ae88e..b597720847 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.m +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.m @@ -749,7 +749,7 @@ NSString *const kArchiveButtonPseudoGroup = @"kArchiveButtonPseudoGroup"; if (self.viewState.multiSelectState.isActive) { [self.tableView setEditing:YES animated:NO]; - [self.tableView reloadData]; + [self reloadTableData]; [self willEnterMultiselectMode]; } else { [self applyDefaultBackButton]; diff --git a/Signal/src/ViewControllers/HomeView/HomeViewController.swift b/Signal/src/ViewControllers/HomeView/HomeViewController.swift index f7e3ba57d4..619f02856d 100644 --- a/Signal/src/ViewControllers/HomeView/HomeViewController.swift +++ b/Signal/src/ViewControllers/HomeView/HomeViewController.swift @@ -1,5 +1,5 @@ // -// Copyright (c) 2021 Open Whisper Systems. All rights reserved. +// Copyright (c) 2022 Open Whisper Systems. All rights reserved. // import Foundation @@ -22,7 +22,30 @@ public extension HomeViewController { func reloadTableData() { AssertIsOnMainThread() + var selectedThreadIds: Set = [] + for indexPath in tableView.indexPathsForSelectedRows ?? [] { + if let key = tableDataSource.threadViewModel(forIndexPath: indexPath, expectsSuccess: false)?.threadRecord.uniqueId { + selectedThreadIds.insert(key) + } + } + tableView.reloadData() + + if !selectedThreadIds.isEmpty { + var threadIdsToBeSelected = selectedThreadIds + for section in 0..