123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 |
- /*
- * Copyright @ 2018-present 8x8, Inc.
- * Copyright @ 2017-2018 Atlassian Pty Ltd
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
- import WatchConnectivity
- import WatchKit
-
- class ExtensionDelegate: NSObject, WCSessionDelegate, WKExtensionDelegate {
-
- var currentContext : JitsiMeetContext = JitsiMeetContext()
-
- static var currentJitsiMeetContext: JitsiMeetContext {
- get {
- return (WKExtension.shared().delegate as! ExtensionDelegate).currentContext
- }
- }
-
- func applicationDidFinishLaunching() {
- // Start Watch Connectivity
- if WCSession.isSupported() {
- let session = WCSession.default
- session.delegate = self
- session.activate()
- }
- }
-
- func handle(_ backgroundTasks: Set<WKRefreshBackgroundTask>) {
- // Sent when the system needs to launch the application in the background to process tasks. Tasks arrive in a set, so loop through and process each one.
- for task in backgroundTasks {
- // Use a switch statement to check the task type
- switch task {
- case let backgroundTask as WKApplicationRefreshBackgroundTask:
- // Be sure to complete the background task once you’re done.
- backgroundTask.setTaskCompletedWithSnapshot(false)
- case let snapshotTask as WKSnapshotRefreshBackgroundTask:
- // Snapshot tasks have a unique completion call, make sure to set your expiration date
- snapshotTask.setTaskCompleted(restoredDefaultState: true, estimatedSnapshotExpiration: Date.distantFuture, userInfo: nil)
- case let connectivityTask as WKWatchConnectivityRefreshBackgroundTask:
- // Be sure to complete the connectivity task once you’re done.
- connectivityTask.setTaskCompletedWithSnapshot(false)
- case let urlSessionTask as WKURLSessionRefreshBackgroundTask:
- // Be sure to complete the URL session task once you’re done.
- urlSessionTask.setTaskCompletedWithSnapshot(false)
- default:
- // make sure to complete unhandled task types
- task.setTaskCompletedWithSnapshot(false)
- }
- }
- }
-
- func session(_ session: WCSession, activationDidCompleteWith
- activationState: WCSessionActivationState, error: Error?) {
- if let error = error {
- print("WATCH Session activation failed with error: \(error.localizedDescription)")
- return
- }
- print("WATCH Session activated with state: \(activationState.rawValue)")
- }
-
- func session(_ session: WCSession, didReceiveApplicationContext applicationContext: [String : Any]) {
- DispatchQueue.main.async {
- let newContext = JitsiMeetContext(context: applicationContext)
-
- print("WATCH got new context: \(newContext.description)");
-
- // Update context on the root controller which displays the recent list
- let controller = WKExtension.shared().rootInterfaceController as! InterfaceController
- controller.updateUI(newContext)
-
- // If the current controller is not the in-call controller and we have a
- // conference URL, show the in-call controller
- if let currentController = WKExtension.shared().visibleInterfaceController as? InterfaceController {
- // Go to the in-call controller only if the conference URL has changed, because the user may have
- // clicked the back button
- if newContext.conferenceURL != nil
- && self.currentContext.conferenceURL != newContext.conferenceURL {
- currentController.pushController(withName: "InCallController", context: newContext)
- }
- } else if let inCallController = WKExtension.shared().visibleInterfaceController as? InCallController {
- if newContext.conferenceURL == nil {
- inCallController.popToRootController()
- } else {
- inCallController.updateUI(newContext)
- }
- }
-
- self.currentContext = newContext;
- }
- }
- }
|