From f9ff1f411485af93e05314d7231fe867e30f8b80 Mon Sep 17 00:00:00 2001 From: Bilal Date: Thu, 25 Jul 2024 01:03:19 +0530 Subject: [PATCH] added navigations --- WOKA.xcodeproj/project.pbxproj | 4 + WOKA/Constants K/GVar.swift | 2 +- .../NotificationCenterReloads.swift | 3 + WOKA/Constants K/TopViewEnum.swift | 19 +++ WOKA/Home/Controller/ExploreWokaVC.swift | 33 ++++- WOKA/Home/Controller/MyListVC.swift | 5 + WOKA/Home/Home.storyboard | 24 ++++ WOKA/Home/ViewModel/MyListVM.swift | 17 ++- WOKA/Theme/Base.lproj/Theme.storyboard | 135 +++++++++++++++--- WOKA/Theme/Controller/ThemeOneVC.swift | 5 +- WOKA/Theme/Controller/ThemeTwoVC.swift | 10 ++ WOKA/Theme/ViewModel/ThemeOneVM.swift | 38 ++++- WOKA/Theme/ViewModel/ThemeTwoVM.swift | 13 ++ WOKA/WebSeries/JWPlayerManager.swift | 6 +- 14 files changed, 273 insertions(+), 41 deletions(-) create mode 100644 WOKA/Constants K/TopViewEnum.swift diff --git a/WOKA.xcodeproj/project.pbxproj b/WOKA.xcodeproj/project.pbxproj index 5a5323c..2579803 100644 --- a/WOKA.xcodeproj/project.pbxproj +++ b/WOKA.xcodeproj/project.pbxproj @@ -232,6 +232,7 @@ 9C27E16F2BDB866500EC1DA9 /* CellIdentifier.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27E16E2BDB866500EC1DA9 /* CellIdentifier.swift */; }; 9C27E1722BDB86B600EC1DA9 /* OnBoardCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C27E1702BDB86B600EC1DA9 /* OnBoardCell.swift */; }; 9C27E1732BDB86B600EC1DA9 /* OnBoardCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 9C27E1712BDB86B600EC1DA9 /* OnBoardCell.xib */; }; + 9C3E14472C517E8F00D06C10 /* TopViewEnum.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C3E14462C517E8F00D06C10 /* TopViewEnum.swift */; }; 9C535DB52C005A6D00DA6DCD /* KeyWindowFix.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C535DB42C005A6C00DA6DCD /* KeyWindowFix.swift */; }; 9C535DB82C0089B400DA6DCD /* ViewButtonAnimation.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C535DB72C0089B400DA6DCD /* ViewButtonAnimation.swift */; }; 9C535DC02C00B36000DA6DCD /* HomeVC.swift in Sources */ = {isa = PBXBuildFile; fileRef = 9C535DBF2C00B36000DA6DCD /* HomeVC.swift */; }; @@ -552,6 +553,7 @@ 9C27E16E2BDB866500EC1DA9 /* CellIdentifier.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = CellIdentifier.swift; sourceTree = ""; }; 9C27E1702BDB86B600EC1DA9 /* OnBoardCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OnBoardCell.swift; sourceTree = ""; }; 9C27E1712BDB86B600EC1DA9 /* OnBoardCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = OnBoardCell.xib; sourceTree = ""; }; + 9C3E14462C517E8F00D06C10 /* TopViewEnum.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TopViewEnum.swift; sourceTree = ""; }; 9C535DB42C005A6C00DA6DCD /* KeyWindowFix.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = KeyWindowFix.swift; sourceTree = ""; }; 9C535DB72C0089B400DA6DCD /* ViewButtonAnimation.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ViewButtonAnimation.swift; sourceTree = ""; }; 9C535DBF2C00B36000DA6DCD /* HomeVC.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = HomeVC.swift; sourceTree = ""; }; @@ -1274,6 +1276,7 @@ 525954182BE8CC3400191286 /* ConstantString.swift */, 524C42302C0499560016A11C /* NotificationCenterReloads.swift */, 9C8C4FAF2C1328060017DD3B /* Disclaimer.rtf */, + 9C3E14462C517E8F00D06C10 /* TopViewEnum.swift */, ); path = "Constants K"; sourceTree = ""; @@ -1942,6 +1945,7 @@ 52B8D4DF2C04A25E00ED65F3 /* StatusBar.swift in Sources */, 5259541D2BE8D94400191286 /* QueueHelper.swift in Sources */, 525954232BE8F00400191286 /* BaseResponseModel.swift in Sources */, + 9C3E14472C517E8F00D06C10 /* TopViewEnum.swift in Sources */, 525861E02C4FF16700C33C79 /* CouponApplyDM.swift in Sources */, 52A6DCB42C4E73F100F63C51 /* ShopProductsVM.swift in Sources */, 9C27E1692BDB76F200EC1DA9 /* OnBoardVM.swift in Sources */, diff --git a/WOKA/Constants K/GVar.swift b/WOKA/Constants K/GVar.swift index 52dbf76..98a83e6 100644 --- a/WOKA/Constants K/GVar.swift +++ b/WOKA/Constants K/GVar.swift @@ -12,6 +12,6 @@ extension K{ struct GVar{ // static var localized = K.LocalizedEnum.english static var reloadMyList = false - + static var topView = TopViewEnum.theme1 } } diff --git a/WOKA/Constants K/NotificationCenterReloads.swift b/WOKA/Constants K/NotificationCenterReloads.swift index ed793a3..0291792 100644 --- a/WOKA/Constants K/NotificationCenterReloads.swift +++ b/WOKA/Constants K/NotificationCenterReloads.swift @@ -11,5 +11,8 @@ extension K{ struct NotificationCenterReloads{ static var reloadTheme = "ReloadTheme" + static var themeOnePush = "ThemeOnePush" + static var themeTwoPush = "ThemeTwoPush" + static var myListPush = "MyListPush" } } diff --git a/WOKA/Constants K/TopViewEnum.swift b/WOKA/Constants K/TopViewEnum.swift new file mode 100644 index 0000000..110afb2 --- /dev/null +++ b/WOKA/Constants K/TopViewEnum.swift @@ -0,0 +1,19 @@ +// +// TopViewEnum.swift +// WOKA +// +// Created by Bilal on 24/07/2024. +// + +import Foundation + +enum TopViewEnum{ + case theme1 + case theme2 + case myList +} + +enum TopViewPush{ + case webseries + case liveTV +} diff --git a/WOKA/Home/Controller/ExploreWokaVC.swift b/WOKA/Home/Controller/ExploreWokaVC.swift index 2d72f1a..7b0931f 100644 --- a/WOKA/Home/Controller/ExploreWokaVC.swift +++ b/WOKA/Home/Controller/ExploreWokaVC.swift @@ -15,6 +15,12 @@ class ExploreWokaVC: UIViewController { @IBOutlet weak var wokaFmBtn: UIButton! @IBOutlet weak var liveTvBtn: UIButton! + @IBOutlet weak var webSeriesBtn: UIButton! + @IBOutlet weak var gamesBtn: UIButton! + @IBOutlet weak var audioBookBtn: UIButton! + @IBOutlet weak var blogBtn: UIButton! + @IBOutlet weak var karaokeBtn: UIButton! + @IBOutlet weak var shopBtn: UIButton! @IBOutlet weak var layerView: UIView! @@ -46,14 +52,29 @@ class ExploreWokaVC: UIViewController { switch sender{ case wokaFmBtn: self.dismiss(animated: true) { -// let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil) -// let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Theme.radioVC) as! RadioVC -// vcPush.modalPresentationStyle = .overCurrentContext -// vcPush.modalTransitionStyle = .crossDissolve -// self.present(vcPush, animated: true) + if let vc = UIApplication.topViewController(){ + let sb = UIStoryboard(name: K.StoryBoard.theme, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Theme.radioVC) as! RadioVC + vcPush.modalPresentationStyle = .overCurrentContext + vcPush.modalTransitionStyle = .crossDissolve + vc.present(vcPush, animated: true) + } + } + case webSeriesBtn: + self.dismiss(animated: true) { + switch K.GVar.topView{ + case .theme1: + NotificationCenter.default.post(name: NSNotification.Name(K.NotificationCenterReloads.themeOnePush), object: nil, userInfo: ["action": TopViewPush.webseries]) + case .theme2: + NotificationCenter.default.post(name: NSNotification.Name(K.NotificationCenterReloads.themeTwoPush), object: nil, userInfo: ["action": TopViewPush.webseries]) + case .myList: + NotificationCenter.default.post(name: NSNotification.Name(K.NotificationCenterReloads.myListPush), object: nil, userInfo: ["action": TopViewPush.webseries]) + } } case liveTvBtn: - self.dismiss(animated: true) + self.dismiss(animated: true) { + NotificationCenter.default.post(name: NSNotification.Name(K.NotificationCenterReloads.themeOnePush), object: nil, userInfo: ["action": TopViewPush.liveTV]) + } default: break } diff --git a/WOKA/Home/Controller/MyListVC.swift b/WOKA/Home/Controller/MyListVC.swift index 19e4f1f..8272c64 100644 --- a/WOKA/Home/Controller/MyListVC.swift +++ b/WOKA/Home/Controller/MyListVC.swift @@ -33,6 +33,10 @@ class MyListVC: UIViewController{ var vm = MyListVM() + deinit{ + NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: K.NotificationCenterReloads.myListPush), object: nil) + } + override func viewDidLoad() { super.viewDidLoad() vm.vc = self @@ -63,6 +67,7 @@ class MyListVC: UIViewController{ } override func viewDidAppear(_ animated: Bool) { + K.GVar.topView = .myList if K.GVar.reloadMyList{ K.GVar.reloadMyList = false Utilities.startProgressHUD() diff --git a/WOKA/Home/Home.storyboard b/WOKA/Home/Home.storyboard index 4fe68db..5d397c4 100644 --- a/WOKA/Home/Home.storyboard +++ b/WOKA/Home/Home.storyboard @@ -659,6 +659,9 @@ + + + @@ -681,6 +684,9 @@ + + + @@ -703,6 +709,9 @@ + + + @@ -725,6 +734,9 @@ + + + @@ -747,6 +759,9 @@ + + + @@ -769,6 +784,9 @@ + + + @@ -832,10 +850,16 @@ + + + + + + diff --git a/WOKA/Home/ViewModel/MyListVM.swift b/WOKA/Home/ViewModel/MyListVM.swift index 35fed19..657bd1f 100644 --- a/WOKA/Home/ViewModel/MyListVM.swift +++ b/WOKA/Home/ViewModel/MyListVM.swift @@ -29,7 +29,8 @@ class MyListVM{ func initView(){ NotificationCenter.default.addObserver(self, selector: #selector(languageChanged), name: .languageDidChange, object: nil) - + NotificationCenter.default.addObserver(self, selector: #selector(self.viewPush(notification:)), name: NSNotification.Name(rawValue: K.NotificationCenterReloads.myListPush), object: nil) + if AuthFunc.shareInstance.getUserType() == 3{ // handle guest vc.guestLoginView.isHidden = false vc.guestLoginStack.isHidden = false @@ -42,6 +43,20 @@ class MyListVM{ getFavouriteListing() } + @objc func viewPush(notification: Notification){ + if let userInfo = notification.userInfo, let action = userInfo["action"] as? TopViewPush { + switch action { + case .webseries: + let sb = UIStoryboard(name: K.StoryBoard.webSeries, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WebSeries.webSeriesVC) as! WebSeriesVC + vc.navigationController?.pushViewController(vcPush, animated: true) + case .liveTV: + break +// playLiveTV() + } + } + } + func addGradient(){ let color1 = #colorLiteral(red: 0.6745098039, green: 0.6235294118, blue: 0.1725490196, alpha: 1) let color2 = #colorLiteral(red: 0.5450980392, green: 0.6745098039, blue: 0.1725490196, alpha: 1) diff --git a/WOKA/Theme/Base.lproj/Theme.storyboard b/WOKA/Theme/Base.lproj/Theme.storyboard index 758db0a..9f61375 100644 --- a/WOKA/Theme/Base.lproj/Theme.storyboard +++ b/WOKA/Theme/Base.lproj/Theme.storyboard @@ -237,32 +237,43 @@ + - + - - - - + + + + + + + + + + - + + + + + - + @@ -392,15 +403,14 @@ - - + - - + + @@ -426,6 +436,7 @@ + @@ -441,7 +452,6 @@ - @@ -481,6 +491,7 @@ + @@ -825,7 +836,7 @@ - + @@ -1160,10 +1249,10 @@ - + - + diff --git a/WOKA/Theme/Controller/ThemeOneVC.swift b/WOKA/Theme/Controller/ThemeOneVC.swift index 88cac9f..b3879ae 100644 --- a/WOKA/Theme/Controller/ThemeOneVC.swift +++ b/WOKA/Theme/Controller/ThemeOneVC.swift @@ -18,6 +18,7 @@ class ThemeOneVC: UIViewController { @IBOutlet weak var nameLabel: UILabel! @IBOutlet weak var welcomeLabel: LocalisedElementsLabel! @IBOutlet weak var HelloLabel: LocalisedElementsLabel! + @IBOutlet weak var liveTVIcon: UIView! @IBOutlet weak var notificationBtnn: UIButton! @IBOutlet weak var avatarImage: UIImageView! @@ -45,7 +46,8 @@ class ThemeOneVC: UIViewController { NotificationCenter.default.removeObserver(self, name: UIApplication.didEnterBackgroundNotification, object: nil) NotificationCenter.default.removeObserver(self, name: UIApplication.willEnterForegroundNotification, object: nil) NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: K.NotificationCenterReloads.reloadTheme), object: nil) - } + NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: K.NotificationCenterReloads.themeOnePush), object: nil) + } override func viewDidLoad() { super.viewDidLoad() @@ -63,6 +65,7 @@ class ThemeOneVC: UIViewController { override func viewDidAppear(_ animated: Bool) { vm.shouldAnimate = true + K.GVar.topView = .theme1 vm.moveLiveTVView() if let player = vm.avPlayer{ player.play() diff --git a/WOKA/Theme/Controller/ThemeTwoVC.swift b/WOKA/Theme/Controller/ThemeTwoVC.swift index 7bc81d0..df18105 100644 --- a/WOKA/Theme/Controller/ThemeTwoVC.swift +++ b/WOKA/Theme/Controller/ThemeTwoVC.swift @@ -20,6 +20,7 @@ class ThemeTwoVC: UIViewController { deinit{ NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: K.NotificationCenterReloads.reloadTheme), object: nil) + NotificationCenter.default.removeObserver(self, name: NSNotification.Name(rawValue: K.NotificationCenterReloads.themeTwoPush), object: nil) } override func viewDidLoad() { @@ -32,6 +33,10 @@ class ThemeTwoVC: UIViewController { } } + override func viewDidAppear(_ animated: Bool) { + K.GVar.topView = .theme2 + } + override func viewDidLayoutSubviews() { super.viewDidLayoutSubviews() vm.setData() @@ -50,6 +55,11 @@ class ThemeTwoVC: UIViewController { } } } + + @IBAction func playTrailer(_ sender: LocalisedElementsButton) { + let item = JwPlayerItemCreate(url: APIEndPoints.StaticURLs.masilaUrl, poster: nil, titles: "Masila") + JWPlayerManager.shared.presentPlayer(from: self, playerItems: [item], contentType: .trailer) + } } // MARK: - CollectionView DataSource Delegate diff --git a/WOKA/Theme/ViewModel/ThemeOneVM.swift b/WOKA/Theme/ViewModel/ThemeOneVM.swift index f4be426..9534572 100644 --- a/WOKA/Theme/ViewModel/ThemeOneVM.swift +++ b/WOKA/Theme/ViewModel/ThemeOneVM.swift @@ -43,9 +43,23 @@ class ThemeOneVM{ private func handleNotificationCenter(){ NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.themeOnePush(notification:)), name: NSNotification.Name(rawValue: K.NotificationCenterReloads.themeOnePush), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(self.reloadTheme), name: NSNotification.Name(rawValue: K.NotificationCenterReloads.reloadTheme), object: nil) } + @objc func themeOnePush(notification: Notification){ + if let userInfo = notification.userInfo, let action = userInfo["action"] as? TopViewPush { + switch action { + case .webseries: + let sb = UIStoryboard(name: K.StoryBoard.webSeries, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WebSeries.webSeriesVC) as! WebSeriesVC + vc.navigationController?.pushViewController(vcPush, animated: true) + case .liveTV: + handleTap(UITapGestureRecognizer()) + } + } + } + func setupAvPlayer(){ // Ensure the liveStreamURL is valid // guard let liveStreamURL = URL(string: self.liveStreamURL) else { @@ -123,6 +137,7 @@ class ThemeOneVM{ func setUserData(){ guard let data = AuthFunc.shareInstance.userData else{return} //set the first name as the name + /* Check User Type, Dont show username if the user type is guest @@ -141,6 +156,7 @@ class ThemeOneVM{ default: break } + if let avatar = data.avtar{ //https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852 vc.avatarImage.imageURL("https://wokaland.com/admin/storage/app/public/uploads/avtar/avatar2.png?d=1716889852") @@ -192,12 +208,12 @@ class ThemeOneVM{ vc.gamesView.addTapGesture { ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.gamesView) { [weak self] in guard let self else{return} -// let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil) -// let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesListVC) as! GamesListVC -// vc.navigationController?.pushViewController(vcPush, animated: true) - let sb = UIStoryboard(name: K.StoryBoard.cart, bundle: nil) - let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Cart.cartListVC) as! CartListVC - self.vc.navigationController?.pushViewController(vcPush, animated: true) + let sb = UIStoryboard(name: K.StoryBoard.Games, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Games.gamesListVC) as! GamesListVC + vc.navigationController?.pushViewController(vcPush, animated: true) +// let sb = UIStoryboard(name: K.StoryBoard.cart, bundle: nil) +// let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.Cart.cartListVC) as! CartListVC +// self.vc.navigationController?.pushViewController(vcPush, animated: true) } } @@ -218,6 +234,13 @@ class ThemeOneVM{ vc.navigationController?.pushViewController(vcPush, animated: true) } } + + vc.liveTVIcon.addTapGesture { + ViewButtonAnimation.sharedInstance.btnTapped(in: self.vc, view: self.vc.liveTVIcon) { [weak self] in + guard let self else{return} + handleTap(UITapGestureRecognizer()) + } + } } // MARK: - Animate Clouds and LiveTV @@ -289,6 +312,7 @@ class ThemeOneVM{ // function which is triggered when handleTap on livetv is called @objc func handleTap(_ sender: UITapGestureRecognizer) { + DispatchQueue.main.async { Utilities.startProgressHUD(msg: "Loading...") } @@ -327,6 +351,7 @@ class ThemeOneVM{ vc.contentType = .liveStream vc.modalPresentationStyle = .fullScreen vc.modalTransitionStyle = .crossDissolve + DispatchQueue.main.async { [weak self] in guard let self else{return} @@ -362,6 +387,7 @@ class ThemeOneVM{ func stopLiveStream(){ avPlayer.pause() } + // MARK: - Handle Time Change @objc func handleBackground(){ diff --git a/WOKA/Theme/ViewModel/ThemeTwoVM.swift b/WOKA/Theme/ViewModel/ThemeTwoVM.swift index a3d9157..ca8f5fe 100644 --- a/WOKA/Theme/ViewModel/ThemeTwoVM.swift +++ b/WOKA/Theme/ViewModel/ThemeTwoVM.swift @@ -44,8 +44,21 @@ class ThemeTwoVM{ NotificationCenter.default.addObserver(self, selector: #selector(self.reloadTheme), name: NSNotification.Name(rawValue: K.NotificationCenterReloads.reloadTheme), object: nil) NotificationCenter.default.addObserver(self, selector: #selector(appDidEnterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(appWillEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil) + NotificationCenter.default.addObserver(self, selector: #selector(self.viewPush(notification:)), name: NSNotification.Name(rawValue: K.NotificationCenterReloads.themeTwoPush), object: nil) } + @objc func viewPush(notification: Notification){ + if let userInfo = notification.userInfo, let action = userInfo["action"] as? TopViewPush { + switch action { + case .webseries: + let sb = UIStoryboard(name: K.StoryBoard.webSeries, bundle: nil) + let vcPush = sb.instantiateViewController(withIdentifier: K.StoryBoardID.WebSeries.webSeriesVC) as! WebSeriesVC + vc.navigationController?.pushViewController(vcPush, animated: true) + case .liveTV: + playLiveTV() + } + } + } // MARK: - Notification Center Handlers @objc func reloadTheme(){ diff --git a/WOKA/WebSeries/JWPlayerManager.swift b/WOKA/WebSeries/JWPlayerManager.swift index 2a54a6a..9019aaa 100644 --- a/WOKA/WebSeries/JWPlayerManager.swift +++ b/WOKA/WebSeries/JWPlayerManager.swift @@ -131,11 +131,11 @@ class JWPlayerManager { playerVC.videoIndex = startIndex playerVC.contentType = contentType playerVC.config = finalConfig - playerVC.modalPresentationStyle = .fullScreen - + playerVC.modalPresentationStyle = .overFullScreen + playerVC.modalTransitionStyle = .crossDissolve // Present the PlayerVC Utilities.dismissProgressHUD() - viewController.present(playerVC, animated: false) { + viewController.present(playerVC, animated: true) { completion?() // playerVC.transitionToFullScreen(animated: true) { // print("FullScreen")