diff options
Diffstat (limited to 'java')
10 files changed, 107 insertions, 74 deletions
diff --git a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java index de8905db8..e5cc3eb89 100644 --- a/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java +++ b/java/com/android/dialer/calllog/RefreshAnnotatedCallLogWorker.java @@ -23,7 +23,8 @@ import com.android.dialer.calllog.datasources.CallLogDataSource; import com.android.dialer.calllog.datasources.CallLogMutations; import com.android.dialer.calllog.datasources.DataSources; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.Annotations.NonUiParallel; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; +import com.android.dialer.common.concurrent.Annotations.LightweightExecutor; import com.android.dialer.common.concurrent.DialerFutureSerializer; import com.android.dialer.common.concurrent.DialerFutures; import com.android.dialer.inject.ApplicationContext; @@ -32,10 +33,8 @@ import com.google.common.base.Preconditions; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.List; -import java.util.concurrent.ExecutorService; import javax.inject.Inject; import javax.inject.Singleton; @@ -46,7 +45,8 @@ public class RefreshAnnotatedCallLogWorker { private final Context appContext; private final DataSources dataSources; private final SharedPreferences sharedPreferences; - private final ListeningExecutorService parallelUiListeningExecutorService; + private final ListeningExecutorService backgroundExecutorService; + private final ListeningExecutorService lightweightExecutorService; // Used to ensure that only one refresh flow runs at a time. (Note that // RefreshAnnotatedCallLogWorker is a @Singleton.) private final DialerFutureSerializer dialerFutureSerializer = new DialerFutureSerializer(); @@ -56,14 +56,13 @@ public class RefreshAnnotatedCallLogWorker { @ApplicationContext Context appContext, DataSources dataSources, @Unencrypted SharedPreferences sharedPreferences, - @NonUiParallel ExecutorService parallelUiExecutorService) { + @BackgroundExecutor ListeningExecutorService backgroundExecutorService, + @LightweightExecutor ListeningExecutorService lightweightExecutorService) { this.appContext = appContext; this.dataSources = dataSources; this.sharedPreferences = sharedPreferences; - - // TODO(zachh): Create and use bindings for ListeningExecutorServices. - this.parallelUiListeningExecutorService = - MoreExecutors.listeningDecorator(parallelUiExecutorService); + this.backgroundExecutorService = backgroundExecutorService; + this.lightweightExecutorService = lightweightExecutorService; } /** Checks if the annotated call log is dirty and refreshes it if necessary. */ @@ -78,16 +77,14 @@ public class RefreshAnnotatedCallLogWorker { private ListenableFuture<Void> refresh(boolean checkDirty) { LogUtil.i("RefreshAnnotatedCallLogWorker.refresh", "submitting serialized refresh request"); - // Note: directExecutor is safe to use here and throughout because all methods are async. return dialerFutureSerializer.submitAsync( - () -> checkDirtyAndRebuildIfNecessary(appContext, checkDirty), - MoreExecutors.directExecutor()); + () -> checkDirtyAndRebuildIfNecessary(appContext, checkDirty), lightweightExecutorService); } private ListenableFuture<Void> checkDirtyAndRebuildIfNecessary( Context appContext, boolean checkDirty) { ListenableFuture<Boolean> forceRebuildFuture = - parallelUiListeningExecutorService.submit( + backgroundExecutorService.submit( () -> { LogUtil.i( "RefreshAnnotatedCallLogWorker.checkDirtyAndRebuildIfNecessary", @@ -115,7 +112,7 @@ public class RefreshAnnotatedCallLogWorker { Preconditions.checkNotNull(forceRebuild) ? Futures.immediateFuture(true) : isDirty(appContext), - MoreExecutors.directExecutor()); + lightweightExecutorService); // After determining isDirty, conditionally call rebuild. return Futures.transformAsync( @@ -124,7 +121,7 @@ public class RefreshAnnotatedCallLogWorker { Preconditions.checkNotNull(isDirty) ? rebuild(appContext) : Futures.immediateFuture(null), - MoreExecutors.directExecutor()); + lightweightExecutorService); } private ListenableFuture<Boolean> isDirty(Context appContext) { @@ -151,7 +148,7 @@ public class RefreshAnnotatedCallLogWorker { Futures.transformAsync( fillFuture, unused -> dataSource.fill(appContext, mutations), - MoreExecutors.directExecutor()); + lightweightExecutorService); } // After all data sources are filled, apply mutations (at this point "fillFuture" is the result @@ -163,7 +160,7 @@ public class RefreshAnnotatedCallLogWorker { CallLogDatabaseComponent.get(appContext) .mutationApplier() .applyToDatabase(mutations, appContext), - MoreExecutors.directExecutor()); + lightweightExecutorService); // After mutations applied, call onSuccessfulFill for each data source (in parallel). ListenableFuture<List<Void>> onSuccessfulFillFuture = @@ -177,7 +174,7 @@ public class RefreshAnnotatedCallLogWorker { } return Futures.allAsList(onSuccessfulFillFutures); }, - MoreExecutors.directExecutor()); + lightweightExecutorService); // After onSuccessfulFill is called for every data source, write the shared pref. return Futures.transform( @@ -186,6 +183,6 @@ public class RefreshAnnotatedCallLogWorker { sharedPreferences.edit().putBoolean(CallLogFramework.PREF_FORCE_REBUILD, false).apply(); return null; }, - parallelUiListeningExecutorService); + backgroundExecutorService); } } diff --git a/java/com/android/dialer/calllog/database/MutationApplier.java b/java/com/android/dialer/calllog/database/MutationApplier.java index 720daec54..eee810eb8 100644 --- a/java/com/android/dialer/calllog/database/MutationApplier.java +++ b/java/com/android/dialer/calllog/database/MutationApplier.java @@ -28,25 +28,23 @@ import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.Ann import com.android.dialer.calllog.datasources.CallLogMutations; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.Annotations.NonUiParallel; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import java.util.ArrayList; import java.util.Arrays; import java.util.Map.Entry; -import java.util.concurrent.ExecutorService; import javax.inject.Inject; /** Applies {@link CallLogMutations} to the annotated call log. */ public class MutationApplier { - private final ListeningExecutorService executorService; + private final ListeningExecutorService backgroundExecutorService; @Inject - MutationApplier(@NonUiParallel ExecutorService executorService) { - this.executorService = MoreExecutors.listeningDecorator(executorService); + MutationApplier(@BackgroundExecutor ListeningExecutorService backgroundExecutorService) { + this.backgroundExecutorService = backgroundExecutorService; } /** Applies the provided {@link CallLogMutations} to the annotated call log. */ @@ -54,7 +52,7 @@ public class MutationApplier { if (mutations.isEmpty()) { return Futures.immediateFuture(null); } - return executorService.submit( + return backgroundExecutorService.submit( () -> { applyToDatabaseInternal(mutations, appContext); return null; diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java index 41eaf2bae..9b90ad5cc 100644 --- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java +++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java @@ -29,7 +29,7 @@ import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.Ann import com.android.dialer.calllog.datasources.CallLogDataSource; import com.android.dialer.calllog.datasources.CallLogMutations; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.Annotations.NonUiParallel; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; import com.android.dialer.phonelookup.PhoneLookupSelector; @@ -40,7 +40,6 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.Maps; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import com.google.i18n.phonenumbers.PhoneNumberUtil; import com.google.protobuf.InvalidProtocolBufferException; import java.util.Arrays; @@ -49,7 +48,6 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ExecutionException; -import java.util.concurrent.ExecutorService; import javax.inject.Inject; /** @@ -59,27 +57,29 @@ import javax.inject.Inject; public final class PhoneLookupDataSource implements CallLogDataSource { private final PhoneLookup phoneLookup; - private final ListeningExecutorService executorService; + private final ListeningExecutorService backgroundExecutorService; @Inject - PhoneLookupDataSource(PhoneLookup phoneLookup, @NonUiParallel ExecutorService executorService) { + PhoneLookupDataSource( + PhoneLookup phoneLookup, + @BackgroundExecutor ListeningExecutorService backgroundExecutorService) { this.phoneLookup = phoneLookup; - this.executorService = MoreExecutors.listeningDecorator(executorService); + this.backgroundExecutorService = backgroundExecutorService; } @Override public ListenableFuture<Boolean> isDirty(Context appContext) { - return executorService.submit(() -> isDirtyInternal(appContext)); + return backgroundExecutorService.submit(() -> isDirtyInternal(appContext)); } @Override public ListenableFuture<Void> fill(Context appContext, CallLogMutations mutations) { - return executorService.submit(() -> fillInternal(appContext, mutations)); + return backgroundExecutorService.submit(() -> fillInternal(appContext, mutations)); } @Override public ListenableFuture<Void> onSuccessfulFill(Context appContext) { - return executorService.submit(this::onSuccessfulFillInternal); + return backgroundExecutorService.submit(this::onSuccessfulFillInternal); } @WorkerThread diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java index dfc768c0a..91db915ef 100644 --- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java +++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java @@ -45,7 +45,7 @@ import com.android.dialer.calllog.datasources.util.RowCombiner; import com.android.dialer.calllogutils.PhoneAccountUtils; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; -import com.android.dialer.common.concurrent.Annotations.NonUiParallel; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil; import com.android.dialer.storage.StorageComponent; @@ -53,12 +53,10 @@ import com.android.dialer.theme.R; import com.android.dialer.util.PermissionsUtil; import com.google.common.util.concurrent.ListenableFuture; import com.google.common.util.concurrent.ListeningExecutorService; -import com.google.common.util.concurrent.MoreExecutors; import com.google.i18n.phonenumbers.PhoneNumberUtil; import java.util.Arrays; import java.util.List; import java.util.Set; -import java.util.concurrent.ExecutorService; import javax.inject.Inject; /** @@ -71,13 +69,13 @@ public class SystemCallLogDataSource implements CallLogDataSource { @VisibleForTesting static final String PREF_LAST_TIMESTAMP_PROCESSED = "systemCallLogLastTimestampProcessed"; - private final ListeningExecutorService executorService; + private final ListeningExecutorService backgroundExecutorService; @Nullable private Long lastTimestampProcessed; @Inject - SystemCallLogDataSource(@NonUiParallel ExecutorService executorService) { - this.executorService = MoreExecutors.listeningDecorator(executorService); + SystemCallLogDataSource(@BackgroundExecutor ListeningExecutorService backgroundExecutorService) { + this.backgroundExecutorService = backgroundExecutorService; } @MainThread @@ -105,17 +103,17 @@ public class SystemCallLogDataSource implements CallLogDataSource { @Override public ListenableFuture<Boolean> isDirty(Context appContext) { - return executorService.submit(() -> isDirtyInternal(appContext)); + return backgroundExecutorService.submit(() -> isDirtyInternal(appContext)); } @Override public ListenableFuture<Void> fill(Context appContext, CallLogMutations mutations) { - return executorService.submit(() -> fillInternal(appContext, mutations)); + return backgroundExecutorService.submit(() -> fillInternal(appContext, mutations)); } @Override public ListenableFuture<Void> onSuccessfulFill(Context appContext) { - return executorService.submit(() -> onSuccessfulFillInternal(appContext)); + return backgroundExecutorService.submit(() -> onSuccessfulFillInternal(appContext)); } @WorkerThread diff --git a/java/com/android/dialer/common/concurrent/Annotations.java b/java/com/android/dialer/common/concurrent/Annotations.java index 5e3954cf9..62d5b318e 100644 --- a/java/com/android/dialer/common/concurrent/Annotations.java +++ b/java/com/android/dialer/common/concurrent/Annotations.java @@ -39,4 +39,12 @@ public class Annotations { /** Annotation for retrieving the UI serial executor. */ @Qualifier public @interface UiSerial {} + + /** Annotation for retrieving the lightweight executor. */ + @Qualifier + public @interface LightweightExecutor {} + + /** Annotation for retrieving the background executor. */ + @Qualifier + public @interface BackgroundExecutor {} } diff --git a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java index ab01654aa..317807b1d 100644 --- a/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java +++ b/java/com/android/dialer/common/concurrent/DefaultDialerExecutorFactory.java @@ -40,14 +40,14 @@ import javax.inject.Inject; public class DefaultDialerExecutorFactory implements DialerExecutorFactory { private final ExecutorService nonUiThreadPool; private final ScheduledExecutorService nonUiSerialExecutor; - private final Executor uiThreadPool; + private final ExecutorService uiThreadPool; private final ScheduledExecutorService uiSerialExecutor; @Inject DefaultDialerExecutorFactory( @NonUiParallel ExecutorService nonUiThreadPool, @NonUiSerial ScheduledExecutorService nonUiSerialExecutor, - @UiParallel Executor uiThreadPool, + @UiParallel ExecutorService uiThreadPool, @UiSerial ScheduledExecutorService uiSerialExecutor) { this.nonUiThreadPool = nonUiThreadPool; this.nonUiSerialExecutor = nonUiSerialExecutor; diff --git a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java index 5e0190e8d..98738ed37 100644 --- a/java/com/android/dialer/common/concurrent/DialerExecutorModule.java +++ b/java/com/android/dialer/common/concurrent/DialerExecutorModule.java @@ -17,16 +17,18 @@ package com.android.dialer.common.concurrent; import android.os.AsyncTask; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; +import com.android.dialer.common.concurrent.Annotations.LightweightExecutor; import com.android.dialer.common.concurrent.Annotations.NonUiParallel; import com.android.dialer.common.concurrent.Annotations.NonUiSerial; import com.android.dialer.common.concurrent.Annotations.Ui; import com.android.dialer.common.concurrent.Annotations.UiParallel; import com.android.dialer.common.concurrent.Annotations.UiSerial; import com.google.common.util.concurrent.ListeningExecutorService; +import com.google.common.util.concurrent.MoreExecutors; import dagger.Binds; import dagger.Module; import dagger.Provides; -import java.util.concurrent.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; @@ -85,8 +87,8 @@ public abstract class DialerExecutorModule { @Provides @UiParallel - static Executor provideUiThreadPool() { - return AsyncTask.THREAD_POOL_EXECUTOR; + static ExecutorService provideUiThreadPool() { + return (ExecutorService) AsyncTask.THREAD_POOL_EXECUTOR; } @Provides @@ -105,4 +107,19 @@ public abstract class DialerExecutorModule { } }); } + + @Provides + @Singleton + @LightweightExecutor + static ListeningExecutorService provideLightweightExecutor(@UiParallel ExecutorService delegate) { + return MoreExecutors.listeningDecorator(delegate); + } + + @Provides + @Singleton + @BackgroundExecutor + static ListeningExecutorService provideBackgroundExecutor( + @NonUiParallel ExecutorService delegate) { + return MoreExecutors.listeningDecorator(delegate); + } } diff --git a/java/com/android/dialer/phonelookup/PhoneLookupModule.java b/java/com/android/dialer/phonelookup/PhoneLookupModule.java index 400caff3a..39b0a5083 100644 --- a/java/com/android/dialer/phonelookup/PhoneLookupModule.java +++ b/java/com/android/dialer/phonelookup/PhoneLookupModule.java @@ -27,7 +27,12 @@ import dagger.Provides; public abstract class PhoneLookupModule { @Provides - static PhoneLookup providePhoneLookup(Cp2PhoneLookup cp2PhoneLookup) { - return new CompositePhoneLookup(ImmutableList.of(cp2PhoneLookup)); + static ImmutableList<PhoneLookup> providePhoneLookupList(Cp2PhoneLookup cp2PhoneLookup) { + return ImmutableList.of(cp2PhoneLookup); + } + + @Provides + static PhoneLookup providePhoneLookup(CompositePhoneLookup compositePhoneLookup) { + return compositePhoneLookup; } } diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java index f432e27ae..abc0c74fd 100644 --- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java +++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java @@ -20,6 +20,7 @@ import android.support.annotation.NonNull; import android.telecom.Call; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.Annotations.LightweightExecutor; import com.android.dialer.common.concurrent.DialerFutures; import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; @@ -29,9 +30,10 @@ import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.Futures; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.ListeningExecutorService; import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; /** * {@link PhoneLookup} which delegates to a configured set of {@link PhoneLookup PhoneLookups}, @@ -40,9 +42,14 @@ import java.util.List; public final class CompositePhoneLookup implements PhoneLookup { private final ImmutableList<PhoneLookup> phoneLookups; + private final ListeningExecutorService lightweightExecutorService; - public CompositePhoneLookup(ImmutableList<PhoneLookup> phoneLookups) { + @Inject + CompositePhoneLookup( + ImmutableList<PhoneLookup> phoneLookups, + @LightweightExecutor ListeningExecutorService lightweightExecutorService) { this.phoneLookups = phoneLookups; + this.lightweightExecutorService = lightweightExecutorService; } /** @@ -68,7 +75,7 @@ public final class CompositePhoneLookup implements PhoneLookup { } return mergedInfo.build(); }, - MoreExecutors.directExecutor()); + lightweightExecutorService); } @Override @@ -117,7 +124,7 @@ public final class CompositePhoneLookup implements PhoneLookup { } return combinedMap.build(); }, - MoreExecutors.directExecutor()); + lightweightExecutorService); } @Override @@ -127,6 +134,6 @@ public final class CompositePhoneLookup implements PhoneLookup { futures.add(phoneLookup.onSuccessfulBulkUpdate()); } return Futures.transform( - Futures.allAsList(futures), unused -> null, MoreExecutors.directExecutor()); + Futures.allAsList(futures), unused -> null, lightweightExecutorService); } } diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java index cfb8fb7b8..cd645a447 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2PhoneLookup.java @@ -30,6 +30,7 @@ import android.telecom.Call; import android.text.TextUtils; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.common.Assert; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; import com.android.dialer.inject.ApplicationContext; import com.android.dialer.phonelookup.PhoneLookup; import com.android.dialer.phonelookup.PhoneLookupInfo; @@ -39,7 +40,7 @@ import com.android.dialer.storage.Unencrypted; import com.google.common.collect.ImmutableMap; import com.google.common.collect.ImmutableSet; import com.google.common.util.concurrent.ListenableFuture; -import com.google.common.util.concurrent.MoreExecutors; +import com.google.common.util.concurrent.ListeningExecutorService; import java.util.Map; import java.util.Map.Entry; import java.util.Objects; @@ -71,25 +72,29 @@ public final class Cp2PhoneLookup implements PhoneLookup { private final Context appContext; private final SharedPreferences sharedPreferences; + private final ListeningExecutorService backgroundExecutorService; + @Nullable private Long currentLastTimestampProcessed; @Inject Cp2PhoneLookup( - @ApplicationContext Context appContext, @Unencrypted SharedPreferences sharedPreferences) { + @ApplicationContext Context appContext, + @Unencrypted SharedPreferences sharedPreferences, + @BackgroundExecutor ListeningExecutorService backgroundExecutorService) { this.appContext = appContext; this.sharedPreferences = sharedPreferences; + this.backgroundExecutorService = backgroundExecutorService; } @Override public ListenableFuture<PhoneLookupInfo> lookup(@NonNull Call call) { // TODO(zachh): Implementation. - return MoreExecutors.newDirectExecutorService().submit(PhoneLookupInfo::getDefaultInstance); + return backgroundExecutorService.submit(PhoneLookupInfo::getDefaultInstance); } @Override public ListenableFuture<Boolean> isDirty(ImmutableSet<DialerPhoneNumber> phoneNumbers) { - // TODO(calderwoodra): consider a different thread pool - return MoreExecutors.newDirectExecutorService().submit(() -> isDirtyInternal(phoneNumbers)); + return backgroundExecutorService.submit(() -> isDirtyInternal(phoneNumbers)); } private boolean isDirtyInternal(ImmutableSet<DialerPhoneNumber> phoneNumbers) { @@ -185,8 +190,7 @@ public final class Cp2PhoneLookup implements PhoneLookup { @Override public ListenableFuture<ImmutableMap<DialerPhoneNumber, PhoneLookupInfo>> bulkUpdate( ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> existingInfoMap) { - return MoreExecutors.newDirectExecutorService() - .submit(() -> bulkUpdateInternal(existingInfoMap)); + return backgroundExecutorService.submit(() -> bulkUpdateInternal(existingInfoMap)); } private ImmutableMap<DialerPhoneNumber, PhoneLookupInfo> bulkUpdateInternal( @@ -234,17 +238,16 @@ public final class Cp2PhoneLookup implements PhoneLookup { @Override public ListenableFuture<Void> onSuccessfulBulkUpdate() { - return MoreExecutors.newDirectExecutorService() - .submit( - () -> { - if (currentLastTimestampProcessed != null) { - sharedPreferences - .edit() - .putLong(PREF_LAST_TIMESTAMP_PROCESSED, currentLastTimestampProcessed) - .apply(); - } - return null; - }); + return backgroundExecutorService.submit( + () -> { + if (currentLastTimestampProcessed != null) { + sharedPreferences + .edit() + .putLong(PREF_LAST_TIMESTAMP_PROCESSED, currentLastTimestampProcessed) + .apply(); + } + return null; + }); } /** |