package com.turhanoz.android.reactivedirectorychooser.observable; import com.turhanoz.android.reactivedirectorychooser.exception.DirectoryExistsException; import com.turhanoz.android.reactivedirectorychooser.exception.PermissionDeniedException; import java.io.File; import java.io.IOException; import rx.Observable; import rx.Subscriber; public class MakeDirectoryObservable { public Observable<File> create(final File rootDirectory, final String directoryName) { return Observable.create(new Observable.OnSubscribe<File>() { @Override public void call(Subscriber<? super File> subscriber) { if (!rootDirectory.canWrite()) { subscriber.onError(new PermissionDeniedException()); } File newDirectory = new File(rootDirectory, directoryName); if (newDirectory.exists()) { subscriber.onError(new DirectoryExistsException()); } else { boolean isDirectoryCreated = newDirectory.mkdir(); if (isDirectoryCreated) { subscriber.onNext(newDirectory); subscriber.onCompleted(); } else { subscriber.onError(new IOException()); } } } }); } }