Refactor screenshot logging in case of external display
This makes a few changes to make error logging more explicit in case of
connected displays.
- RequestProcessor now throws a typed exception, so we can avoid
catching unrelated errors in TakeScreenshotExecutor
- ScreenshotNotificationsController can be created only with a factory,
providing a displayId. The display ID is used to append "(External
Display)" string for error notifications happening on any display that
is not the default one.
- There can be a maximum of 2 error notifications: one for the default
display (as before), and another that is shown in case of any error in
any external display connected.
- Error reporting for ScreenshotData processing or ScreenshotController
issues has been completely moved to TakeScreenshotExecutor and scoped to
display ID. TakeScreenshotService still reports some early failures
unrelated to displays.
- As we can't specify the displayId in UiEventLogger: if the failure is
generic and we reach it from TakescreenshotService, only one
SCREENSHOT_REQUESTED_... is reported. However, if the screenshot request
reaches TakeScreenshotExecutor, then one event per display will be
reported.
Test: RequestProcessorTest, TakeScreenshotExecutorTest, TakeScreenshotServiceTest
Bug: 296575569
Bug: 290910794
Change-Id: If187e9713b344605466a2dcb78267ededccfcc85
12 files changed