diff options
Diffstat (limited to 'java/com/android/dialer/calllog')
4 files changed, 37 insertions, 44 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 |