1 /*
2  * Copyright (C) 2016 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except
5  * in compliance with the License. You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software distributed under the License
10  * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express
11  * or implied. See the License for the specific language governing permissions and limitations under
12  * the License.
13  */
14 
15 package com.android.dialer.logging;
16 
17 import android.app.Activity;
18 import android.widget.QuickContactBadge;
19 import com.google.auto.value.AutoValue;
20 import java.util.Collection;
21 
22 /** Allows the container application to gather analytics. */
23 public interface LoggingBindings {
24 
25   /**
26    * Logs an DialerImpression event that's not associated with a specific call.
27    *
28    * @param dialerImpression an integer representing what event occurred.
29    */
logImpression(DialerImpression.Type dialerImpression)30   void logImpression(DialerImpression.Type dialerImpression);
31 
32   /**
33    * Logs an impression for a general dialer event that's not associated with a specific call.
34    *
35    * @param dialerImpression an integer representing what event occurred.
36    */
37   @Deprecated
logImpression(int dialerImpression)38   void logImpression(int dialerImpression);
39 
40   /**
41    * Logs an impression for a general dialer event that's associated with a specific call.
42    *
43    * @param dialerImpression an integer representing what event occurred.
44    * @param callId unique ID of the call.
45    * @param callStartTimeMillis the absolute time when the call started.
46    */
logCallImpression( DialerImpression.Type dialerImpression, String callId, long callStartTimeMillis)47   void logCallImpression(
48       DialerImpression.Type dialerImpression, String callId, long callStartTimeMillis);
49 
50   /**
51    * Logs an interaction that occurred.
52    *
53    * @param interaction an integer representing what interaction occurred.
54    * @see com.android.dialer.logging.InteractionEvent
55    */
logInteraction(InteractionEvent.Type interaction)56   void logInteraction(InteractionEvent.Type interaction);
57 
58   /**
59    * Logs an event indicating that a screen was displayed.
60    *
61    * @param screenEvent an integer representing the displayed screen.
62    * @param activity Parent activity of the displayed screen.
63    * @see com.android.dialer.logging.ScreenEvent
64    */
logScreenView(com.android.dialer.logging.ScreenEvent.Type screenEvent, Activity activity)65   void logScreenView(com.android.dialer.logging.ScreenEvent.Type screenEvent, Activity activity);
66 
67   /** Logs the composition of contact tiles in the speed dial tab. */
logSpeedDialContactComposition( int counter, int starredContactsCount, int pinnedContactsCount, int multipleNumbersContactsCount, int contactsWithPhotoCount, int contactsWithNameCount, int lightbringerReachableContactsCount)68   void logSpeedDialContactComposition(
69       int counter,
70       int starredContactsCount,
71       int pinnedContactsCount,
72       int multipleNumbersContactsCount,
73       int contactsWithPhotoCount,
74       int contactsWithNameCount,
75       int lightbringerReachableContactsCount);
76 
77   /** Logs a hit event to the analytics server. */
sendHitEventAnalytics(String category, String action, String label, long value)78   void sendHitEventAnalytics(String category, String action, String label, long value);
79 
80   /** Logs where a quick contact badge is clicked */
logQuickContactOnTouch( QuickContactBadge quickContact, InteractionEvent.Type interactionEvent, boolean shouldPerformClick)81   void logQuickContactOnTouch(
82       QuickContactBadge quickContact,
83       InteractionEvent.Type interactionEvent,
84       boolean shouldPerformClick);
85 
86   /** Logs People Api lookup result with error */
logPeopleApiLookupReportWithError( long latency, int httpResponseCode, PeopleApiLookupError.Type errorType)87   void logPeopleApiLookupReportWithError(
88       long latency, int httpResponseCode, PeopleApiLookupError.Type errorType);
89 
90   /** Logs successful People Api lookup result */
logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode)91   void logSuccessfulPeopleApiLookupReport(long latency, int httpResponseCode);
92 
93   /** Logs a call auto-blocked in call screening. */
logAutoBlockedCall(String phoneNumber)94   void logAutoBlockedCall(String phoneNumber);
95 
96   /** Logs annotated call log metrics. */
logAnnotatedCallLogMetrics(int invalidNumbersInCallLog)97   void logAnnotatedCallLogMetrics(int invalidNumbersInCallLog);
98 
99   /** Logs annotated call log metrics. */
logAnnotatedCallLogMetrics(int numberRowsThatDidPop, int numberRowsThatDidNotPop)100   void logAnnotatedCallLogMetrics(int numberRowsThatDidPop, int numberRowsThatDidNotPop);
101 
102   /** Logs contacts provider metrics. */
logContactsProviderMetrics(Collection<ContactsProviderMatchInfo> matchInfos)103   void logContactsProviderMetrics(Collection<ContactsProviderMatchInfo> matchInfos);
104 
105   /** Input type for {@link #logContactsProviderMetrics(Collection)}. */
106   @AutoValue
107   abstract class ContactsProviderMatchInfo {
matchedContact()108     public abstract boolean matchedContact();
109 
inputNumberValid()110     public abstract boolean inputNumberValid();
111 
inputNumberLength()112     public abstract int inputNumberLength();
113 
matchedNumberLength()114     public abstract int matchedNumberLength();
115 
inputNumberHasPostdialDigits()116     public abstract boolean inputNumberHasPostdialDigits();
117 
matchedNumberHasPostdialDigits()118     public abstract boolean matchedNumberHasPostdialDigits();
119 
builder()120     public static Builder builder() {
121       return new AutoValue_LoggingBindings_ContactsProviderMatchInfo.Builder()
122           .setMatchedContact(false)
123           .setMatchedNumberLength(0)
124           .setMatchedNumberHasPostdialDigits(false);
125     }
126 
127     /** Builder. */
128     @AutoValue.Builder
129     public abstract static class Builder {
setMatchedContact(boolean value)130       public abstract Builder setMatchedContact(boolean value);
131 
setInputNumberValid(boolean value)132       public abstract Builder setInputNumberValid(boolean value);
133 
setInputNumberLength(int value)134       public abstract Builder setInputNumberLength(int value);
135 
setMatchedNumberLength(int value)136       public abstract Builder setMatchedNumberLength(int value);
137 
setInputNumberHasPostdialDigits(boolean value)138       public abstract Builder setInputNumberHasPostdialDigits(boolean value);
139 
setMatchedNumberHasPostdialDigits(boolean value)140       public abstract Builder setMatchedNumberHasPostdialDigits(boolean value);
141 
build()142       public abstract ContactsProviderMatchInfo build();
143     }
144   }
145 }
146