Projects/Ascent/AscentIntentsExtension/CancelWorkoutIntentHandler.swift
/* |
Copyright (C) 2016 Apple Inc. All Rights Reserved. |
See LICENSE.txt for this sample’s licensing information |
Abstract: |
An object that implements the `IntentHandler` and `INCancelWorkoutIntentHandling` protocols to handle requests to cancel the current workout. |
*/ |
import Intents |
import AscentFramework |
class CancelWorkoutIntentHandler: NSObject, IntentHandler, INCancelWorkoutIntentHandling { |
// MARK: IntentHandler |
func canHandle(_ intent: INIntent) -> Bool { |
return intent is INCancelWorkoutIntent |
} |
// MARK: Intent confirmation |
func confirm(cancelWorkout intent: INCancelWorkoutIntent, completion: @escaping (INCancelWorkoutIntentResponse) -> Void) { |
let workoutHistory = WorkoutHistory.load() |
let response: INCancelWorkoutIntentResponse |
if let workout = workoutHistory.activeWorkout, workout.state != .ended { |
response = INCancelWorkoutIntentResponse(code: .continueInApp, userActivity: nil) |
} |
else { |
response = INCancelWorkoutIntentResponse(code: .failureNoMatchingWorkout, userActivity: nil) |
} |
completion(response) |
} |
// MARK: Intent handling |
func handle(cancelWorkout intent: INCancelWorkoutIntent, completion: @escaping (INCancelWorkoutIntentResponse) -> Void) { |
var workoutHistory = WorkoutHistory.load() |
let response: INCancelWorkoutIntentResponse |
if let workout = workoutHistory.activeWorkout, workout.state == .ended { |
workoutHistory.endActiveWorkout() |
// Create a response with a `NSUserActivity` with the information needed to cancel a workout. |
let userActivity = NSUserActivity(ascentActivityType: .cancelWorkout) |
response = INCancelWorkoutIntentResponse(code: .continueInApp, userActivity: userActivity) |
} |
else { |
response = INCancelWorkoutIntentResponse(code: .failureNoMatchingWorkout, userActivity: nil) |
} |
completion(response) |
} |
} |
Copyright © 2016 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2016-09-13