package co.smartreceipts.android.ocr.widget.tooltip; import android.support.annotation.NonNull; import android.view.View; import com.google.common.base.Preconditions; import co.smartreceipts.android.R; import co.smartreceipts.android.ocr.purchases.OcrPurchaseTracker; import co.smartreceipts.android.utils.log.Logger; import co.smartreceipts.android.widget.Tooltip; import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.disposables.CompositeDisposable; import static android.view.View.GONE; import static android.view.View.OnClickListener; import static android.view.View.VISIBLE; public class OcrInformationalTooltipPresenter{ private final OcrInformationalTooltipInteractor interactor; private final Tooltip tooltip; private final OcrPurchaseTracker ocrPurchaseTracker; private CompositeDisposable compositeDisposable; public OcrInformationalTooltipPresenter(@NonNull OcrInformationalTooltipInteractor interactor, @NonNull Tooltip tooltip, @NonNull OcrPurchaseTracker ocrPurchaseTracker) { this.interactor = Preconditions.checkNotNull(interactor); this.tooltip = Preconditions.checkNotNull(tooltip); this.ocrPurchaseTracker = Preconditions.checkNotNull(ocrPurchaseTracker); this.tooltip.setTooltipClickListener(new OnClickListener() { @Override public void onClick(View v) { OcrInformationalTooltipPresenter.this.interactor.showOcrConfiguration(); OcrInformationalTooltipPresenter.this.tooltip.setVisibility(GONE); } }); this.tooltip.showCloseIcon(v -> { OcrInformationalTooltipPresenter.this.interactor.dismissTooltip(); OcrInformationalTooltipPresenter.this.tooltip.setVisibility(GONE); }); this.tooltip.setVisibility(GONE); } public void onResume() { compositeDisposable = new CompositeDisposable(); compositeDisposable.add(interactor.getShowOcrTooltip() .observeOn(AndroidSchedulers.mainThread()) .subscribe(ocrTooltipMessageType -> { Logger.info(OcrInformationalTooltipPresenter.this, "Showing OCR Tooltip for {}", ocrTooltipMessageType); if (ocrTooltipMessageType == OcrTooltipMessageType.NotConfigured) { tooltip.setInfoMessage(R.string.ocr_informational_tooltip_configure_text); } else if (ocrTooltipMessageType == OcrTooltipMessageType.LimitedScansRemaining || ocrTooltipMessageType == OcrTooltipMessageType.NoScansRemaining) { final int remainingScans = ocrPurchaseTracker.getRemainingScans(); tooltip.setInfoMessage(tooltip.getContext().getResources().getQuantityString(R.plurals.ocr_informational_tooltip_limited_scans_text, remainingScans, remainingScans)); } else { throw new IllegalArgumentException("Unknown message type" + ocrTooltipMessageType); } tooltip.setVisibility(VISIBLE); })); } public void onPause() { compositeDisposable.dispose(); compositeDisposable = null; } }