in iOS/MyStudies/MyStudies/Views/Steps/ActivityStep/ActivityActiveStep.swift [174:575]
func getActiveTask() -> ORKTask? {
if Utilities.isValidObject(someObject: self.formatDict as AnyObject?) {
switch self.activeType! as ActiveStepType {
case .audioStep:
// creates an Audio step
if Utilities.isValidValue(
someObject: formatDict?[kActiveAudioSpeechInstruction] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveAudioShortSpeechInstruction] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveAudioDuration] as AnyObject?
)
{
return ORKOrderedTask.audioTask(
withIdentifier: key!,
intendedUseDescription: title!,
speechInstruction: (formatDict?[kActiveAudioSpeechInstruction] as? String)!,
shortSpeechInstruction: (formatDict?[kActiveAudioShortSpeechInstruction] as? String)!,
duration: (formatDict?[kActiveAudioDuration] as? TimeInterval)!,
recordingSettings: nil,
checkAudioLevel: true,
options: self.options!
)
} else {
return nil
}
case .fitnessStep:
// creates an fitness check step
if Utilities.isValidValue(
someObject: formatDict?[kActiveFitnessCheckWalkDuration] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveFitnessCheckRestDuration] as AnyObject?
)
{
return ORKOrderedTask.fitnessCheck(
withIdentifier: key!,
intendedUseDescription: title!,
walkDuration: (formatDict?[kActiveFitnessCheckWalkDuration] as? TimeInterval)!,
restDuration: (formatDict?[kActiveFitnessCheckRestDuration] as? TimeInterval)!,
options: self.options!
)
} else {
return nil
}
case .holePegTestStep:
// creates an hole peg test step
if Utilities.isValidValue(
someObject: formatDict?[kActiveHolePegTestDominantHand] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveHolePegTestNumberOfPegs] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveHolePegTestThreshold] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveHolePegTestRotated] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveHolePegTestTimeLimit] as AnyObject?
)
{
return ORKNavigableOrderedTask.holePegTest(
withIdentifier: key!,
intendedUseDescription: title!,
dominantHand: ORKBodySagittal(
rawValue: (formatDict?[kActiveHolePegTestDominantHand] as? Int)!
)!,
numberOfPegs: (formatDict?[kActiveHolePegTestNumberOfPegs] as? Int32)!,
threshold: (formatDict?[kActiveHolePegTestThreshold] as? Double)!,
rotated: ((formatDict?[kActiveHolePegTestRotated]) != nil),
timeLimit: (formatDict?[kActiveHolePegTestTimeLimit] as? TimeInterval)!,
options: self.options!
)
} else {
return nil
}
case .psatStep:
// creates an PSAT Step
if Utilities.isValidValue(
someObject: formatDict?[kActivePSATPresentationMode] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActivePSATInterStimulusInterval] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActivePSATStimulusDuration] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActivePSATSeriesLength] as AnyObject?
)
{
return ORKOrderedTask.psatTask(
withIdentifier: key!,
intendedUseDescription: title!,
presentationMode: ORKPSATPresentationMode(
rawValue: (formatDict?[kActivePSATPresentationMode] as? Int)!
),
interStimulusInterval: (formatDict?[kActivePSATInterStimulusInterval] as? TimeInterval)!,
stimulusDuration: (formatDict?[kActivePSATStimulusDuration] as? TimeInterval)!,
seriesLength: (formatDict?[kActivePSATSeriesLength] as? Int)!,
options: self.options!
)
} else {
return nil
}
case .shortWalkStep:
// creates an short walk step
if Utilities.isValidValue(
someObject: formatDict?[kActiveShortWalkNumberOfStepsPerLeg] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveShortWalkRestDuration] as AnyObject?
)
{
return ORKOrderedTask.shortWalk(
withIdentifier: key!,
intendedUseDescription: title!,
numberOfStepsPerLeg: (formatDict?[kActiveShortWalkNumberOfStepsPerLeg] as? Int)!,
restDuration: (formatDict?[kActiveShortWalkRestDuration] as? TimeInterval)!,
options: self.options!
)
} else {
return nil
}
case .spatialSpanMemoryStep:
// creates a spatial span memory step
if Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryInitialSpan] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryMinimumSpan] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryMaximumSpan] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryPlaySpeed] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryMaximumTests] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryMaximumConsecutiveFailures]
as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryRequireReversal]
as AnyObject?
)
{
let image = UIImage(
named: (formatDict?[kActiveSpatialSpanMemoryCustomTargetImage] as? String)!
)
let initialSpan = (formatDict?[kActiveSpatialSpanMemoryInitialSpan] as? Int)
let minimumSpan = (formatDict?[kActiveSpatialSpanMemoryMinimumSpan] as? Int)
let maximumSpan = (formatDict?[kActiveSpatialSpanMemoryMaximumSpan] as? Int)
let playSpeed = (formatDict?[kActiveSpatialSpanMemoryPlaySpeed] as? Float)
let maximumTest = (formatDict?[kActiveSpatialSpanMemoryMaximumTests] as? Int)
let maximumConsecutiveFailures = (formatDict?[kActiveSpatialSpanMemoryMaximumConsecutiveFailures] as? Int)
// Default Flowers are used
var customPluralName: String? = "flowers"
if Utilities.isValidValue(
someObject: formatDict?[kActiveSpatialSpanMemoryCustomTargetPluralName]
as AnyObject
) {
customPluralName = (formatDict?[kActiveSpatialSpanMemoryCustomTargetPluralName] as? String)!
}
// Initilize Spatial Span Memory task only if matches the following criteria
if initialSpan! >= 2
&& initialSpan! >= minimumSpan!
&& initialSpan! <= maximumSpan!
&& maximumSpan! <= 20
&& playSpeed! > 0.4
&& playSpeed! < 21.0
&& maximumTest! >= 1
&& maximumConsecutiveFailures! >= 1
{
let orderedTask = ORKOrderedTask.spatialSpanMemoryTask(
withIdentifier: key!,
intendedUseDescription:
self.text!,
initialSpan: (formatDict?[kActiveSpatialSpanMemoryInitialSpan] as? Int)!,
minimumSpan: (formatDict?[kActiveSpatialSpanMemoryMinimumSpan] as? Int)!,
maximumSpan: (formatDict?[kActiveSpatialSpanMemoryMaximumSpan] as? Int)!,
playSpeed: (formatDict?[kActiveSpatialSpanMemoryPlaySpeed] as? TimeInterval)!,
maximumTests: (formatDict?[kActiveSpatialSpanMemoryMaximumTests] as? Int)!,
maximumConsecutiveFailures: (formatDict?[kActiveSpatialSpanMemoryMaximumConsecutiveFailures]
as? Int)!,
customTargetImage: image,
customTargetPluralName: customPluralName,
requireReversal: ((formatDict?[kActiveSpatialSpanMemoryRequireReversal]) as? Bool)!,
options: self.options!
)
(orderedTask.steps.last as? ORKCompletionStep)!.text = NSLocalizedString(
kActiveTaskCompletionStepText,
comment: ""
)
return orderedTask
} else {
return nil
}
} else {
return nil
}
case .timedWalkStep:
// creates a timed walk step
if Utilities.isValidValue(
someObject: formatDict?[kActiveTimedWalkTistanceInMeters] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveTimedWalkTimeLimit] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveTimedWalkTurnAroundTimeLimit] as AnyObject?
)
{
// includeAssistiveDeviceForm set to false by default
return ORKOrderedTask.timedWalk(
withIdentifier: key!,
intendedUseDescription: title!,
distanceInMeters: (formatDict?[kActiveTimedWalkTistanceInMeters] as? Double)!,
timeLimit: (formatDict?[kActiveTimedWalkTimeLimit] as? TimeInterval)!,
turnAroundTimeLimit: (formatDict?[kActiveTimedWalkTurnAroundTimeLimit] as? TimeInterval)!,
includeAssistiveDeviceForm: false,
options: self.options!
)
} else {
return nil
}
case .toneAudiometryStep:
// creates a tone audiometry step
if Utilities.isValidValue(
someObject: formatDict?[kActiveToneAudiometrySpeechInstruction] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveToneAudiometryShortSpeechInstruction]
as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveToneAudiometryToneDuration] as AnyObject?
)
{
return ORKOrderedTask.toneAudiometryTask(
withIdentifier: key!,
intendedUseDescription: title!,
speechInstruction: (formatDict?[kActiveToneAudiometrySpeechInstruction] as? String)!,
shortSpeechInstruction: (formatDict?[kActiveToneAudiometryShortSpeechInstruction] as? String)!,
toneDuration: (formatDict?[kActiveToneAudiometryToneDuration] as? TimeInterval)!,
options: self.options!
)
} else {
return nil
}
case .towerOfHanoi:
// creates a tower of honoi step
if Utilities.isValidValue(
someObject: formatDict?[kActiveTowerOfHanoiNumberOfDisks] as AnyObject?
) {
let orderedTask = ORKOrderedTask.towerOfHanoiTask(
withIdentifier: key!,
intendedUseDescription: self.text!,
numberOfDisks: (formatDict?[kActiveTowerOfHanoiNumberOfDisks] as? UInt)!,
options: self.options!
)
(orderedTask.steps.last as? ORKCompletionStep)!.text = NSLocalizedString(
kActiveTaskCompletionStepText,
comment: ""
)
return orderedTask
} else {
return nil
}
case .twoFingerTappingIntervalStep:
// creates a two finger tapping step
if Utilities.isValidValue(
someObject: formatDict?[kActiveTwoFingerTappingIntervalDuration] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveTwoFingerTappingIntervalHandOptions]
as AnyObject?
)
{
return ORKOrderedTask.twoFingerTappingIntervalTask(
withIdentifier: key!,
intendedUseDescription: title!,
duration: (formatDict?[kActiveTwoFingerTappingIntervalDuration] as? TimeInterval)!,
handOptions: ORKPredefinedTaskHandOption(
rawValue: (formatDict?[kActiveTwoFingerTappingIntervalHandOptions] as? UInt)!
),
options: self.options!
)
} else {
return nil
}
case .tremorTestStep:
// creates a tremor test step
if Utilities.isValidValue(
someObject: formatDict?[kActiveTremorTestActiveStepDuration] as AnyObject?
)
&& Utilities.isValidValue(
someObject: formatDict?[kActiveTremorTestHandOptions] as AnyObject?
)
{
var activeOptions: ORKTremorActiveTaskOption?
if Utilities.isValidObject(
someObject: formatDict?[kActivityStepActiveOptions] as AnyObject
) {
activeOptions = nil
for option: Int in (formatDict?[kActivityStepActiveOptions] as? [Int])! {
activeOptions?.insert(ORKTremorActiveTaskOption(rawValue: UInt(option)))
}
} else {
activeOptions = []
}
return ORKOrderedTask.tremorTest(
withIdentifier: key!,
intendedUseDescription: title!,
activeStepDuration: (formatDict?[kActiveTremorTestActiveStepDuration] as? TimeInterval)!,
activeTaskOptions: activeOptions!,
handOptions: ORKPredefinedTaskHandOption(
rawValue: (formatDict?[kActiveTremorTestHandOptions] as? UInt)!
),
options: self.options!
)
} else {
return nil
}
case .fetalKickCounter:
// creates a fetal kick counter step
if Utilities.isValidValue(
someObject: formatDict?[kActiveFetalKickCounterDuration] as AnyObject?
) {
let instructionText = self.text!
let fetalKickTask: FetalKickCounterTask? = FetalKickCounterTask()
fetalKickTask?.initWithFormat(
duration: Float((formatDict?[kActiveFetalKickCounterDuration] as? Int)!),
identifier: self.key!,
instructionText: instructionText
)
if Utilities.isValidValue(
someObject: formatDict?[kActiveFetalKickCounterkickCounts] as AnyObject
) {
fetalKickTask?.maxKickCounts = (formatDict?[kActiveFetalKickCounterkickCounts] as? Int)!
} else {
// Default Fetal Kicks
fetalKickTask?.maxKickCounts = 200
}
return fetalKickTask?.getTask()
} else {
return nil
}
default:
return nil
}
} else {
return nil
}
}