mirror of
https://github.com/kiwix/kiwix-apple.git
synced 2025-09-25 21:05:09 -04:00
Re-arrange menu buttons
This commit is contained in:
parent
39688276ff
commit
a19e4845af
@ -1,38 +1,26 @@
|
||||
//
|
||||
// CompactViewController.swift
|
||||
// Kiwix
|
||||
//
|
||||
// Created by Chris Li on 9/4/23.
|
||||
// Copyright © 2023 Chris Li. All rights reserved.
|
||||
//
|
||||
|
||||
#if os(iOS)
|
||||
import Combine
|
||||
import SwiftUI
|
||||
import UIKit
|
||||
import SwiftBackports
|
||||
|
||||
final class CompactViewController: UIHostingController<AnyView>, UISearchControllerDelegate, UISearchResultsUpdating {
|
||||
|
||||
private enum Const {
|
||||
#if os(macOS)
|
||||
static let randomButtonTitle: String = "article_shortcut.random.button.title.mac".localized
|
||||
#else
|
||||
static let randomButtonTitle: String = "article_shortcut.random.button.title.ios".localized
|
||||
#endif
|
||||
}
|
||||
private let searchViewModel: SearchViewModel
|
||||
private let searchController: UISearchController
|
||||
private var searchTextObserver: AnyCancellable?
|
||||
private var openURLObserver: NSObjectProtocol?
|
||||
private var loadRandomArticle: (() -> Void)?
|
||||
|
||||
private var trailingNavItemGroups: [UIBarButtonItemGroup] = []
|
||||
private var rightNavItem: UIBarButtonItem?
|
||||
|
||||
init() {
|
||||
searchViewModel = SearchViewModel()
|
||||
let searchResult = SearchResults().environmentObject(searchViewModel)
|
||||
searchController = UISearchController(searchResultsController: UIHostingController(rootView: searchResult))
|
||||
let compactView = CompactView()
|
||||
loadRandomArticle = compactView.loadRandomArticle
|
||||
super.init(rootView: AnyView(compactView))
|
||||
super.init(rootView: AnyView(CompactView()))
|
||||
searchController.searchResultsUpdater = self
|
||||
}
|
||||
|
||||
@ -57,7 +45,6 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
|
||||
}()
|
||||
searchController.searchBar.autocorrectionType = .no
|
||||
navigationItem.titleView = searchController.searchBar
|
||||
navigationItem.rightBarButtonItem = randomArticleButton()
|
||||
searchController.automaticallyShowsCancelButton = false
|
||||
searchController.delegate = self
|
||||
searchController.hidesNavigationBarDuringPresentation = false
|
||||
@ -72,7 +59,7 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
|
||||
forName: .openURL, object: nil, queue: nil
|
||||
) { [weak self] _ in
|
||||
self?.searchController.isActive = false
|
||||
self?.navigationItem.setRightBarButton(self?.randomArticleButton(), animated: true)
|
||||
self?.navigationItem.setRightBarButton(nil, animated: true)
|
||||
}
|
||||
}
|
||||
|
||||
@ -82,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,
|
||||
@ -94,18 +86,12 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
|
||||
}
|
||||
@objc func onSearchCancelled() {
|
||||
searchController.isActive = false
|
||||
navigationItem.setRightBarButton(randomArticleButton(), animated: true)
|
||||
}
|
||||
|
||||
@objc func onRandomTapped(_ target: UIButton) {
|
||||
loadRandomArticle?()
|
||||
}
|
||||
|
||||
private func randomArticleButton() -> UIBarButtonItem {
|
||||
UIBarButtonItem(image: .init(systemName: "die.face.5"),
|
||||
style: .plain,
|
||||
target: self,
|
||||
action: #selector(onRandomTapped))
|
||||
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) {
|
||||
@ -120,55 +106,73 @@ final class CompactViewController: UIHostingController<AnyView>, UISearchControl
|
||||
|
||||
private struct CompactView: View {
|
||||
@EnvironmentObject private var navigation: NavigationViewModel
|
||||
@State private var presentedSheet: PresentedSheet?
|
||||
|
||||
func loadRandomArticle() {
|
||||
if case let .tab(tabID) = navigation.currentItem {
|
||||
BrowserViewModel(tabID: tabID).loadRandomArticle()
|
||||
}
|
||||
}
|
||||
|
||||
init() {
|
||||
debugPrint("Create CompactView")
|
||||
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()
|
||||
TabsManagerButton()
|
||||
// Spacer()
|
||||
// ArticleShortcutButtons(displayMode: .randomArticle)
|
||||
if FeatureFlags.hasLibrary {
|
||||
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 = .library
|
||||
presentedSheet = .settings
|
||||
} label: {
|
||||
Label("common.tab.menu.library".localized, systemImage: "folder")
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Spacer()
|
||||
Button {
|
||||
// presentedSheet = .settings
|
||||
} label: {
|
||||
Label("common.tab.menu.settings".localized, systemImage: "gear")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.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 {
|
||||
@ -188,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
|
||||
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user