- Epxlore dismiss when clicked outside. - Webseries hindi english in mylist added hindi linugal files. - Karaoke & Audio books continue watching handled hindi language. - Load more overall module added hindi text. - More section added linngual support. - Blog now handles with hindi language.
250 lines
9.3 KiB
Swift
250 lines
9.3 KiB
Swift
//
|
|
// AppDelegate.swift
|
|
// WOKA
|
|
//
|
|
// Created by MacBook Pro on 25/04/24.
|
|
//
|
|
|
|
import UIKit
|
|
import Lottie
|
|
import IQKeyboardManagerSwift
|
|
import JWPlayerKit
|
|
import Firebase
|
|
import GoogleMobileAds
|
|
import OneSignalFramework
|
|
import BackgroundTasks
|
|
|
|
let appDelegate = UIApplication.shared.delegate as! AppDelegate
|
|
|
|
@main
|
|
class AppDelegate: UIResponder, UIApplicationDelegate {
|
|
|
|
var window: UIWindow?
|
|
var deviceOrientation = UIInterfaceOrientationMask.portrait
|
|
let taskID = "com.woka.refresh"
|
|
|
|
|
|
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask {
|
|
return deviceOrientation
|
|
}
|
|
|
|
private func registerCustomFonts() {
|
|
let fonts = Bundle.main.urls(forResourcesWithExtension: "ttf", subdirectory: nil)
|
|
fonts?.forEach { url in
|
|
CTFontManagerRegisterFontsForURL(url as CFURL, .process, nil)
|
|
}
|
|
}
|
|
|
|
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
|
//Initialize Firebase
|
|
FirebaseApp.configure()
|
|
|
|
// Initialize the Google Mobile Ads SDK.
|
|
GADMobileAds.sharedInstance().start(completionHandler: nil)
|
|
|
|
// enabling the IQKeyboard manager instance
|
|
IQKeyboardManager.shared.enable = true
|
|
IQKeyboardManager.shared.resignOnTouchOutside = true
|
|
// IQKeyboardManager.shared.enableAutoToolbar = false
|
|
// IQKeyboardManager.shared.layoutIfNeededOnUpdate = true
|
|
// registerCustomFonts()
|
|
|
|
// Set the authentication ID Pass after app starts
|
|
AuthFunc.shareInstance.setAuthIDPass()
|
|
|
|
UNUserNotificationCenter.current().delegate = self
|
|
|
|
// OneSignal initialization
|
|
OneSignal.initialize("f9674e6f-75fb-49e8-8379-4f2ed2a880b8", withLaunchOptions: launchOptions)
|
|
OneSignal.Notifications.requestPermission()
|
|
// Add your AppDelegate as an obsserver
|
|
OneSignal.Notifications.addClickListener(self)
|
|
OneSignal.Notifications.addForegroundLifecycleListener(self)
|
|
|
|
// Set the toast defaults
|
|
setupToast()
|
|
|
|
//Lottie Config to handle rendering
|
|
LottieConfiguration.shared.renderingEngine = .mainThread
|
|
|
|
//Configure and modify the side bar
|
|
configureSideBar()
|
|
|
|
//Configure JWPlayer Liscense
|
|
JWPlayerKitLicense.setLicenseKey("Lgok1t7H4PKY+M8FZqmCx54ibUF+NeCTn+xgd+/LVTaRdc+L")
|
|
|
|
// Register the background refresh task
|
|
// BGTaskScheduler.shared.register(forTaskWithIdentifier: taskID, using: nil) { task in
|
|
// // This block is called when the task is triggered
|
|
// guard let task = task as? BGAppRefreshTask else{return}
|
|
// self.handleTask(task: task)
|
|
// }
|
|
//
|
|
// scheduleTasks()
|
|
return true
|
|
}
|
|
|
|
// func scheduleTasks(){
|
|
// BGTaskScheduler.shared.getPendingTaskRequests { requests in
|
|
// print("Request :- ", requests.count)
|
|
//
|
|
// guard requests.isEmpty else{
|
|
// return
|
|
// }
|
|
//
|
|
// // submit task to be scheduled
|
|
// do{
|
|
// let newTask = BGAppRefreshTaskRequest(identifier: self.taskID)
|
|
// // Set when you want the task to run (optional)
|
|
// newTask.earliestBeginDate = Date(timeIntervalSinceNow: 15 * 60) // minutes * seconds ie. 1 min * 60 second, it ill trigger in 1 min.
|
|
// print("Task Scheduled.")
|
|
// try BGTaskScheduler.shared.submit(newTask)
|
|
// } catch{
|
|
// print("Issue with task")
|
|
// }
|
|
// }
|
|
//
|
|
// }
|
|
//
|
|
// func handleTask(task : BGAppRefreshTask){
|
|
// self.localNoti(body: "sad")
|
|
// task.setTaskCompleted(success: true)
|
|
// }
|
|
|
|
// MARK: UISceneSession Lifecycle
|
|
|
|
func application(_ application: UIApplication, configurationForConnecting connectingSceneSession: UISceneSession, options: UIScene.ConnectionOptions) -> UISceneConfiguration {
|
|
// Called when a new scene session is being created.
|
|
// Use this method to select a configuration to create the new scene with.
|
|
return UISceneConfiguration(name: "Default Configuration", sessionRole: connectingSceneSession.role)
|
|
}
|
|
|
|
func application(_ application: UIApplication, didDiscardSceneSessions sceneSessions: Set<UISceneSession>) {
|
|
// Called when the user discards a scene session.
|
|
// If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
|
|
// Use this method to release any resources that were specific to the discarded scenes, as they will not return.
|
|
}
|
|
|
|
func scheduleAppRefresh() {
|
|
let request = BGAppRefreshTaskRequest(identifier: taskID)
|
|
|
|
// Set when you want the task to run (optional)
|
|
request.earliestBeginDate = Date(timeIntervalSinceNow: 2 * 60) // 15 minutes from now
|
|
|
|
do {
|
|
try BGTaskScheduler.shared.submit(request)
|
|
print("Could not schedule app refresh scheduled")
|
|
} catch {
|
|
print("Could not schedule app refresh: \(error)")
|
|
}
|
|
}
|
|
|
|
func handleAppRefresh(task: BGAppRefreshTask) {
|
|
// Schedule a new refresh task
|
|
scheduleAppRefresh()
|
|
|
|
// Perform the background task (e.g., fetching data from a server)
|
|
let operationQueue = OperationQueue()
|
|
operationQueue.maxConcurrentOperationCount = 1
|
|
|
|
let fetchOperation = BlockOperation {
|
|
// Perform your background fetch task here (e.g., network call)
|
|
self.performBackgroundFetch { newData in
|
|
task.setTaskCompleted(success: newData)
|
|
}
|
|
}
|
|
|
|
task.expirationHandler = {
|
|
// Cancel the operation if it takes too long
|
|
operationQueue.cancelAllOperations()
|
|
}
|
|
|
|
operationQueue.addOperation(fetchOperation)
|
|
}
|
|
|
|
func performBackgroundFetch(completion: @escaping (Bool) -> Void) {
|
|
// Simulate a network call
|
|
DispatchQueue.global().asyncAfter(deadline: .now() + 5) {
|
|
// Perform your background work here
|
|
let newDataFetched = true // Assume data was fetched
|
|
completion(newDataFetched)
|
|
print("sdaasdasdasdas")
|
|
self.localNoti(body: newDataFetched ? "true" : "false")
|
|
}
|
|
}
|
|
|
|
func localNoti(body : String? = nil){
|
|
//creating the notification content
|
|
let content = UNMutableNotificationContent()
|
|
|
|
//adding title, subtitle, body and badge
|
|
content.title = "Your are out of Geofence, Battery testing"
|
|
content.subtitle = ""
|
|
content.body = body == nil ? "Please contact your Careperson" : body!
|
|
content.badge = 1
|
|
|
|
//getting the notification trigger
|
|
//it will be called after 5 seconds
|
|
let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 1, repeats: false)
|
|
|
|
//getting the notification request
|
|
let request = UNNotificationRequest(identifier: "SimplifiedIOSNotification", content: content, trigger: trigger)
|
|
|
|
//adding the notification to notification center
|
|
UNUserNotificationCenter.current().add(request, withCompletionHandler: nil)
|
|
}
|
|
}
|
|
|
|
extension AppDelegate {
|
|
// MARK: - Toast Setup
|
|
|
|
private func setupToast(){
|
|
var style = ToastStyle()
|
|
style.displayShadow = true
|
|
style.messageColor = UIColor.white
|
|
style.backgroundColor = UIColor.appColor(.TextDarkBlue)!
|
|
style.messageFont = FontCustom.shareInstance.customFont(fontName: .Exo2_Medium, size: 16)
|
|
style.titleAlignment = .center
|
|
style.messageAlignment = .center
|
|
style.cornerRadius = 10
|
|
ToastManager.shared.style = style
|
|
|
|
// toggle "tap to dismiss" functionality
|
|
ToastManager.shared.isTapToDismissEnabled = false
|
|
|
|
// toggle queueing behavior
|
|
ToastManager.shared.isQueueEnabled = false
|
|
}
|
|
|
|
// MARK: - Configure Sidebar
|
|
|
|
final private func configureSideBar(){
|
|
SideMenuController.preferences.basic.menuWidth = UIScreen.main.bounds.width - 79
|
|
SideMenuController.preferences.animation.shadowAlpha = 0.5
|
|
SideMenuController.preferences.basic.direction = .right
|
|
SideMenuController.preferences.basic.enableRubberEffectWhenPanning = true
|
|
SideMenuController.preferences.basic.position = .above
|
|
SideMenuController.preferences.basic.enablePanGesture = true
|
|
SideMenuController.preferences.basic.enablePanGesture = true
|
|
SideMenuController.preferences.basic.defaultCacheKey = "default"
|
|
SideMenuController.preferences.animation.hideDuration = 0.6
|
|
SideMenuController.preferences.animation.revealDuration = 0.6
|
|
}
|
|
}
|
|
|
|
|
|
// MARK: - Notification Click Handler
|
|
|
|
extension AppDelegate : OSNotificationClickListener, OSNotificationLifecycleListener, UNUserNotificationCenterDelegate{
|
|
|
|
//Handle on click event
|
|
func onClick(event: OSNotificationClickEvent) {
|
|
// print("event")
|
|
// Respond to notification click
|
|
}
|
|
|
|
func onWillDisplay(event: OSNotificationWillDisplayEvent) {
|
|
print("Will Display")
|
|
}
|
|
}
|