Signal-iOS/Signal/src/ViewControllers/DebugUI/DebugUITableViewController.swift
Ehren Kret 9c7078b3f8 migrate OWSContactsManager to swift
as the last remaining objective-c file, this removed direct dependency
from the SignalMessaging framework headers on SignalServiceKit and
thus required adding lots of import statements
2024-03-09 10:45:55 -06:00

130 lines
5.5 KiB
Swift

//
// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
//
import SignalMessaging
import SignalServiceKit
import SignalUI
#if USE_DEBUG_UI
class DebugUITableViewController: OWSTableViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// Block device from sleeping while in the Debug UI.
//
// This is useful if you're using long-running actions in the
// Debug UI, like "send 1k messages", etc.
DeviceSleepManager.shared.addBlock(blockObject: self)
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
DeviceSleepManager.shared.removeBlock(blockObject: self)
}
// MARK: Public
static func presentDebugUI(from fromViewController: UIViewController) {
let viewController = DebugUITableViewController()
let subsectionItems: [OWSTableItem] = [
itemForSubsection(DebugUICallsTab(), viewController: viewController),
itemForSubsection(DebugUIContacts(), viewController: viewController),
itemForSubsection(DebugUIDiskUsage(), viewController: viewController),
itemForSubsection(DebugUISessionState(), viewController: viewController),
itemForSubsection(DebugUISyncMessages(), viewController: viewController),
itemForSubsection(DebugUIGroupsV2(), viewController: viewController),
itemForSubsection(DebugUIPayments(), viewController: viewController),
itemForSubsection(DebugUIMisc(), viewController: viewController)
]
viewController.contents = OWSTableContents(
title: "Debug UI",
sections: [ OWSTableSection(title: "Sections", items: subsectionItems) ]
)
viewController.present(fromViewController: fromViewController)
}
static func presentDebugUIForThread(_ thread: TSThread, from fromViewController: UIViewController) {
let viewController = DebugUITableViewController()
var subsectionItems: [OWSTableItem] = [
itemForSubsection(DebugUICallsTab(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIMessages(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIContacts(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIDiskUsage(), viewController: viewController, thread: thread),
itemForSubsection(DebugUISessionState(), viewController: viewController, thread: thread)
]
if thread is TSContactThread {
subsectionItems.append(itemForSubsection(DebugUICalling(), viewController: viewController, thread: thread))
}
subsectionItems += [
itemForSubsection(DebugUINotifications(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIStress(), viewController: viewController, thread: thread),
itemForSubsection(DebugUISyncMessages(), viewController: viewController, thread: thread),
OWSTableItem(
title: "📁 Shared Container", actionBlock: {
let baseURL = OWSFileSystem.appSharedDataDirectoryURL()
let fileBrowser = DebugUIFileBrowser(fileURL: baseURL)
viewController.navigationController?.pushViewController(fileBrowser, animated: true)
}
),
OWSTableItem(
title: "📁 App Container", actionBlock: {
let libraryPath = OWSFileSystem.appLibraryDirectoryPath()
guard let baseURL = NSURL(string: libraryPath)?.deletingLastPathComponent else { return }
let fileBrowser = DebugUIFileBrowser(fileURL: baseURL)
viewController.navigationController?.pushViewController(fileBrowser, animated: true)
}
),
OWSTableItem.disclosureItem(
withText: "Data Store Reports",
actionBlock: {
viewController.navigationController?.pushViewController(DebugUIReportsViewController(), animated: true)
}
),
itemForSubsection(DebugUIGroupsV2(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIPayments(), viewController: viewController, thread: thread),
itemForSubsection(DebugUIMisc(), viewController: viewController, thread: thread)
]
viewController.contents = OWSTableContents(
title: "Debug: Conversation",
sections: [OWSTableSection(title: "Sections", items: subsectionItems)]
)
viewController.present(fromViewController: fromViewController)
}
// MARK: -
private func pushPageWithSection(_ section: OWSTableSection) {
let viewController = DebugUITableViewController()
viewController.contents = OWSTableContents(title: section.headerTitle, sections: [section])
navigationController?.pushViewController(viewController, animated: true )
}
private static func itemForSubsection(
_ page: DebugUIPage,
viewController: DebugUITableViewController,
thread: TSThread? = nil
) -> OWSTableItem {
return OWSTableItem.disclosureItem(
withText: page.name,
actionBlock: { [weak viewController] in
guard let viewController, let section = page.section(thread: thread) else { return }
viewController.pushPageWithSection(section)
}
)
}
}
#endif