summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/spam
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-05-10 01:14:47 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-05-10 01:14:47 +0000
commitced93f2d22bffce3b4cfb9c3bfce862b385537dd (patch)
tree2b4715070bcf45b8a8395ee0ae5c7fbb0ef8274c /java/com/android/dialer/spam
parentc49c914e53500fc661ec47e365621c9d33e046ca (diff)
parent2f4a0075e9f546514359eda60a24ac9cd49ea80a (diff)
Merge changes Ia54e3421,Id2176e6e,I0311770e,I79f99c34,I8579afff, ...
* changes: Add some annotations that won't influence aosp. Update answer button logic. Hide new after call spam blocking promo behind an additional flag. Allow the TextView for call log primary text to adjust size when recycled. Format callback phone number. Added getLoggingName() to CallLogDataSource and PhoneLookup interfaces. Do not show bubble for outgoing call if it's not a background call. Always fetch status onResume and add logging for voicemail status in OldMainPeer and Place Duo calls with PreCall Creating CallIntent, AutoValue builder, to replace CallIntentBuilder. Set the DisplayNameSource to PHONE in DefaultLookupUriGenerator. Config correct layout boundaries to accommodate long text (call log & bottom sheet) Use info from EmergencyPhoneLookup to render UI for an emergency number. Implement EmergencyPhoneLookup for checking if a number is an emergency number. Add GlobalSpamListStatus and UserSpamListStatus Move SpamStatus classes into subpackage Delete obsolete checkSpamStatus(Listener) API Update callers of checkSpamStatus to use Future based API Fix bug that showing block option for private number. Add a null check for digitsHint. Don't commit fragment transactions if it's not safe. Add ListenableFuture based APIs for checkSpamStatus Pass activity between new call log's adapter/view holder. Replace assert checks with safety checks instead. Add SimpleSpamStatus and use it in FakeSpam and SpamStub Show calls to/from emergency numbers as "Emergency number" in call log & call details
Diffstat (limited to 'java/com/android/dialer/spam')
-rw-r--r--java/com/android/dialer/spam/Spam.java29
-rw-r--r--java/com/android/dialer/spam/SpamComponent.java2
-rw-r--r--java/com/android/dialer/spam/SpamStub.java34
-rw-r--r--java/com/android/dialer/spam/StubSpamModule.java3
-rw-r--r--java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java9
-rw-r--r--java/com/android/dialer/spam/status/GlobalSpamListStatus.java52
-rw-r--r--java/com/android/dialer/spam/status/SimpleSpamStatus.java36
-rw-r--r--java/com/android/dialer/spam/status/SpamStatus.java (renamed from java/com/android/dialer/spam/SpamStatus.java)2
-rw-r--r--java/com/android/dialer/spam/status/UserSpamListStatus.java58
9 files changed, 196 insertions, 29 deletions
diff --git a/java/com/android/dialer/spam/Spam.java b/java/com/android/dialer/spam/Spam.java
index 21d770ed3..181a55dea 100644
--- a/java/com/android/dialer/spam/Spam.java
+++ b/java/com/android/dialer/spam/Spam.java
@@ -24,6 +24,7 @@ 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.android.dialer.spam.status.SpamStatus;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.ListenableFuture;
@@ -41,6 +42,25 @@ public interface Spam {
ImmutableSet<DialerPhoneNumber> dialerPhoneNumbers);
/**
+ * Checks if the given number is suspected of being spam.
+ *
+ * @param dialerPhoneNumber the phone number.
+ * @return the {@link SpamStatus} for the given number.
+ */
+ ListenableFuture<SpamStatus> checkSpamStatus(DialerPhoneNumber dialerPhoneNumber);
+
+ /**
+ * Checks if the given number is suspected of being spam.
+ *
+ * <p>See {@link #checkSpamStatus(DialerPhoneNumber)}.
+ *
+ * @param number the phone number.
+ * @param defaultCountryIso the default country to use if it's not part of the number.
+ * @return the {@link SpamStatus} for the given number.
+ */
+ ListenableFuture<SpamStatus> checkSpamStatus(String number, @Nullable String defaultCountryIso);
+
+ /**
* Called as an indication that the Spam implementation should check whether downloading a spam
* list needs to occur or not.
*
@@ -55,15 +75,6 @@ public interface Spam {
ListenableFuture<Void> updateSpamListDownload(boolean isEnabledByUser);
/**
- * 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.
diff --git a/java/com/android/dialer/spam/SpamComponent.java b/java/com/android/dialer/spam/SpamComponent.java
index 2b70b6fe1..a0ffcce1f 100644
--- a/java/com/android/dialer/spam/SpamComponent.java
+++ b/java/com/android/dialer/spam/SpamComponent.java
@@ -18,6 +18,7 @@ package com.android.dialer.spam;
import android.content.Context;
import com.android.dialer.inject.HasRootComponent;
+import com.android.dialer.inject.IncludeInDialerRoot;
import dagger.Subcomponent;
/** Dagger component to get Spam. */
@@ -35,6 +36,7 @@ public abstract class SpamComponent {
}
/** Used to refer to the root application component. */
+ @IncludeInDialerRoot
public interface HasComponent {
SpamComponent spamComponent();
}
diff --git a/java/com/android/dialer/spam/SpamStub.java b/java/com/android/dialer/spam/SpamStub.java
index 8851fd09e..2789c01e7 100644
--- a/java/com/android/dialer/spam/SpamStub.java
+++ b/java/com/android/dialer/spam/SpamStub.java
@@ -16,12 +16,14 @@
package com.android.dialer.spam;
+import android.support.annotation.Nullable;
import com.android.dialer.DialerPhoneNumber;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
import com.android.dialer.logging.ContactLookupResult;
import com.android.dialer.logging.ContactSource;
import com.android.dialer.logging.ReportingLocation;
-import com.google.common.base.Optional;
+import com.android.dialer.spam.status.SimpleSpamStatus;
+import com.android.dialer.spam.status.SpamStatus;
import com.google.common.collect.ImmutableMap;
import com.google.common.collect.ImmutableSet;
import com.google.common.util.concurrent.Futures;
@@ -47,33 +49,27 @@ public class SpamStub implements Spam {
ImmutableMap.Builder<DialerPhoneNumber, SpamStatus> resultBuilder =
new ImmutableMap.Builder<>();
for (DialerPhoneNumber dialerPhoneNumber : dialerPhoneNumbers) {
- resultBuilder.put(
- dialerPhoneNumber,
- new SpamStatus() {
- @Override
- public boolean isSpam() {
- return false;
- }
-
- @Override
- public Optional<Long> getTimestampMillis() {
- return Optional.absent();
- }
- });
+ resultBuilder.put(dialerPhoneNumber, SimpleSpamStatus.notSpam());
}
return resultBuilder.build();
});
}
@Override
- public ListenableFuture<Void> updateSpamListDownload(boolean isEnabledByUser) {
- // no-op
- return Futures.immediateFuture(null);
+ public ListenableFuture<SpamStatus> checkSpamStatus(DialerPhoneNumber dialerPhoneNumber) {
+ return Futures.immediateFuture(SimpleSpamStatus.notSpam());
}
@Override
- public void checkSpamStatus(String number, String countryIso, Listener listener) {
- listener.onComplete(false);
+ public ListenableFuture<SpamStatus> checkSpamStatus(
+ String number, @Nullable String defaultCountryIso) {
+ return Futures.immediateFuture(SimpleSpamStatus.notSpam());
+ }
+
+ @Override
+ public ListenableFuture<Void> updateSpamListDownload(boolean isEnabledByUser) {
+ // no-op
+ return Futures.immediateFuture(null);
}
@Override
diff --git a/java/com/android/dialer/spam/StubSpamModule.java b/java/com/android/dialer/spam/StubSpamModule.java
index 5540408ad..b60967475 100644
--- a/java/com/android/dialer/spam/StubSpamModule.java
+++ b/java/com/android/dialer/spam/StubSpamModule.java
@@ -16,10 +16,13 @@
package com.android.dialer.spam;
+import com.android.dialer.inject.DialerVariant;
+import com.android.dialer.inject.InstallIn;
import dagger.Binds;
import dagger.Module;
/** Module which binds {@link SpamStub}. */
+@InstallIn(variants = {DialerVariant.DIALER_TEST})
@Module
public abstract class StubSpamModule {
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
index a117e1908..42fb39f38 100644
--- a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
+++ b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
@@ -42,6 +42,8 @@ public class SpamBlockingPromoHelper {
static final String SPAM_BLOCKING_PROMO_PERIOD_MILLIS = "spam_blocking_promo_period_millis";
static final String SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS = "spam_blocking_promo_last_show_millis";
public static final String ENABLE_SPAM_BLOCKING_PROMO = "enable_spam_blocking_promo";
+ public static final String ENABLE_AFTER_CALL_SPAM_BLOCKING_PROMO =
+ "enable_after_call_spam_blocking_promo";
private final Context context;
private final SpamSettings spamSettings;
@@ -77,6 +79,13 @@ public class SpamBlockingPromoHelper {
return lastShowMillis == 0 || System.currentTimeMillis() - lastShowMillis > showPeriodMillis;
}
+ /* Returns true if we should show a spam blocking promo in after call notification scenario. */
+ public boolean shouldShowAfterCallSpamBlockingPromo() {
+ return shouldShowSpamBlockingPromo()
+ && ConfigProviderBindings.get(context)
+ .getBoolean(ENABLE_AFTER_CALL_SPAM_BLOCKING_PROMO, false);
+ }
+
/**
* Shows a spam blocking promo dialog.
*
diff --git a/java/com/android/dialer/spam/status/GlobalSpamListStatus.java b/java/com/android/dialer/spam/status/GlobalSpamListStatus.java
new file mode 100644
index 000000000..741d6e869
--- /dev/null
+++ b/java/com/android/dialer/spam/status/GlobalSpamListStatus.java
@@ -0,0 +1,52 @@
+/*
+ * 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.spam.status;
+
+import android.support.annotation.IntDef;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Optional;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** A value class representing a number's spam status in the global spam list. */
+@AutoValue
+public abstract class GlobalSpamListStatus {
+
+ /** Integers representing the spam status in the global spam list. */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({Status.NOT_ON_LIST, Status.ON_LIST})
+ public @interface Status {
+ int NOT_ON_LIST = 1;
+ int ON_LIST = 2;
+ }
+
+ public abstract @Status int getStatus();
+
+ /**
+ * Returns the timestamp (in milliseconds) representing when a number's spam status was put on the
+ * list, or {@code Optional.absent()} if the number is not on the list.
+ */
+ public abstract Optional<Long> getTimestampMillis();
+
+ public static GlobalSpamListStatus notOnList() {
+ return new AutoValue_GlobalSpamListStatus(Status.NOT_ON_LIST, Optional.absent());
+ }
+
+ public static GlobalSpamListStatus onList(long timestampMillis) {
+ return new AutoValue_GlobalSpamListStatus(Status.ON_LIST, Optional.of(timestampMillis));
+ }
+}
diff --git a/java/com/android/dialer/spam/status/SimpleSpamStatus.java b/java/com/android/dialer/spam/status/SimpleSpamStatus.java
new file mode 100644
index 000000000..ec28b9dce
--- /dev/null
+++ b/java/com/android/dialer/spam/status/SimpleSpamStatus.java
@@ -0,0 +1,36 @@
+/*
+ * 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.spam.status;
+
+import android.support.annotation.Nullable;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Optional;
+
+/** Holds a boolean and long to represent spam status. */
+@AutoValue
+public abstract class SimpleSpamStatus implements SpamStatus {
+
+ /** Returns a SimpleSpamStatus with the given boolean and timestamp. */
+ public static SimpleSpamStatus create(boolean isSpam, @Nullable Long timestampMillis) {
+ return new AutoValue_SimpleSpamStatus(isSpam, Optional.fromNullable(timestampMillis));
+ }
+
+ /** Returns a SimpleSpamStatus that's not marked as spam and has no timestamp. */
+ public static SimpleSpamStatus notSpam() {
+ return create(false, null);
+ }
+}
diff --git a/java/com/android/dialer/spam/SpamStatus.java b/java/com/android/dialer/spam/status/SpamStatus.java
index 0b859d1c7..8186ac5cc 100644
--- a/java/com/android/dialer/spam/SpamStatus.java
+++ b/java/com/android/dialer/spam/status/SpamStatus.java
@@ -14,7 +14,7 @@
* limitations under the License
*/
-package com.android.dialer.spam;
+package com.android.dialer.spam.status;
import com.google.common.base.Optional;
diff --git a/java/com/android/dialer/spam/status/UserSpamListStatus.java b/java/com/android/dialer/spam/status/UserSpamListStatus.java
new file mode 100644
index 000000000..01f99872b
--- /dev/null
+++ b/java/com/android/dialer/spam/status/UserSpamListStatus.java
@@ -0,0 +1,58 @@
+/*
+ * 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.spam.status;
+
+import android.support.annotation.IntDef;
+import com.google.auto.value.AutoValue;
+import com.google.common.base.Optional;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+
+/** A value class representing a number's spam status in the user spam list. */
+@AutoValue
+@SuppressWarnings("Guava")
+public abstract class UserSpamListStatus {
+
+ /** Integers representing the spam status in the user spam list. */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef({Status.NOT_ON_LIST, Status.WHITELISTED, Status.BLACKLISTED})
+ public @interface Status {
+ int NOT_ON_LIST = 1;
+ int WHITELISTED = 2;
+ int BLACKLISTED = 3;
+ }
+
+ public abstract @Status int getStatus();
+
+ /**
+ * Returns the timestamp (in milliseconds) representing when a number's spam status was put on the
+ * list, or {@code Optional.absent()} if the number is not on the list.
+ */
+ public abstract Optional<Long> getTimestampMillis();
+
+ public static UserSpamListStatus notOnList() {
+ return new AutoValue_UserSpamListStatus(Status.NOT_ON_LIST, Optional.absent());
+ }
+
+ public static UserSpamListStatus whitelisted(long timestampMillis) {
+ return new AutoValue_UserSpamListStatus(Status.WHITELISTED, Optional.of(timestampMillis));
+ }
+
+ public static UserSpamListStatus blacklisted(long timestampMillis) {
+ return new AutoValue_UserSpamListStatus(Status.BLACKLISTED, Optional.of(timestampMillis));
+ }
+}