Re-launching volume panel continuously will trigger an endless panel loading, show a transparent unfinished UI, and then block the user's screen. Root cause: When the activity receives a new intent from user's clicking, it will call PanelFragment#createPanelContent to update the current fragment. The method triggers an animation and then loads the panel content. If multiple invocations run concurrently before the animation or the loading finish, the loader's countdown latch will be increased abnormally and lead to the endless loading. Solution: 1. Since the invocations are in UI thread, simply add a flag to avoid reentrance when the panel is animating or loading. 2. Filter out the same panel's creation request when the panel is still visible. 3. Do not force a panel's recreation when it's under construction. Bug: 143889510 Bug: 160491854 Test: robotest, manual Change-Id: I821faedeb62354929f3af9804cbbe44ee5bb8a53
Running Settings Robolectric tests
The full suite
$ croot
$ make RunSettingsRoboTests
Running a single test class
$ croot
$ make RunSettingsRoboTests ROBOTEST_FILTER=<ClassName>
For example:
make RunSettingsRoboTests ROBOTEST_FILTER=CodeInspectionTest
You can also use partial class name in ROBOTEST_FILTER. If the partial class name matches multiple file names, all of them will be executed.