package co.smartreceipts.android.sync.widget.errors;
import android.support.annotation.NonNull;
import android.view.View;
import com.google.common.base.Preconditions;
import co.smartreceipts.android.R;
import co.smartreceipts.android.sync.errors.SyncErrorType;
import co.smartreceipts.android.sync.provider.SyncProvider;
import co.smartreceipts.android.widget.Tooltip;
import io.reactivex.Observable;
import io.reactivex.subjects.PublishSubject;
import static android.view.View.GONE;
import static android.view.View.OnClickListener;
import static android.view.View.VISIBLE;
public class SyncErrorPresenter {
private final Tooltip mTooltip;
private final PublishSubject<SyncErrorType> mClickStream = PublishSubject.create();
private SyncProvider mSyncProvider = SyncProvider.None;
public SyncErrorPresenter(@NonNull Tooltip tooltip) {
mTooltip = Preconditions.checkNotNull(tooltip);
mTooltip.setVisibility(GONE);
}
public void present(@NonNull final SyncErrorType syncErrorType) {
if (mSyncProvider == SyncProvider.GoogleDrive) {
if (syncErrorType == SyncErrorType.UserRevokedRemoteRights) {
mTooltip.setErrorWithoutClose(R.string.drive_sync_error_no_permissions, new OnClickListener() {
@Override
public void onClick(View view) {
mClickStream.onNext(syncErrorType);
}
});
} else if (syncErrorType == SyncErrorType.UserDeletedRemoteData) {
mTooltip.setErrorWithoutClose(R.string.drive_sync_error_lost_data, new OnClickListener() {
@Override
public void onClick(View view) {
mTooltip.setVisibility(GONE);
mClickStream.onNext(syncErrorType);
}
});
} else if (syncErrorType == SyncErrorType.NoRemoteDiskSpace) {
mTooltip.setError(R.string.drive_sync_error_no_space, new OnClickListener() {
@Override
public void onClick(View view) {
mTooltip.setVisibility(GONE);
mClickStream.onNext(syncErrorType);
}
});
}
mTooltip.setVisibility(VISIBLE);
}
}
public void present(@NonNull SyncProvider syncProvider) {
if (syncProvider == SyncProvider.None) {
mTooltip.setVisibility(GONE);
}
mSyncProvider = syncProvider;
}
@NonNull
public Observable<SyncErrorType> getClickStream() {
return mClickStream;
}
}