func getActiveTask()

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
    }
  }