diff options
author | linyuh <linyuh@google.com> | 2018-02-21 09:53:13 -0800 |
---|---|---|
committer | Eric Erfanian <erfanian@google.com> | 2018-02-22 21:11:32 +0000 |
commit | 9e3a39d9427525684d9c106587a5fa077b110812 (patch) | |
tree | dd2e72e4f8b94d53014a538492467cf6f0eb753a | |
parent | f94391034e9d591c18d04c0b796d944938201f6a (diff) |
Make MarkDirtyObserver available to all call log data sources & PhoneLookups.
Bug: 73347270
Test: Existing tests
PiperOrigin-RevId: 186475562
Change-Id: I622b52f4d74b26fd084b6588da6321c46458aa9d
-rw-r--r-- | java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java | 54 | ||||
-rw-r--r-- | java/com/android/dialer/calllog/observer/MarkDirtyObserver.java (renamed from java/com/android/dialer/phonelookup/blockednumber/MarkDirtyObserver.java) | 13 | ||||
-rw-r--r-- | java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java | 1 | ||||
-rw-r--r-- | java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java | 1 |
4 files changed, 20 insertions, 49 deletions
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java index e9f7c00bf..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,12 +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.notifier.RefreshAnnotatedCallLogNotifier; +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; @@ -80,16 +76,16 @@ public class SystemCallLogDataSource implements CallLogDataSource { static final String PREF_LAST_TIMESTAMP_PROCESSED = "systemCallLogLastTimestampProcessed"; private final ListeningExecutorService backgroundExecutorService; - private final RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier; + private final MarkDirtyObserver markDirtyObserver; @Nullable private Long lastTimestampProcessed; @Inject SystemCallLogDataSource( @BackgroundExecutor ListeningExecutorService backgroundExecutorService, - RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier) { + MarkDirtyObserver markDirtyObserver) { this.backgroundExecutorService = backgroundExecutorService; - this.refreshAnnotatedCallLogNotifier = refreshAnnotatedCallLogNotifier; + this.markDirtyObserver = markDirtyObserver; } @MainThread @@ -105,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(), refreshAnnotatedCallLogNotifier); - + // 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"); @@ -119,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 @@ -527,35 +524,4 @@ public class SystemCallLogDataSource implements CallLogDataSource { } return ids; } - - // TODO(a bug): Consider replacing it with MarkDirtyObserver. - private static class CallLogObserver extends ContentObserver { - private final RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier; - - CallLogObserver( - Handler handler, RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier) { - super(handler); - this.refreshAnnotatedCallLogNotifier = refreshAnnotatedCallLogNotifier; - } - - @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. - */ - refreshAnnotatedCallLogNotifier.markDirtyAndNotify(); - } - } } diff --git a/java/com/android/dialer/phonelookup/blockednumber/MarkDirtyObserver.java b/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java index 9f72ba48b..8ab1974bc 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/MarkDirtyObserver.java +++ b/java/com/android/dialer/calllog/observer/MarkDirtyObserver.java @@ -14,11 +14,12 @@ * limitations under the License */ -package com.android.dialer.phonelookup.blockednumber; +package com.android.dialer.calllog.observer; import android.database.ContentObserver; import android.net.Uri; import android.support.annotation.MainThread; +import android.support.annotation.VisibleForTesting; import com.android.dialer.calllog.notifier.RefreshAnnotatedCallLogNotifier; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; @@ -29,13 +30,13 @@ import javax.inject.Inject; * Mark the annotated call log as dirty and notify that a refresh is in order when the content * changes. */ -// TODO(a bug): Consider making this class available to all data sources and PhoneLookups. -class MarkDirtyObserver extends ContentObserver { +public final class MarkDirtyObserver extends ContentObserver { private final RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier; + @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) @Inject - MarkDirtyObserver(RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier) { + public MarkDirtyObserver(RefreshAnnotatedCallLogNotifier refreshAnnotatedCallLogNotifier) { super(ThreadUtil.getUiThreadHandler()); this.refreshAnnotatedCallLogNotifier = refreshAnnotatedCallLogNotifier; } @@ -44,7 +45,9 @@ class MarkDirtyObserver extends ContentObserver { @Override public void onChange(boolean selfChange, Uri uri) { Assert.isMainThread(); - LogUtil.enterBlock("SystemBlockedNumberPhoneLookup.FilteredNumberObserver.onChange"); + LogUtil.i( + "MarkDirtyObserver.onChange", "Uri:%s, SelfChange:%b", String.valueOf(uri), selfChange); + refreshAnnotatedCallLogNotifier.markDirtyAndNotify(); } } diff --git a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java index 2d019c8c2..b6b02e135 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java @@ -22,6 +22,7 @@ import android.support.annotation.WorkerThread; import android.util.ArraySet; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.blocking.FilteredNumberCompat; +import com.android.dialer.calllog.observer.MarkDirtyObserver; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java index f35b3e131..d791e9b9e 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java @@ -27,6 +27,7 @@ import android.support.annotation.WorkerThread; import android.util.ArraySet; import com.android.dialer.DialerPhoneNumber; import com.android.dialer.blocking.FilteredNumberCompat; +import com.android.dialer.calllog.observer.MarkDirtyObserver; import com.android.dialer.common.Assert; import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; |