class ReportTooltipInteractor {

    public Observable<ReportTooltipUiIndicator> checkTooltipCauses() {

        return Observable.combineLatest(
                getErrorStream()
                        .doOnNext(syncErrorType -> { // it must start with some element because actual source observable can be empty() or never()
                            analytics.record(new DefaultDataPointEvent(Events.Sync.DisplaySyncError)
                                    .addDataPoint(new DataPoint(SyncErrorType.class.getName(), syncErrorType)));
                            Logger.info(this, "Received sync error: {}.", syncErrorType);
                        })
                        .flatMap(syncErrorType -> Observable.just(ReportTooltipUiIndicator.syncError(syncErrorType)))
                        .startWith(ReportTooltipUiIndicator.none()),
                getInfoStream(),
                (errorUiIndicator, infoUiIndicator) -> errorUiIndicator.getState() != None ? errorUiIndicator : infoUiIndicator)
                .observeOn(AndroidSchedulers.mainThread());
    }

    @Inject public  ReportTooltipInteractor(T activity, NavigationHandler navigationHandler,
                                   BackupProvidersManager backupProvidersManager,
                                   Analytics analytics, GenerateInfoTooltipManager infoTooltipManager,
                                   BackupReminderTooltipManager backupReminderTooltipManager,
                                   ImportInfoTooltipManager importInfoTooltipManager);

}