summaryrefslogtreecommitdiffstats
path: root/java/com/android/dialer/spam/Spam.java
blob: 5924d56ab479767c41286b05b0ae647b52ccf068 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
/*
 * Copyright (C) 2016 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.spam;

import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import com.android.dialer.DialerPhoneNumber;
import com.android.dialer.logging.ContactLookupResult;
import com.android.dialer.logging.ContactSource;
import com.android.dialer.logging.ReportingLocation;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.ListenableFuture;

/** Allows the container application to mark calls as spam. */
public interface Spam {

  boolean isSpamEnabled();

  boolean isSpamNotificationEnabled();

  boolean isDialogEnabledForSpamNotification();

  boolean isDialogReportSpamCheckedByDefault();

  /** @return what percentage of aftercall notifications to show to the user */
  int percentOfSpamNotificationsToShow();

  int percentOfNonSpamNotificationsToShow();

  /**
   * Checks if each of numbers in the given list is suspected of being a spam.
   *
   * @param dialerPhoneNumbers A set of {@link DialerPhoneNumber}.
   * @return A {@link ListenableFuture} of a map that maps each number to its {@link SpamStatus}.
   */
  ListenableFuture<ImmutableMap<DialerPhoneNumber, SpamStatus>> batchCheckSpamStatus(
      ImmutableSet<DialerPhoneNumber> dialerPhoneNumbers);

  /**
   * Checks if the given number is suspected of being a spam.
   *
   * @param number The phone number of the call.
   * @param countryIso The country ISO of the call.
   * @param listener The callback to be invoked after {@code Info} is fetched.
   */
  void checkSpamStatus(String number, String countryIso, Listener listener);

  /**
   * @param number The number to check if the number is in the user's white list (non spam list)
   * @param countryIso The country ISO of the call.
   * @param listener The callback to be invoked after {@code Info} is fetched.
   */
  void checkUserMarkedNonSpamStatus(
      String number, @Nullable String countryIso, @NonNull Listener listener);

  /**
   * @param number The number to check if it is in user's spam list
   * @param countryIso The country ISO of the call.
   * @param listener The callback to be invoked after {@code Info} is fetched.
   */
  void checkUserMarkedSpamStatus(
      String number, @Nullable String countryIso, @NonNull Listener listener);

  /**
   * @param number The number to check if it is in the global spam list
   * @param countryIso The country ISO of the call.
   * @param listener The callback to be invoked after {@code Info} is fetched.
   */
  void checkGlobalSpamListStatus(
      String number, @Nullable String countryIso, @NonNull Listener listener);

  /**
   * Synchronously checks if the given number is suspected of being a spamer.
   *
   * @param number The phone number of the call.
   * @param countryIso The country ISO of the call.
   * @return True if the number is spam.
   */
  boolean checkSpamStatusSynchronous(String number, String countryIso);

  /**
   * Returns a {@link ListenableFuture} indicating whether the spam data have been updated since
   * {@code timestampMillis}.
   *
   * <p>It is the caller's responsibility to ensure the timestamp is in milliseconds. Failure to do
   * so will result in undefined behavior.
   */
  ListenableFuture<Boolean> dataUpdatedSince(long timestampMillis);

  /**
   * Reports number as spam.
   *
   * @param number The number to be reported.
   * @param countryIso The country ISO of the number.
   * @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
   *     android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
   * @param from Where in the dialer this was reported from. Must be one of {@link
   *     com.android.dialer.logging.ReportingLocation}.
   * @param contactLookupResultType The result of the contact lookup for this phone number. Must be
   *     one of {@link com.android.dialer.logging.ContactLookupResult}.
   */
  void reportSpamFromAfterCallNotification(
      String number,
      String countryIso,
      int callType,
      ReportingLocation.Type from,
      ContactLookupResult.Type contactLookupResultType);

  /**
   * Reports number as spam.
   *
   * @param number The number to be reported.
   * @param countryIso The country ISO of the number.
   * @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
   *     android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
   * @param from Where in the dialer this was reported from. Must be one of {@link
   *     com.android.dialer.logging.ReportingLocation}.
   * @param contactSourceType If we have cached contact information for the phone number, this
   *     indicates its source. Must be one of {@link com.android.dialer.logging.ContactSource}.
   */
  void reportSpamFromCallHistory(
      String number,
      String countryIso,
      int callType,
      ReportingLocation.Type from,
      ContactSource.Type contactSourceType);

  /**
   * Reports number as not spam.
   *
   * @param number The number to be reported.
   * @param countryIso The country ISO of the number.
   * @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
   *     android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
   * @param from Where in the dialer this was reported from. Must be one of {@link
   *     com.android.dialer.logging.ReportingLocation}.
   * @param contactLookupResultType The result of the contact lookup for this phone number. Must be
   *     one of {@link com.android.dialer.logging.ContactLookupResult}.
   */
  void reportNotSpamFromAfterCallNotification(
      String number,
      String countryIso,
      int callType,
      ReportingLocation.Type from,
      ContactLookupResult.Type contactLookupResultType);

  /**
   * Reports number as not spam.
   *
   * @param number The number to be reported.
   * @param countryIso The country ISO of the number.
   * @param callType Whether the type of call is missed, voicemail, etc. Example of this is {@link
   *     android.provider.CallLog.Calls#VOICEMAIL_TYPE}.
   * @param from Where in the dialer this was reported from. Must be one of {@link
   *     com.android.dialer.logging.ReportingLocation}.
   * @param contactSourceType If we have cached contact information for the phone number, this
   *     indicates its source. Must be one of {@link com.android.dialer.logging.ContactSource}.
   */
  void reportNotSpamFromCallHistory(
      String number,
      String countryIso,
      int callType,
      ReportingLocation.Type from,
      ContactSource.Type contactSourceType);

  /** Callback to be invoked when data is fetched. */
  interface Listener {

    /** Called when data is fetched. */
    void onComplete(boolean isSpam);
  }
}