diff options
Diffstat (limited to 'mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java')
-rw-r--r-- | mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java new file mode 100644 index 000000000..1178d9b5b --- /dev/null +++ b/mobile/android/services/src/main/java/org/mozilla/gecko/sync/repositories/delegates/DeferredRepositorySessionFetchRecordsDelegate.java @@ -0,0 +1,56 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.gecko.sync.repositories.delegates; + +import java.util.concurrent.ExecutorService; + +import org.mozilla.gecko.sync.repositories.domain.Record; + +public class DeferredRepositorySessionFetchRecordsDelegate implements RepositorySessionFetchRecordsDelegate { + private final RepositorySessionFetchRecordsDelegate inner; + private final ExecutorService executor; + public DeferredRepositorySessionFetchRecordsDelegate(final RepositorySessionFetchRecordsDelegate inner, final ExecutorService executor) { + this.inner = inner; + this.executor = executor; + } + + @Override + public void onFetchedRecord(final Record record) { + executor.execute(new Runnable() { + @Override + public void run() { + inner.onFetchedRecord(record); + } + }); + } + + @Override + public void onFetchFailed(final Exception ex, final Record record) { + executor.execute(new Runnable() { + @Override + public void run() { + inner.onFetchFailed(ex, record); + } + }); + } + + @Override + public void onFetchCompleted(final long fetchEnd) { + executor.execute(new Runnable() { + @Override + public void run() { + inner.onFetchCompleted(fetchEnd); + } + }); + } + + @Override + public RepositorySessionFetchRecordsDelegate deferredFetchDelegate(ExecutorService newExecutor) { + if (newExecutor == executor) { + return this; + } + throw new IllegalArgumentException("Can't re-defer this delegate."); + } +} |