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.java57
1 files changed, 13 insertions, 44 deletions
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index ee484d95e..6daa5e757 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -20,13 +20,10 @@ import android.Manifest.permission;
import android.annotation.TargetApi;
import android.content.ContentValues;
import android.content.Context;
-import android.database.ContentObserver;
import android.database.Cursor;
-import android.net.Uri;
import android.os.Build;
import android.os.Build.VERSION;
import android.os.Build.VERSION_CODES;
-import android.os.Handler;
import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.VoicemailContract;
@@ -47,11 +44,11 @@ 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.calllog.datasources.util.RowCombiner;
+import com.android.dialer.calllog.observer.MarkDirtyObserver;
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.BackgroundExecutor;
-import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.compat.android.provider.VoicemailCompat;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
import com.android.dialer.storage.StorageComponent;
@@ -79,18 +76,21 @@ public class SystemCallLogDataSource implements CallLogDataSource {
static final String PREF_LAST_TIMESTAMP_PROCESSED = "systemCallLogLastTimestampProcessed";
private final ListeningExecutorService backgroundExecutorService;
+ private final MarkDirtyObserver markDirtyObserver;
@Nullable private Long lastTimestampProcessed;
@Inject
- SystemCallLogDataSource(@BackgroundExecutor ListeningExecutorService backgroundExecutorService) {
+ SystemCallLogDataSource(
+ @BackgroundExecutor ListeningExecutorService backgroundExecutorService,
+ MarkDirtyObserver markDirtyObserver) {
this.backgroundExecutorService = backgroundExecutorService;
+ this.markDirtyObserver = markDirtyObserver;
}
@MainThread
@Override
- public void registerContentObservers(
- Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
+ public void registerContentObservers(Context appContext) {
Assert.isMainThread();
LogUtil.enterBlock("SystemCallLogDataSource.registerContentObservers");
@@ -101,12 +101,13 @@ public class SystemCallLogDataSource implements CallLogDataSource {
}
// TODO(zachh): Need to somehow register observers if user enables permission after launch?
- CallLogObserver callLogObserver =
- new CallLogObserver(ThreadUtil.getUiThreadHandler(), appContext, contentObserverCallbacks);
-
+ // The system call log has a last updated timestamp, but deletes are physical (the "deleted"
+ // column is unused). This means that we can't detect deletes without scanning the entire table,
+ // which would be too slow. So, we just rely on content observers to trigger rebuilds when any
+ // change is made to the system call log.
appContext
.getContentResolver()
- .registerContentObserver(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL, true, callLogObserver);
+ .registerContentObserver(CallLog.Calls.CONTENT_URI_WITH_VOICEMAIL, true, markDirtyObserver);
if (!PermissionsUtil.hasAddVoicemailPermissions(appContext)) {
LogUtil.i("SystemCallLogDataSource.registerContentObservers", "no add voicemail permissions");
@@ -115,7 +116,7 @@ public class SystemCallLogDataSource implements CallLogDataSource {
// TODO(uabdullah): Need to somehow register observers if user enables permission after launch?
appContext
.getContentResolver()
- .registerContentObserver(VoicemailContract.Status.CONTENT_URI, true, callLogObserver);
+ .registerContentObserver(VoicemailContract.Status.CONTENT_URI, true, markDirtyObserver);
}
@Override
@@ -523,36 +524,4 @@ public class SystemCallLogDataSource implements CallLogDataSource {
}
return ids;
}
-
- private static class CallLogObserver extends ContentObserver {
- private final Context appContext;
- private final ContentObserverCallbacks contentObserverCallbacks;
-
- CallLogObserver(
- Handler handler, Context appContext, ContentObserverCallbacks contentObserverCallbacks) {
- super(handler);
- this.appContext = appContext;
- this.contentObserverCallbacks = contentObserverCallbacks;
- }
-
- @MainThread
- @Override
- public void onChange(boolean selfChange, Uri uri) {
- Assert.isMainThread();
- LogUtil.i(
- "SystemCallLogDataSource.CallLogObserver.onChange",
- "Uri:%s, SelfChange:%b",
- String.valueOf(uri),
- selfChange);
- super.onChange(selfChange, uri);
-
- /*
- * The system call log has a last updated timestamp, but deletes are physical (the "deleted"
- * column is unused). This means that we can't detect deletes without scanning the entire
- * table, which would be too slow. So, we just rely on content observers to trigger rebuilds
- * when any change is made to the system call log.
- */
- contentObserverCallbacks.markDirtyAndNotify(appContext);
- }
- }
}