Merge pull request #694 from kiwix/532-remove-long-press-re-arrange-buttons

532 remove long press and re-arrange buttons
This commit is contained in:
Kelson 2024-03-19 05:09:07 +01:00 committed by GitHub
commit cc8395535e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 87 additions and 63 deletions

View File

@ -1,10 +1,6 @@
//
// CompactViewController.swift
// Kiwix
//
// Created by Chris Li on 9/4/23.
// Copyright © 2023 Chris Li. All rights reserved.
//
#if os(iOS)
import Combine
@ -16,7 +12,10 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
private let searchController: UISearchController
private var searchTextObserver: AnyCancellable?
private var openURLObserver: NSObjectProtocol?
private var trailingNavItemGroups: [UIBarButtonItemGroup] = []
private var rightNavItem: UIBarButtonItem?
init() {
searchViewModel = SearchViewModel()
let searchResult = SearchResults().environmentObject(searchViewModel)
@ -24,14 +23,14 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
super.init(rootView: AnyView(CompactView()))
searchController.searchResultsUpdater = self
}
@MainActor required dynamic init?(coder aDecoder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
override func viewDidLoad() {
super.viewDidLoad()
definesPresentationContext = true
navigationController?.isToolbarHidden = false
navigationController?.toolbar.scrollEdgeAppearance = {
@ -70,6 +69,11 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
func willPresentSearchController(_ searchController: UISearchController) {
navigationController?.setToolbarHidden(true, animated: true)
if #available(iOS 16.0, *) {
trailingNavItemGroups = navigationItem.trailingItemGroups
} else {
rightNavItem = navigationItem.rightBarButtonItem
}
navigationItem.setRightBarButton(
UIBarButtonItem(
title: "common.button.cancel".localized,
@ -82,14 +86,19 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
}
@objc func onSearchCancelled() {
searchController.isActive = false
navigationItem.setRightBarButton(nil, animated: true)
if #available(iOS 16.0, *) {
navigationItem.setRightBarButtonItems(nil, animated: false)
navigationItem.trailingItemGroups = trailingNavItemGroups
} else {
navigationItem.setRightBarButtonItems([rightNavItem].compactMap { $0 }, animated: true)
}
}
func willDismissSearchController(_ searchController: UISearchController) {
navigationController?.setToolbarHidden(false, animated: true)
searchViewModel.searchText = ""
}
func updateSearchResults(for searchController: UISearchController) {
searchViewModel.searchText = searchController.searchBar.text ?? ""
}
@ -97,32 +106,74 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
private struct CompactView: View {
@EnvironmentObject private var navigation: NavigationViewModel
@State private var presentedSheet: PresentedSheet?
private enum PresentedSheet: String, Identifiable {
var id: String { rawValue }
case library, settings
}
var body: some View {
if case let .tab(tabID) = navigation.currentItem {
Content().id(tabID).toolbar {
ToolbarItemGroup(placement: .bottomBar) {
HStack {
NavigationButtons()
Spacer()
OutlineButton()
Spacer()
BookmarkButton()
Spacer()
ArticleShortcutButtons(displayMode: .randomArticle)
Spacer()
TabsManagerButton()
Content()
.id(tabID)
.toolbar {
ToolbarItemGroup(placement: .bottomBar) {
HStack {
NavigationButtons()
Spacer()
OutlineButton()
Spacer()
BookmarkButton()
Spacer()
TabsManagerButton()
if FeatureFlags.hasLibrary {
Spacer()
Button {
presentedSheet = .library
} label: {
Label("common.tab.menu.library".localized, systemImage: "folder")
}
}
Spacer()
Button {
presentedSheet = .settings
} label: {
Label("common.tab.menu.settings".localized, systemImage: "gear")
}
}
}
}
.environmentObject(BrowserViewModel.getCached(tabID: tabID))
.sheet(item: $presentedSheet) { presentedSheet in
switch presentedSheet {
case .library:
Library()
case .settings:
NavigationView {
Settings().toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button {
self.presentedSheet = nil
} label: {
Text("common.button.done".localized).fontWeight(.semibold)
}
}
}
}
}
}
}
.environmentObject(BrowserViewModel.getCached(tabID: tabID))
}
}
}
private struct Content: View {
@EnvironmentObject private var browser: BrowserViewModel
@FetchRequest(
sortDescriptors: [NSSortDescriptor(keyPath: \ZimFile.size, ascending: false)],
predicate: ZimFile.openedPredicate
) private var zimFiles: FetchedResults<ZimFile>
var body: some View {
Group {
if browser.url == nil {
@ -141,6 +192,14 @@ private struct Content: View {
.onDisappear {
browser.persistState()
}
.toolbar {
ToolbarItemGroup(placement: .primaryAction) {
Button("article_shortcut.random.button.title.ios".localized,
systemImage: "die.face.5",
action: { browser.loadRandomArticle() })
.disabled(zimFiles.isEmpty)
}
}
}
}
#endif

View File

@ -18,9 +18,9 @@ struct TabsManagerButton: View {
) private var zimFiles: FetchedResults<ZimFile>
@State private var presentedSheet: PresentedSheet?
enum PresentedSheet: String, Identifiable {
private enum PresentedSheet: String, Identifiable {
var id: String { rawValue }
case tabsManager, library, settings
case tabsManager
}
var body: some View {
@ -43,27 +43,6 @@ struct TabsManagerButton: View {
Label("common.tab.menu.close_all".localized, systemImage: "xmark.square.fill")
}
}
Section {
ForEach(zimFiles.prefix(5)) { zimFile in
Button {
browser.loadMainArticle(zimFileID: zimFile.fileID)
} label: { Label(zimFile.name, systemImage: "house") }
}
}
Section {
if FeatureFlags.hasLibrary {
Button {
presentedSheet = .library
} label: {
Label("common.tab.menu.library".localized, systemImage: "folder")
}
}
Button {
presentedSheet = .settings
} label: {
Label("common.tab.menu.settings".localized, systemImage: "gear")
}
}
} label: {
Label("common.tab.manager.title".localized, systemImage: "square.stack")
} primaryAction: {
@ -83,20 +62,6 @@ struct TabsManagerButton: View {
}
}
}.modifier(MarkAsHalfSheet())
case .library:
Library()
case .settings:
NavigationView {
Settings().toolbar {
ToolbarItem(placement: .navigationBarLeading) {
Button {
self.presentedSheet = nil
} label: {
Text("common.button.done".localized).fontWeight(.semibold)
}
}
}
}
}
}
}