class MapScreenshotProvider extends BaseScreenshotProvider {

    @NonNull
    @VisibleForTesting
        /* default */ List<MapView> locateMapViewsInHierarchy(@NonNull final View view) {
        final List<MapView> result = new ArrayList<>();

        final Queue<View> viewsToProcess = new LinkedList<>();
        viewsToProcess.add(view);

        while (!viewsToProcess.isEmpty()) {
            final View viewToProcess = viewsToProcess.remove();

            if (viewToProcess instanceof MapView && viewToProcess.getVisibility() == VISIBLE) {
                result.add((MapView) viewToProcess);
            } else if (viewToProcess instanceof ViewGroup) {
                final ViewGroup viewGroup = (ViewGroup) viewToProcess;

                for (int childIndex = 0; childIndex < viewGroup.getChildCount(); childIndex++) {
                    viewsToProcess.add(viewGroup.getChildAt(childIndex));
                }
            }
        }

        return result;
    }

    public  MapScreenshotProvider(
            @NonNull final Context applicationContext,
            @NonNull final Logger logger);

}