onConfigurationChanged not getting called
This was my gremlin for the ~same problem:
Caution: Beginning with Android 3.2 (API level 13), the "screen size" also changes when the device switches between portrait and landscape orientation. Thus, if you want to prevent runtime restarts due to orientation change when developing for API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), you must include the "screenSize" value in addition to the "orientation" value. That is, you must decalare android:configChanges="orientation|screenSize". However, if your application targets API level 12 or lower, then your activity always handles this configuration change itself (this configuration change does not restart your activity, even when running on an Android 3.2 or higher device).
(From http://developer.android.com/guide/topics/resources/runtime-changes.html)
TL;DR: add "|screenSize" to configChanges when targeting API level 13+
The problem was that if you use this method
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
to force the orientation of your Activity
to portrait mode, you're not candidate to receive orientation
changes.
So the solution is to not setRequestOrientation
to a particular mode. But instead use SCREEN_ORIENTATION_SENSOR.
Some devices of 4.0 doesn't call onConfigurationChanged. Just add a listener to screenSize too.
android:configChanges="orientation|screenSize"