add ShakeListener
make device specific controller public, as application may depend on device specific feature