Excellent question. In that case, the state holders talk directly to the repositories.
The official Android docs say that the state holders *depend on* the repositories here. This is a bad idea for all the reasons that Clean Architecture tells us (and particularly the dependency inversion principle and the dependency rule). Thankfully though, Google actually doesn't follow its own architecture documentation in this instance. All their samples use dependency inversion and dependency injection here. I prefer to follow their samples rather than there docs here.
So what happens is that you write a repository interface which your repository actually implements. And then that is all dependency-injected into your state holder (i.e. probably view model). So the view model only knows it's communicating with the interface, and doesn't depend on any concretisation of it.