Anton Rieder just contributed an OkHttp code sample that monitors a download’s progress using an interceptor. With it, you get a callback as bytes arrive:
interface ProgressListener {
void update(long bytesRead, long contentLength, boolean done);
}
I like this example because it’s all layered decorators:
- The
Interceptorputs code between application-and-OkHttp, or OkHttp-and-network. - The
ResponseBodyaugments the response body to support progress tracking. - The
Sourcedoes the work: updating the progress listener as bytes are delivered from network to application.
In each case, the adaptable interface is deliberately limited. Decorating okio.Source is easy! To contrast, InputStream is hostile to decoration.