Consider using the RateLimiter
class as shown here in the android-architecture-components GitHub project for a non-persistent way of checking if the data was recently fetched :
@Singleton
@OpenForTesting
class RepoRepository @Inject constructor(
private val appExecutors: AppExecutors,
private val db: GithubDb,
private val repoDao: RepoDao,
private val githubService: GithubService ) {
private val repoListRateLimit = RateLimiter<String>(10, TimeUnit.MINUTES)
fun loadRepos(owner: String): LiveData<Resource<List<Repo>>> {
return object : NetworkBoundResource<List<Repo>, List<Repo>>(appExecutors) {
override fun saveCallResult(item: List<Repo>) {
repoDao.insertRepos(item)
}
override fun shouldFetch(data: List<Repo>?): Boolean {
return data == null || data.isEmpty() || repoListRateLimit.shouldFetch(owner)
}
override fun loadFromDb() = repoDao.loadRepositories(owner)
override fun createCall() = githubService.getRepos(owner)
override fun onFetchFailed() {
repoListRateLimit.reset(owner)
}
}.asLiveData()
}
// Details omitted for brevity.
}