mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-02 10:00:54 +00:00
332e51ec37
By moving the calls to GeckoScreenOrientation.update() into GeckoView, any app using a GeckoView will automatically update the screen orientation in Gecko, too, without any further action being required by the embedding app. The synchronisation around GeckoScreenOrientation.update()/(un)lock() is required for the following scenario: If (un)locking of the screen orientation as requested by Gecko caused the actual screen orientation of the app to change, there are two ways in which this will cause our internal screen orientation to be updated: 1. Either the call to delegate.setRequestedOrientationForCurrentActivity (happening on the Gecko thread if the original request to (un)lock came from Gecko) returns first and update() is subsequently first called from the Gecko thread, too, meaning the onOrientationChange notification to Gecko can occur synchronously as well. In that case, as soon as (un)lock returns to Gecko, querying our internal screen orientation will return the correct value. 2. Or else the GeckoView.onConfigurationChanged() call resulting from the screen rotation manages to call GeckoScreenOrientation.update() first and does so from the Android UI thread. This means that the onOrientationChange notification will be redispatched asynchronously to the Gecko thread, while the Gecko thread's call to GeckoScreenOrientation.update() will return early without doing any work, as the screen orientation had already been previously updated by the UI thread. As a result,there will be a period of time between the Gecko thread returning from GeckoScreenOrientation.(un)lock() and the onOrientationChange notification finally executing where querying the internal screen orientation will not yet return the new orientation. This can cause problems for Gecko (test) code that expects to (un)lock the orientation and then be able to immediately query the new, changed orientation after the call to (un)lock returns. Without additional measures in place, there are no guarantees at what point the GeckoView will receive the onConfigurationChanged() call in relation to the request to change the activity's orientation making its way back to (un)lock(). Therefore, we add synchronisation such that no other thread will be able to up- date the screen orientation in GeckoScreenOrientation while another thread is still busy (un)locking the screen orientation. MozReview-Commit-ID: 5s5NEJcuS0p --HG-- extra : rebase_source : cbfbc6da99aa23af4eee8c4bf6018359f9e71304 |
||
---|---|---|
.. | ||
android | ||
locales |