Merge branch 'feature/feed_cache' into 'release/11_5_0'

Feature/feed cache

### Summary
Persistently Cached Discover

### JIRA Ticket
https://onejira.verizon.com/browse/MVAPCT-48

Co-authored-by: Scott Pfeil <Scott.Pfeil3@verizonwireless.com>

See merge request https://gitlab.verizon.com/BPHV_MIPS/mvm_core_ui/-/merge_requests/1086
This commit is contained in:
Bruce, Matt R 2024-04-05 20:17:43 +00:00
commit f40c0b8b9e
6 changed files with 62 additions and 1 deletions

View File

@ -34,6 +34,7 @@ import Combine
public static func setupNavigationControllerAsMainController() -> Self? {
guard let navigationController = setupNavigationController() else { return nil }
MVMCoreUISession.sharedGlobal()?.setup(asStandardLoadViewDelegate: navigationController)
MVMCoreObject.sharedInstance()?.viewControllerManager = navigationController
return navigationController
}
@ -136,6 +137,31 @@ extension NavigationController: MVMCoreViewManagerProtocol {
public func displayedViewController(_ viewController: UIViewController) {
manager?.displayedViewController?(viewController)
}
private func go(to index: Int) async {
guard index != viewControllers.count - 1 else { return }
await NavigationHandler.shared().set(viewControllers: Array(viewControllers[0...index]), navigationController: self)
}
public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? {
for (index, controller) in viewControllers.enumerated() {
if let manager = controller as? MVMCoreViewManagerProtocol,
let viewController = await manager.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType) {
await go(to: index)
return viewController
} else if let controller = controller as? MVMCoreViewControllerProtocol & UIViewController,
controller.pageType == pageType {
guard let controllerType = controllerType else {
await go(to: index)
return controller
}
guard (type(of: controller) == controllerType) else { continue }
await go(to: index)
return controller
}
}
return nil
}
}
extension UIColor {

View File

@ -102,7 +102,7 @@ public extension UINavigationController {
navigationBar.standardAppearance = appearance
navigationBar.scrollEdgeAppearance = appearance
setNavigationBarHidden(model.hidden, animated: true)
setNavigationBarHidden(model.hidden, animated: false)
}
@objc @MainActor

View File

@ -269,6 +269,10 @@ extension MVMCoreUISplitViewController: MVMCoreViewManagerProtocol {
public func newDataReceived(in viewController: UIViewController) {
updateState(with: viewController)
}
public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? {
return await navigationController?.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType)
}
}
@objc public extension MVMCoreUISplitViewController {

View File

@ -95,6 +95,7 @@ CGFloat const PanelAnimationDuration = 0.2;
if (topAlertView) {
[splitViewController subscribeForNotifications];
}
[MVMCoreObject sharedInstance].viewControllerManager = splitViewController;
return splitViewController;
}

View File

@ -362,6 +362,35 @@ open class SubNavManagerController: ViewController, MVMCoreViewManagerProtocol,
manager?.displayedViewController?(viewController)
}
private func go(to index: Int) async {
// Load controller from the cache
guard index != self.index,
let controller = viewControllers[index] else { return }
needToTrackTabSelect = true
self.index = index
await NavigationHandler.shared().replace(viewController: controller, navigationController:subNavigationController, delegateObject:delegateObject(), tryToReplace: false, animated: true)
}
public func navigate(toViewControllerOfPageType pageType: String, controllerType: AnyClass?) async -> UIViewController? {
for (index, controller) in viewControllers.enumerated() {
if let manager = controller as? MVMCoreViewManagerProtocol,
let viewController = await manager.navigate(toViewControllerOfPageType: pageType, controllerType: controllerType) {
await go(to: index)
return viewController
} else if let controller = controller as? MVMCoreViewControllerProtocol & UIViewController,
controller.pageType == pageType {
guard let controllerType = controllerType else {
await go(to: index)
return controller
}
guard (type(of: controller) == controllerType) else { continue }
await go(to: index)
return controller
}
}
return nil
}
// MARK: - MVMCoreUISwipeNavigationProtocol
public func swipeLeft() {

View File

@ -73,6 +73,7 @@ public extension MVMCoreUIUtility {
@objc
public extension MVMCoreUIUtility {
/// Returns the current visible viewcontroller.
@objc @MainActor
static func getVisibleViewController() -> UIViewController? {
var viewController = NavigationHandler.shared().getViewControllerToPresentOn()