From 682daf24a5733d66c384e8aa854de01fa5b3844e Mon Sep 17 00:00:00 2001 From: zachh Date: Wed, 21 Mar 2018 14:37:13 -0700 Subject: Enable and disable the call log framework on flag changes. Bug: 74821995 Test: unit PiperOrigin-RevId: 189969399 Change-Id: I8e287cc7884dde7640721bd385fe383a4635f3c8 --- .../android/dialer/calllog/CallLogFramework.java | 38 +++++++++++++++++++--- 1 file changed, 34 insertions(+), 4 deletions(-) (limited to 'java/com/android/dialer/calllog/CallLogFramework.java') diff --git a/java/com/android/dialer/calllog/CallLogFramework.java b/java/com/android/dialer/calllog/CallLogFramework.java index 61535e606..365e4d7c0 100644 --- a/java/com/android/dialer/calllog/CallLogFramework.java +++ b/java/com/android/dialer/calllog/CallLogFramework.java @@ -21,6 +21,12 @@ import com.android.dialer.calllog.datasources.CallLogDataSource; import com.android.dialer.calllog.datasources.DataSources; import com.android.dialer.common.LogUtil; import com.android.dialer.configprovider.ConfigProviderBindings; +import com.android.dialer.inject.ApplicationContext; +import com.google.common.util.concurrent.Futures; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.MoreExecutors; +import java.util.ArrayList; +import java.util.List; import javax.inject.Inject; import javax.inject.Singleton; @@ -32,21 +38,23 @@ import javax.inject.Singleton; @Singleton public final class CallLogFramework { + private final Context appContext; private final DataSources dataSources; @Inject - CallLogFramework(DataSources dataSources) { + CallLogFramework(@ApplicationContext Context appContext, DataSources dataSources) { + this.appContext = appContext; this.dataSources = dataSources; } /** Performs necessary setup work when the application is created. */ - public void onApplicationCreate(Context appContext) { - registerContentObservers(appContext); + public void onApplicationCreate() { + registerContentObservers(); CallLogConfig.schedulePollingJob(appContext); } /** Registers the content observers for all data sources. */ - public void registerContentObservers(Context appContext) { + public void registerContentObservers() { LogUtil.enterBlock("CallLogFramework.registerContentObservers"); // This is the same condition used in MainImpl#isNewUiEnabled. It means that bugfood/debug @@ -61,4 +69,26 @@ public final class CallLogFramework { LogUtil.i("CallLogFramework.registerContentObservers", "not registering content observers"); } } + + /** Disables the framework. */ + public ListenableFuture disable() { + LogUtil.enterBlock("CallLogFramework.disable"); + + if (!ConfigProviderBindings.get(appContext).getBoolean("is_nui_shortcut_enabled", false)) { + LogUtil.i("CallLogFramework.disable", "not disabling"); + return Futures.immediateFuture(null); + } + + for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) { + dataSource.unregisterContentObservers(appContext); + } + + // Clear data only after all content observers have been disabled. + List> allFutures = new ArrayList<>(); + for (CallLogDataSource dataSource : dataSources.getDataSourcesIncludingSystemCallLog()) { + allFutures.add(dataSource.clearData()); + } + return Futures.transform( + Futures.allAsList(allFutures), unused -> null, MoreExecutors.directExecutor()); + } } -- cgit v1.2.3