From 0d9701531f3e1d68b13e460e8cf6197ad8f6b619 Mon Sep 17 00:00:00 2001 From: zachh Date: Fri, 23 Feb 2018 18:24:16 -0800 Subject: Track initial call log building metrics separately from incremental building metrics. This required creating "CallLogState" which is currently just a boolean value which can only be turned on once (when the annotated call log flow finishes for the first time). This CL also changes CompositePhoneLookup to no longer implement PhoneLookup. This was done to support a now reverted implementation of CallLogState but it's easier for me to keep the change and it shouldn't be harmful. Bug: 70989667 Test: unit PiperOrigin-RevId: 186852257 Change-Id: I3f342737aaf909f8230b8a69d9c21e6e5c19b84e --- java/com/android/dialer/calllog/CallLogState.java | 67 +++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 java/com/android/dialer/calllog/CallLogState.java (limited to 'java/com/android/dialer/calllog/CallLogState.java') diff --git a/java/com/android/dialer/calllog/CallLogState.java b/java/com/android/dialer/calllog/CallLogState.java new file mode 100644 index 000000000..bdb30a769 --- /dev/null +++ b/java/com/android/dialer/calllog/CallLogState.java @@ -0,0 +1,67 @@ +/* + * 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.calllog; + +import android.content.SharedPreferences; +import android.support.annotation.AnyThread; +import android.support.annotation.VisibleForTesting; +import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor; +import com.android.dialer.storage.Unencrypted; +import com.google.common.util.concurrent.ListenableFuture; +import com.google.common.util.concurrent.ListeningExecutorService; +import javax.annotation.concurrent.ThreadSafe; +import javax.inject.Inject; + +/** Provides information about the state of the annotated call log. */ +@ThreadSafe +public final class CallLogState { + + private static final String ANNOTATED_CALL_LOG_BUILT_PREF = "annotated_call_log_built"; + + private final SharedPreferences sharedPreferences; + private final ListeningExecutorService backgroundExecutor; + + @VisibleForTesting + @Inject + public CallLogState( + @Unencrypted SharedPreferences sharedPreferences, + @BackgroundExecutor ListeningExecutorService backgroundExecutor) { + this.sharedPreferences = sharedPreferences; + this.backgroundExecutor = backgroundExecutor; + } + + /** + * Mark the call log as having been built. This is written to disk the first time the annotated + * call log has been built and shouldn't ever be reset unless the user clears data. + */ + @AnyThread + public void markBuilt() { + sharedPreferences.edit().putBoolean(ANNOTATED_CALL_LOG_BUILT_PREF, true).apply(); + } + + /** + * Returns true if the annotated call log has been built at least once. + * + *

It may not yet have been built if the user was just upgraded to the new call log, or they + * just cleared data. + */ + @AnyThread + public ListenableFuture isBuilt() { + return backgroundExecutor.submit( + () -> sharedPreferences.getBoolean(ANNOTATED_CALL_LOG_BUILT_PREF, false)); + } +} -- cgit v1.2.3