Do not catch (unchecked) IllegalStateException.

This would always be an unrecoverable programming error so it is worse
to silently hide it.
LoginUtils.parseLoginResponseContent(): throw IOException.

So the caller can translate it to a LoginException.
HttpUils.cacheUriToFileSync(): Throw FileCacheException.