     
     /**
      *  @private
-     *  Called when the soft keyboard is activated. Tells the top level 
-     *  application to resize itself
+     *  Called when the soft keyboard is activated. 
+     * 
+     *  There are three use cases for Scroller and text component interaction
+     * 
+     *  A. Pressing a TextInput to open up the soft keyboard
+     *  B. Pressing in the middle of a TextArea to open up the soft keyboard
+     *  C. Pressing in a text component on a device that doesn't support soft keyboard
+     * 
+     *  For use case A, lastFocusedElementCaretBounds is never set, so we just
+     *  call ensureElementIsVisible on the TextInput
+     * 
+     *  For use case B, we first get a softKeyboard active event in the 
+     *  capture phase. We then receive a caretBoundsChange event from the 
+     *  TextArea skin. We store the bounds in lastFocusedElementCaretBounds
+     *  and use that value in the call to ensureElementPositionIsVisible in
+     *  the softKeyboard activate bubble phase. 
+     * 
+     *  For use case C, we never receive a soft keyboard activate event, so 
+     *  we just listen for caretBoundsChange. 
      */  
     private function softKeyboardActivateHandler(event:SoftKeyboardEvent):void
     {

        {
            addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_ACTIVATE, 
                softKeyboardActivateHandler, false, 
                EventPriority.DEFAULT, true);
            addEventListener(SoftKeyboardEvent.SOFT_KEYBOARD_DEACTIVATE, 
                softKeyboardDeactivateHandler, false, 

    }
    
    /**
     *  @private 
     *  Listen for softKeyboard activate in the capture phase so we know if
     *  we need to delay calling ensureElementPositionIsVisible if we get
     *  a caretBoundsChange event
     */ 
    private function softKeyboardActivateCaptureHandler(event:SoftKeyboardEvent):void
    {
        var keyboardRect:Rectangle = stage.softKeyboardRect;
        
        if (keyboardRect.width > 0 && keyboardRect.height > 0)
        {
            captureNextCaretBoundsChange = true;
        }
    }
    
    /**
     *  @private
     *  Called when the soft keyboard is deactivated. Tells the top level 
     *  application to resize itself and fix the scroll position if necessary
