Dialog not dismissed when tearing down dialog fragment.

1. The dismiss implementaton in Dialog was posting a message
   on the main thread to perform the real dismiss work. The
   goal of this was to allow calling dismiss() from multiple
   threads. The side effect of this is that when dialog fragment
   is dismissed the dialog is not dimissed until the current
   loop on the main thread is completed. However, during rotation
   of the screen the current activity has to be restarted, hence
   all fragments whould be removed. In the destruction process
   the dialog grament requests from the dialog to dismiss but
   since this is asynchromous, the code in
   ActivityThread#handleDestroyActivity detects a leaking window
   since the dialog window is still not removed and removes that
   window. Now when the dialog removal message is processed on
   the next loop we get an exception that the window has already
   been removed. Now if Dialog#dismiss() is called from the
   main thread the call goes right though otherwise a message is
   posted.

bug:5911682

Change-Id: I449d6dd75a84c0ff29ea13dac7d163219cc38341
1 file changed