summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
diff options
context:
space:
mode:
Diffstat (limited to 'java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java')
-rw-r--r--java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java50
1 files changed, 35 insertions, 15 deletions
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 3c34fa6a5..e07996177 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -20,6 +20,7 @@ import android.Manifest.permission;
import android.annotation.TargetApi;
import android.content.ContentValues;
import android.content.Context;
+import android.content.SharedPreferences;
import android.database.Cursor;
import android.os.Build;
import android.os.Build.VERSION;
@@ -40,6 +41,7 @@ import android.telephony.PhoneNumberUtils;
import android.text.TextUtils;
import android.util.ArraySet;
import com.android.dialer.DialerPhoneNumber;
+import com.android.dialer.calllog.database.AnnotatedCallLogDatabaseHelper;
import com.android.dialer.calllog.database.contract.AnnotatedCallLogContract.AnnotatedCallLog;
import com.android.dialer.calllog.datasources.CallLogDataSource;
import com.android.dialer.calllog.datasources.CallLogMutations;
@@ -51,13 +53,15 @@ import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
-import com.android.dialer.storage.StorageComponent;
+import com.android.dialer.storage.Unencrypted;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.theme.R;
import com.android.dialer.util.PermissionsUtil;
import com.google.common.collect.Iterables;
+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 com.google.i18n.phonenumbers.PhoneNumberUtil;
import java.util.ArrayList;
import java.util.Arrays;
@@ -77,15 +81,21 @@ public class SystemCallLogDataSource implements CallLogDataSource {
private final ListeningExecutorService backgroundExecutorService;
private final MarkDirtyObserver markDirtyObserver;
+ private final SharedPreferences sharedPreferences;
+ private final AnnotatedCallLogDatabaseHelper annotatedCallLogDatabaseHelper;
@Nullable private Long lastTimestampProcessed;
@Inject
SystemCallLogDataSource(
@BackgroundExecutor ListeningExecutorService backgroundExecutorService,
- MarkDirtyObserver markDirtyObserver) {
+ MarkDirtyObserver markDirtyObserver,
+ @Unencrypted SharedPreferences sharedPreferences,
+ AnnotatedCallLogDatabaseHelper annotatedCallLogDatabaseHelper) {
this.backgroundExecutorService = backgroundExecutorService;
this.markDirtyObserver = markDirtyObserver;
+ this.sharedPreferences = sharedPreferences;
+ this.annotatedCallLogDatabaseHelper = annotatedCallLogDatabaseHelper;
}
@MainThread
@@ -125,8 +135,24 @@ public class SystemCallLogDataSource implements CallLogDataSource {
}
@Override
+ public ListenableFuture<Void> clearData() {
+ ListenableFuture<Void> deleteSharedPref =
+ backgroundExecutorService.submit(
+ () -> {
+ sharedPreferences.edit().remove(PREF_LAST_TIMESTAMP_PROCESSED).apply();
+ return null;
+ });
+
+ // TODO(zachh): Test re-enabling after deleting database like this.
+ return Futures.transform(
+ Futures.allAsList(deleteSharedPref, annotatedCallLogDatabaseHelper.delete()),
+ unused -> null,
+ MoreExecutors.directExecutor());
+ }
+
+ @Override
public ListenableFuture<Boolean> isDirty(Context appContext) {
- return backgroundExecutorService.submit(() -> isDirtyInternal(appContext));
+ return backgroundExecutorService.submit(this::isDirtyInternal);
}
@Override
@@ -136,11 +162,11 @@ public class SystemCallLogDataSource implements CallLogDataSource {
@Override
public ListenableFuture<Void> onSuccessfulFill(Context appContext) {
- return backgroundExecutorService.submit(() -> onSuccessfulFillInternal(appContext));
+ return backgroundExecutorService.submit(this::onSuccessfulFillInternal);
}
@WorkerThread
- private boolean isDirtyInternal(Context appContext) {
+ private boolean isDirtyInternal() {
Assert.isWorkerThread();
/*
@@ -151,9 +177,7 @@ public class SystemCallLogDataSource implements CallLogDataSource {
*
* Just return false unless the table has never been written to.
*/
- return !StorageComponent.get(appContext)
- .unencryptedSharedPrefs()
- .contains(PREF_LAST_TIMESTAMP_PROCESSED);
+ return !sharedPreferences.contains(PREF_LAST_TIMESTAMP_PROCESSED);
}
@WorkerThread
@@ -183,11 +207,10 @@ public class SystemCallLogDataSource implements CallLogDataSource {
}
@WorkerThread
- private Void onSuccessfulFillInternal(Context appContext) {
+ private Void onSuccessfulFillInternal() {
// If a fill operation was a no-op, lastTimestampProcessed could still be null.
if (lastTimestampProcessed != null) {
- StorageComponent.get(appContext)
- .unencryptedSharedPrefs()
+ sharedPreferences
.edit()
.putLong(PREF_LAST_TIMESTAMP_PROCESSED, lastTimestampProcessed)
.apply();
@@ -232,10 +255,7 @@ public class SystemCallLogDataSource implements CallLogDataSource {
@TargetApi(Build.VERSION_CODES.M) // Uses try-with-resources
private void handleInsertsAndUpdates(
Context appContext, CallLogMutations mutations, Set<Long> existingAnnotatedCallLogIds) {
- long previousTimestampProcessed =
- StorageComponent.get(appContext)
- .unencryptedSharedPrefs()
- .getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
+ long previousTimestampProcessed = sharedPreferences.getLong(PREF_LAST_TIMESTAMP_PROCESSED, 0L);
DialerPhoneNumberUtil dialerPhoneNumberUtil =
new DialerPhoneNumberUtil(PhoneNumberUtil.getInstance());