104 lines
4.6 KiB
Swift
104 lines
4.6 KiB
Swift
/*
|
||
* 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;
|
||
}
|
||
}
|
||
}
|