Onscreen keyboard UI Story

Refactored the onscreen keyboard UI. 

Note: needs unit tests.

@jazahn Can you take a look at this and see if anything doesn't make sense? Add a comment if it looks OK and/or merge the pull request.