Added unregisterContentResolvers() to CallLogDataSource and PhoneLookup.

This is needed to support flag changes which should cause the call log framework to become disabled.

It's not called anywhere yet.

Bug: 74821995
Test: unit
PiperOrigin-RevId: 189761665
Change-Id: I914c690448f03ebacd7d05c9ad082aba7bf1a4ce
diff --git a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
index dbed1d8..03a5716 100644
--- a/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/CallLogDataSource.java
@@ -105,4 +105,7 @@
 
   @MainThread
   void registerContentObservers(Context appContext);
+
+  @MainThread
+  void unregisterContentObservers(Context appContext);
 }
diff --git a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
index ff8c931..40b0090 100644
--- a/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/phonelookup/PhoneLookupDataSource.java
@@ -294,6 +294,11 @@
     compositePhoneLookup.registerContentObservers(appContext);
   }
 
+  @Override
+  public void unregisterContentObservers(Context appContext) {
+    compositePhoneLookup.unregisterContentObservers(appContext);
+  }
+
   private static ImmutableSet<DialerPhoneNumber>
       queryDistinctDialerPhoneNumbersFromAnnotatedCallLog(Context appContext) {
     ImmutableSet.Builder<DialerPhoneNumber> numbers = ImmutableSet.builder();
diff --git a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
index 6daa5e7..3c34fa6 100644
--- a/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/systemcalllog/SystemCallLogDataSource.java
@@ -120,6 +120,11 @@
   }
 
   @Override
+  public void unregisterContentObservers(Context appContext) {
+    appContext.getContentResolver().unregisterContentObserver(markDirtyObserver);
+  }
+
+  @Override
   public ListenableFuture<Boolean> isDirty(Context appContext) {
     return backgroundExecutorService.submit(() -> isDirtyInternal(appContext));
   }
diff --git a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
index e8dc3e1..86f3d47 100644
--- a/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
+++ b/java/com/android/dialer/calllog/datasources/voicemail/VoicemailDataSource.java
@@ -108,4 +108,7 @@
 
   @Override
   public void registerContentObservers(Context appContext) {}
+
+  @Override
+  public void unregisterContentObservers(Context appContext) {}
 }
diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java
index a7974ad..016a8a8 100644
--- a/java/com/android/dialer/phonelookup/PhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/PhoneLookup.java
@@ -85,4 +85,7 @@
 
   @MainThread
   void registerContentObservers(Context appContext);
+
+  @MainThread
+  void unregisterContentObservers(Context appContext);
 }
diff --git a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java
index b6b02e1..3491070 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java
@@ -177,4 +177,9 @@
             true, // FilteredNumberProvider notifies on the item
             markDirtyObserver);
   }
+
+  @Override
+  public void unregisterContentObservers(Context appContext) {
+    appContext.getContentResolver().unregisterContentObserver(markDirtyObserver);
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
index d791e9b..def1f01 100644
--- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java
@@ -181,4 +181,9 @@
             true, // BlockedNumbers notifies on the item
             markDirtyObserver);
   }
+
+  @Override
+  public void unregisterContentObservers(Context appContext) {
+    appContext.getContentResolver().unregisterContentObserver(markDirtyObserver);
+  }
 }
diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
index 0d84a2e..4be43da 100644
--- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java
@@ -222,6 +222,14 @@
     }
   }
 
+  /** Delegates to sub-lookups' {@link PhoneLookup#unregisterContentObservers(Context)}. */
+  @MainThread
+  public void unregisterContentObservers(Context appContext) {
+    for (PhoneLookup phoneLookup : phoneLookups) {
+      phoneLookup.unregisterContentObservers(appContext);
+    }
+  }
+
   private static String getMostRecentInfoEventName(Object classNameSource, boolean isBuilt) {
     return String.format(
         !isBuilt
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
index a79eb19..b023500 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java
@@ -627,6 +627,9 @@
     // Do nothing since CP2 changes are too noisy.
   }
 
+  @Override
+  public void unregisterContentObservers(Context appContext) {}
+
   /**
    * 1. get all contact ids. if the id is unset, add the number to the list of contacts to look up.
    * 2. reduce our list of contact ids to those that were updated after lastModified. 3. Now we have
diff --git a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
index 519ec5f..873658b 100644
--- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java
@@ -233,4 +233,7 @@
     // For contacts in local (but not default) directories (e.g., the local work directory), we
     // don't register a content observer for now.
   }
+
+  @Override
+  public void unregisterContentObservers(Context appContext) {}
 }
diff --git a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
index 7661a15..2a85628 100644
--- a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
+++ b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java
@@ -156,4 +156,7 @@
     // No content observer can be registered as Spam is not based on a content provider.
     // Each Spam implementation should be responsible for notifying any data changes.
   }
+
+  @Override
+  public void unregisterContentObservers(Context appContext) {}
 }