Rx Java Android: cómo convertir este bloque de devolución de llamada a Observer

Estoy tratando de cargar un archivo a través del SDK de Android S3 de Amazon. He usado RX Java un poco, pero no estoy seguro de cómo convertir este método en un método que devuelva un Observable porque quiero encadenar el resultado de este método a otra llamada Observable. Supongo que me confunde por el hecho de que esto no regresa de inmediato y no puede regresar hasta que cambie OnError o OnState. ¿Cómo manejo estas situaciones de forma RX?

public void uploadFile(TransferObserver transferObserver){

    transferObserver.setTransferListener(new TransferListener() {
        @Override
        public void onStateChanged(int id, TransferState state) {

        }

        @Override
        public void onProgressChanged(int id, long bytesCurrent, long bytesTotal) {

        }

        @Override
        public void onError(int id, Exception ex) {

        }
  });

}

Si alguien pudiera responder con RX Java 2 y lambdas, sería genial porque sigo quedando corto en este

Respuestas a la pregunta(2)

Su respuesta a la pregunta