diff --git a/Config/BWIBuildSettings.swift b/Config/BWIBuildSettings.swift
index 59c893fd9..30cd1b34e 100644
--- a/Config/BWIBuildSettings.swift
+++ b/Config/BWIBuildSettings.swift
@@ -663,6 +663,9 @@ class BWIBuildSettings: NSObject {
// MARK: itunes
var showAllChatsFilterMenu = false
+
+ // MARK: itunes
+ var roomFiltersToggle = true
// MARK: OIDC
var isOIDCEnabled = true
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Contents.json b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Contents.json
new file mode 100644
index 000000000..67ec47a7c
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Filter-dark.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Filter-dark.svg b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Filter-dark.svg
new file mode 100644
index 000000000..c0e66be50
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_off.imageset/Filter-dark.svg
@@ -0,0 +1,3 @@
+
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Contents.json b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Contents.json
new file mode 100644
index 000000000..068ead335
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Filter-pressed-dark.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Filter-pressed-dark.svg b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Filter-pressed-dark.svg
new file mode 100644
index 000000000..37c1861f3
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_dark_on.imageset/Filter-pressed-dark.svg
@@ -0,0 +1,11 @@
+
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Contents.json b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Contents.json
new file mode 100644
index 000000000..aebe7c313
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Filter-light.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Filter-light.svg b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Filter-light.svg
new file mode 100644
index 000000000..bd03bf038
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_off.imageset/Filter-light.svg
@@ -0,0 +1,3 @@
+
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Contents.json b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Contents.json
new file mode 100644
index 000000000..2f3d3968c
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Contents.json
@@ -0,0 +1,12 @@
+{
+ "images" : [
+ {
+ "filename" : "Filter-pressed-light.svg",
+ "idiom" : "universal"
+ }
+ ],
+ "info" : {
+ "author" : "xcode",
+ "version" : 1
+ }
+}
diff --git a/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Filter-pressed-light.svg b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Filter-pressed-light.svg
new file mode 100644
index 000000000..7ec32495e
--- /dev/null
+++ b/Riot/Assets/Images.xcassets/BWI/room_filter_toggle_light_on.imageset/Filter-pressed-light.svg
@@ -0,0 +1,11 @@
+
diff --git a/Riot/Assets/de.lproj/Bwi.strings b/Riot/Assets/de.lproj/Bwi.strings
index 15b7d1b85..70313e8dc 100644
--- a/Riot/Assets/de.lproj/Bwi.strings
+++ b/Riot/Assets/de.lproj/Bwi.strings
@@ -584,6 +584,7 @@
// MARK: - New Layout
"all_chats_edit_layout_show_personal_notes" = "Notizenraum anzeigen";
+"all_chats_searchbar_prompt" = "Suche";
// MARK: - Permalink Scan
"room_recents_scan_qr_code" = "QR Code scannen";
diff --git a/Riot/Assets/en.lproj/Bwi.strings b/Riot/Assets/en.lproj/Bwi.strings
index 828c1d18e..6ba2911a2 100644
--- a/Riot/Assets/en.lproj/Bwi.strings
+++ b/Riot/Assets/en.lproj/Bwi.strings
@@ -494,6 +494,7 @@
// MARK: - New Layout
"all_chats_edit_layout_show_personal_notes" = "Show personal notes";
+"all_chats_searchbar_prompt" = "Suche";
// MARK: - Permalink Scan
"room_recents_scan_qr_code" = "Scan QR Code";
diff --git a/Riot/Modules/Home/AllChats/AllChatsViewController.swift b/Riot/Modules/Home/AllChats/AllChatsViewController.swift
index 4bfe90a31..b0fcfb848 100644
--- a/Riot/Modules/Home/AllChats/AllChatsViewController.swift
+++ b/Riot/Modules/Home/AllChats/AllChatsViewController.swift
@@ -117,6 +117,8 @@ class AllChatsViewController: HomeViewController {
private var toolbarHeight: CGFloat = 0
+ private weak var roomFilterButton: UIButton?
+
// MARK: - Lifecycle
override func viewDidLoad() {
@@ -135,9 +137,7 @@ class AllChatsViewController: HomeViewController {
toolbarHeight = toolbar.frame.height
emptyViewBottomAnchor = toolbar.topAnchor
-
- // bwi: 4179
-
+
if BWIBuildSettings.shared.useNewBumColors { // bwi: #4883
toolbar.tintColor = ThemeService.shared().theme.tintColor
toolbar.barTintColor = ThemeService.shared().theme.backgroundColor
@@ -145,15 +145,21 @@ class AllChatsViewController: HomeViewController {
toolbar.tintColor = theme.colors.accent
}
+ if BWIBuildSettings.shared.roomFiltersToggle {
+ updateNewFilterSearchAndToggleButton()
+ }
+
updateUI()
navigationItem.largeTitleDisplayMode = .never
navigationController?.navigationBar.prefersLargeTitles = false
- searchController.obscuresBackgroundDuringPresentation = false
- searchController.searchResultsUpdater = self
- searchController.delegate = self
-
+ if !BWIBuildSettings.shared.roomFiltersToggle {
+ searchController.obscuresBackgroundDuringPresentation = false
+ searchController.searchResultsUpdater = self
+ searchController.delegate = self
+ }
+
NotificationCenter.default.addObserver(self, selector: #selector(self.setupEditOptions), name: AllChatsLayoutSettingsManager.didUpdateSettings, object: nil)
NotificationCenter.default.addObserver(self, selector: #selector(self.updateBadgeButton), name: MXSpaceNotificationCounter.didUpdateNotificationCount, object: nil)
@@ -161,6 +167,76 @@ class AllChatsViewController: HomeViewController {
self.registerThemeServiceDidChangeThemeNotification()
}
+ // bwi: 4806
+ private func updateNewFilterSearchAndToggleButton() {
+ let customHeaderView = UIView(frame: CGRect(x: 0, y: 0, width: recentsTableView.frame.width, height: 50))
+ let searchBar = UISearchBar(frame: CGRect(x: 8, y: 0, width: customHeaderView.frame.width - 48, height: 50))
+ let button = UIButton(frame: CGRect(x: customHeaderView.frame.width - 48 + 8, y: 0, width: 40, height: 50))
+
+ if ThemeService.shared().isCurrentThemeDark() {
+ button.setImage(Asset.Images.roomFilterToggleDarkOff.image, for: .normal)
+ button.setImage(Asset.Images.roomFilterToggleDarkOn.image, for: .selected)
+ } else {
+ button.setImage(Asset.Images.roomFilterToggleLightOff.image, for: .normal)
+ button.setImage(Asset.Images.roomFilterToggleLightOn.image, for: .selected)
+ }
+ let settings = AllChatsLayoutSettingsManager.shared.allChatLayoutSettings
+ let areFiltersVisible = !settings.filters.isEmpty
+ button.isSelected = !AllChatsLayoutSettingsManager.shared.allChatLayoutSettings.filters.isEmpty
+ button.addTarget(self, action: #selector(onFilterToggleTapped), for: .touchUpInside)
+
+ roomFilterButton = button // keep a reference to handle theme changes
+
+ searchBar.placeholder = BWIL10n.allChatsSearchbarPrompt
+ searchBar.backgroundImage = UIImage() // this hides the separator lines above and below
+ searchBar.delegate = self
+
+ customHeaderView.addSubview(searchBar)
+ customHeaderView.addSubview(button)
+
+ recentsTableView.tableHeaderView = customHeaderView
+
+ // set some constraints for landscape and iPad
+ customHeaderView.translatesAutoresizingMaskIntoConstraints = false
+ let constraints = [
+ searchBar.leadingAnchor.constraint(equalTo: customHeaderView.leadingAnchor),
+ searchBar.centerYAnchor.constraint(equalTo: button.centerYAnchor),
+ searchBar.widthAnchor.constraint(equalToConstant: 40),
+ searchBar.heightAnchor.constraint(equalToConstant: 40),
+ button.leadingAnchor.constraint(equalTo: searchBar.trailingAnchor),
+ button.trailingAnchor.constraint(equalTo: customHeaderView.trailingAnchor),
+ button.topAnchor.constraint(equalTo: customHeaderView.topAnchor),
+ button.bottomAnchor.constraint(equalTo: customHeaderView.bottomAnchor),
+ customHeaderView.centerXAnchor.constraint(equalTo: recentsTableView.centerXAnchor),
+ customHeaderView.widthAnchor.constraint(equalTo: recentsTableView.widthAnchor),
+ customHeaderView.topAnchor.constraint(equalTo: recentsTableView.topAnchor)
+ ]
+ NSLayoutConstraint.activate(constraints)
+ }
+
+ @objc
+ func onSearchTextChanged(searchBar: UISearchBar) {
+ guard let searchText = searchBar.text, !searchText.isEmpty else {
+ self.dataSource?.search(withPatterns: nil)
+ return
+ }
+
+ self.dataSource?.search(withPatterns: [searchText])
+ }
+
+ @objc
+ func onFilterToggleTapped() {
+ let settings = AllChatsLayoutSettingsManager.shared.allChatLayoutSettings
+ let areFiltersVisible = !settings.filters.isEmpty
+ let newSettings = AllChatsLayoutSettings(sections: settings.sections,
+ filters: areFiltersVisible ? [] : [.unreads, .favourites, .people],
+ sorting: settings.sorting)
+ AllChatsLayoutSettingsManager.shared.allChatLayoutSettings = newSettings
+ Analytics.shared.trackInteraction(areFiltersVisible ? .allChatsFiltersDisabled : .allChatsFiltersEnabled)
+
+ roomFilterButton?.isSelected = !AllChatsLayoutSettingsManager.shared.allChatLayoutSettings.filters.isEmpty
+ }
+
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
@@ -172,8 +248,18 @@ class AllChatsViewController: HomeViewController {
self.toolbar.tintColor = theme.colors.accent
}
- if self.navigationItem.searchController == nil {
- self.navigationItem.searchController = searchController
+ if BWIBuildSettings.shared.roomFiltersToggle {
+ if ThemeService.shared().isCurrentThemeDark() {
+ roomFilterButton?.setImage(Asset.Images.roomFilterToggleDarkOff.image, for: .normal)
+ roomFilterButton?.setImage(Asset.Images.roomFilterToggleDarkOn.image, for: .selected)
+ } else {
+ roomFilterButton?.setImage(Asset.Images.roomFilterToggleLightOff.image, for: .normal)
+ roomFilterButton?.setImage(Asset.Images.roomFilterToggleLightOn.image, for: .selected)
+ }
+ } else {
+ if self.navigationItem.searchController == nil {
+ self.navigationItem.searchController = searchController
+ }
}
NotificationCenter.default.addObserver(self, selector: #selector(self.spaceListDidChange), name: MXSpaceService.didInitialise, object: nil)
@@ -217,7 +303,7 @@ class AllChatsViewController: HomeViewController {
coordinator.animate { context in
self.recentsTableView?.tableHeaderView?.layoutIfNeeded()
- self.recentsTableView?.tableHeaderView = self.recentsTableView?.tableHeaderView
+// self.recentsTableView?.tableHeaderView = self.recentsTableView?.tableHeaderView
}
}
@@ -541,14 +627,16 @@ class AllChatsViewController: HomeViewController {
override func shouldShowEmptyView() -> Bool {
let shouldShowEmptyView = super.shouldShowEmptyView() && !AllChatsLayoutSettingsManager.shared.hasAnActiveFilter
- if shouldShowEmptyView {
- self.navigationItem.searchController = nil
- navigationItem.largeTitleDisplayMode = .never
- } else {
- self.navigationItem.searchController = searchController
- navigationItem.largeTitleDisplayMode = .automatic
+ if !BWIBuildSettings.shared.roomFiltersToggle {
+ if shouldShowEmptyView {
+ self.navigationItem.searchController = nil
+ navigationItem.largeTitleDisplayMode = .never
+ } else {
+ self.navigationItem.searchController = searchController
+ navigationItem.largeTitleDisplayMode = .automatic
+ }
}
-
+
return shouldShowEmptyView
}
@@ -589,10 +677,10 @@ class AllChatsViewController: HomeViewController {
return
}
- tableView.tableHeaderView = tableHeadeView
- tableView.tableHeaderView?.widthAnchor.constraint(equalTo: tableView.widthAnchor).isActive = true
- tableView.tableHeaderView?.layoutIfNeeded()
- tableView.tableHeaderView = self.recentsTableView?.tableHeaderView
+// tableView.tableHeaderView = tableHeadeView
+// tableView.tableHeaderView?.widthAnchor.constraint(equalTo: tableView.widthAnchor).isActive = true
+// tableView.tableHeaderView?.layoutIfNeeded()
+// tableView.tableHeaderView = self.recentsTableView?.tableHeaderView
}
@objc private func setupEditOptions() {
@@ -849,7 +937,7 @@ extension AllChatsViewController: UISearchResultsUpdating {
self.dataSource?.search(withPatterns: nil)
return
}
-
+
self.dataSource?.search(withPatterns: [searchText])
}
}
@@ -862,6 +950,17 @@ extension AllChatsViewController: UISearchControllerDelegate {
}
}
+extension AllChatsViewController {
+ override func searchBar(_ searchBar: UISearchBar, textDidChange: String) {
+ guard let searchText = searchBar.text, !searchText.isEmpty else {
+ self.dataSource?.search(withPatterns: nil)
+ return
+ }
+
+ self.dataSource?.search(withPatterns: [searchText])
+ }
+}
+
// MARK: - UIAdaptivePresentationControllerDelegate
extension AllChatsViewController: UIAdaptivePresentationControllerDelegate {