From 2482c0fc58034e01efb7ce7e67408e248f028c95 Mon Sep 17 00:00:00 2001 From: zachh Date: Tue, 20 Mar 2018 17:08:52 -0700 Subject: Added "clearData" to CallLogDataSource and PhoneLookup interfaces. This is necessary to disable the call log framework via flags. This isn't yet called anywhere. Bug: 74821995 Test: unit PiperOrigin-RevId: 189838957 Change-Id: I926c02c41151528eabc208c874acbfe7897a2f93 --- .../android/dialer/phonelookup/PhoneLookup.java | 6 ++++ .../DialerBlockedNumberPhoneLookup.java | 5 +++ .../SystemBlockedNumberPhoneLookup.java | 5 +++ .../composite/CompositePhoneLookup.java | 11 +++++++ .../cp2/Cp2DefaultDirectoryPhoneLookup.java | 9 +++++ .../cp2/Cp2ExtendedDirectoryPhoneLookup.java | 5 +++ .../database/PhoneLookupDatabaseComponent.java | 38 ++++++++++++++++++++++ .../PhoneLookupHistoryContentProvider.java | 3 +- .../database/PhoneLookupHistoryDatabaseHelper.java | 34 +++++++++++++++++-- .../dialer/phonelookup/spam/SpamPhoneLookup.java | 9 +++++ 10 files changed, 121 insertions(+), 4 deletions(-) create mode 100644 java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java (limited to 'java/com/android/dialer/phonelookup') diff --git a/java/com/android/dialer/phonelookup/PhoneLookup.java b/java/com/android/dialer/phonelookup/PhoneLookup.java index 016a8a854..d4a1ddfbd 100644 --- a/java/com/android/dialer/phonelookup/PhoneLookup.java +++ b/java/com/android/dialer/phonelookup/PhoneLookup.java @@ -88,4 +88,10 @@ public interface PhoneLookup { @MainThread void unregisterContentObservers(Context appContext); + + /** + * Clear any data written by this lookup. This is called when the new call log framework has been + * disabled (because for example there was a problem with it). + */ + ListenableFuture clearData(); } diff --git a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java index 3491070ad..f5a249aed 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/blockednumber/DialerBlockedNumberPhoneLookup.java @@ -182,4 +182,9 @@ public final class DialerBlockedNumberPhoneLookup implements PhoneLookup clearData() { + return Futures.immediateFuture(null); + } } diff --git a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java index def1f017d..e2a90c257 100644 --- a/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/blockednumber/SystemBlockedNumberPhoneLookup.java @@ -186,4 +186,9 @@ public class SystemBlockedNumberPhoneLookup implements PhoneLookup clearData() { + return Futures.immediateFuture(null); + } } diff --git a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java index 4be43dade..365b21883 100644 --- a/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java +++ b/java/com/android/dialer/phonelookup/composite/CompositePhoneLookup.java @@ -230,6 +230,17 @@ public final class CompositePhoneLookup { } } + /** Delegates to sub-lookups' {@link PhoneLookup#clearData()}. */ + public ListenableFuture clearData() { + List> futures = new ArrayList<>(); + for (PhoneLookup phoneLookup : phoneLookups) { + ListenableFuture phoneLookupFuture = phoneLookup.clearData(); + futures.add(phoneLookupFuture); + } + return Futures.transform( + Futures.allAsList(futures), unused -> null, lightweightExecutorService); + } + 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 b023500dc..a5b3b7251 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2DefaultDirectoryPhoneLookup.java @@ -630,6 +630,15 @@ public final class Cp2DefaultDirectoryPhoneLookup implements PhoneLookup clearData() { + return backgroundExecutorService.submit( + () -> { + sharedPreferences.edit().remove(PREF_LAST_TIMESTAMP_PROCESSED).apply(); + return null; + }); + } + /** * 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 873658b05..9110aa71f 100644 --- a/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/cp2/Cp2ExtendedDirectoryPhoneLookup.java @@ -236,4 +236,9 @@ public final class Cp2ExtendedDirectoryPhoneLookup implements PhoneLookup clearData() { + return Futures.immediateFuture(null); + } } diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java b/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java new file mode 100644 index 000000000..e3e416078 --- /dev/null +++ b/java/com/android/dialer/phonelookup/database/PhoneLookupDatabaseComponent.java @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2018 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +package com.android.dialer.phonelookup.database; + +import android.content.Context; +import com.android.dialer.inject.HasRootComponent; +import dagger.Subcomponent; + +/** Dagger component for database package. */ +@Subcomponent +public abstract class PhoneLookupDatabaseComponent { + + public abstract PhoneLookupHistoryDatabaseHelper phoneLookupHistoryDatabaseHelper(); + + public static PhoneLookupDatabaseComponent get(Context context) { + return ((PhoneLookupDatabaseComponent.HasComponent) + ((HasRootComponent) context.getApplicationContext()).component()) + .phoneLookupDatabaseComponent(); + } + + /** Used to refer to the root application component. */ + public interface HasComponent { + PhoneLookupDatabaseComponent phoneLookupDatabaseComponent(); + } +} diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java index 1c20b10e9..35d2d4f79 100644 --- a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java +++ b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryContentProvider.java @@ -81,7 +81,8 @@ public class PhoneLookupHistoryContentProvider extends ContentProvider { @Override public boolean onCreate() { - databaseHelper = new PhoneLookupHistoryDatabaseHelper(getContext()); + databaseHelper = + PhoneLookupDatabaseComponent.get(getContext()).phoneLookupHistoryDatabaseHelper(); return true; } diff --git a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java index 43b6f102c..337e467ab 100644 --- a/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java +++ b/java/com/android/dialer/phonelookup/database/PhoneLookupHistoryDatabaseHelper.java @@ -21,13 +21,31 @@ import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import android.os.SystemClock; import com.android.dialer.common.LogUtil; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; +import com.android.dialer.inject.ApplicationContext; import com.android.dialer.phonelookup.database.contract.PhoneLookupHistoryContract.PhoneLookupHistory; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import javax.inject.Inject; +import javax.inject.Singleton; /** {@link SQLiteOpenHelper} for the PhoneLookupHistory database. */ -class PhoneLookupHistoryDatabaseHelper extends SQLiteOpenHelper { +@Singleton +public class PhoneLookupHistoryDatabaseHelper extends SQLiteOpenHelper { - PhoneLookupHistoryDatabaseHelper(Context appContext) { - super(appContext, "phone_lookup_history.db", null, 1); + private static final String FILENAME = "phone_lookup_history.db"; + + private final Context appContext; + private final ListeningExecutorService backgroundExecutor; + + @Inject + PhoneLookupHistoryDatabaseHelper( + @ApplicationContext Context appContext, + @BackgroundExecutor ListeningExecutorService backgroundExecutor) { + super(appContext, FILENAME, null, 1); + + this.appContext = appContext; + this.backgroundExecutor = backgroundExecutor; } // TODO(zachh): LAST_MODIFIED is no longer read and can be deleted. @@ -62,4 +80,14 @@ class PhoneLookupHistoryDatabaseHelper extends SQLiteOpenHelper { @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} + + /** Closes the database and deletes it. */ + public ListenableFuture delete() { + return backgroundExecutor.submit( + () -> { + close(); + appContext.deleteDatabase(FILENAME); + return null; + }); + } } diff --git a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java index 2a856280b..315f65819 100644 --- a/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java +++ b/java/com/android/dialer/phonelookup/spam/SpamPhoneLookup.java @@ -159,4 +159,13 @@ public final class SpamPhoneLookup implements PhoneLookup { @Override public void unregisterContentObservers(Context appContext) {} + + @Override + public ListenableFuture clearData() { + return backgroundExecutorService.submit( + () -> { + sharedPreferences.edit().remove(PREF_LAST_TIMESTAMP_PROCESSED).apply(); + return null; + }); + } } -- cgit v1.2.3