Merge changes I380bc932,Ida32182c,I61636776,I7957078a,Id35c3ebf, ...
* changes:
Internal change
Remove @GenerateTestDaggerApp from RCG.
Fix color in RTT call screen.
Updating PhotoInfo and GlidePhotoManager to support conference calls.
Solve BiDi problem when phone number is concatenated with RTL-string
Fix color of primary text on incall screen.
Inlined ConfigProviderBindings.get() and removed ConfigProviderBindings.
Removed isUserUnlocked checks from ConfigProvider.
Add new spam API which can query additional data.
Fix color of name text in call log.
Removed static configProvider field in ConfigProviderBindings.
Change RTT transcript screen to use toolbar.
UI fixes for emergency numbers in the old call log.
Fix title and icon color of action bar.
Update speakEasy colors and use theme_dialer_light
Add new default interface.
Fix missing background color
Also check call configuration for disconnected call
Add toast message when RTT request failed.
Update button color.
Some minor tweaks to the UI.
Fix dialpad theme on incall screen.
Accommodate long call time text in call details.
Fix color of checked button on incall screen.
Use geocode as label for businesses.
Add inject method to generated component by RCG.
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 06f094d..25a6956 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -93,7 +93,7 @@
import com.android.dialer.common.UiUtil;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactsfragment.ContactsFragment;
import com.android.dialer.contactsfragment.ContactsFragment.OnContactSelectedListener;
@@ -367,7 +367,8 @@
super.onCreate(savedInstanceState);
firstLaunch = true;
- isLastTabEnabled = ConfigProviderBindings.get(this).getBoolean("last_tab_enabled", false);
+ isLastTabEnabled =
+ ConfigProviderComponent.get(this).getConfigProvider().getBoolean("last_tab_enabled", false);
final Resources resources = getResources();
actionBarHeight = resources.getDimensionPixelSize(R.dimen.action_bar_height_large);
@@ -1622,6 +1623,8 @@
}
private boolean newFavoritesIsEnabled() {
- return ConfigProviderBindings.get(this).getBoolean("enable_new_favorites_tab", false);
+ return ConfigProviderComponent.get(this)
+ .getConfigProvider()
+ .getBoolean("enable_new_favorites_tab", false);
}
}
diff --git a/java/com/android/dialer/app/calllog/CallLogAdapter.java b/java/com/android/dialer/app/calllog/CallLogAdapter.java
index 143af36..a4479da 100644
--- a/java/com/android/dialer/app/calllog/CallLogAdapter.java
+++ b/java/com/android/dialer/app/calllog/CallLogAdapter.java
@@ -73,7 +73,7 @@
import com.android.dialer.common.concurrent.AsyncTaskExecutor;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
import com.android.dialer.compat.android.provider.VoicemailCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.duo.Duo;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.duo.DuoListener;
@@ -287,7 +287,8 @@
new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
- if (ConfigProviderBindings.get(v.getContext())
+ if (ConfigProviderComponent.get(v.getContext())
+ .getConfigProvider()
.getBoolean(ENABLE_CALL_LOG_MULTI_SELECT, ENABLE_CALL_LOG_MULTI_SELECT_FLAG)
&& voicemailPlaybackPresenter != null) {
if (v.getId() == R.id.primary_action_view || v.getId() == R.id.quick_contact_photo) {
@@ -852,7 +853,9 @@
}
private boolean isHideableEmergencyNumberRow(@Nullable String number) {
- if (!ConfigProviderBindings.get(activity).getBoolean(FILTER_EMERGENCY_CALLS_FLAG, false)) {
+ if (!ConfigProviderComponent.get(activity)
+ .getConfigProvider()
+ .getBoolean(FILTER_EMERGENCY_CALLS_FLAG, false)) {
return false;
}
return number != null && PhoneNumberUtils.isEmergencyNumber(number);
@@ -1058,7 +1061,8 @@
details.countryIso,
details.cachedContactInfo,
position
- < ConfigProviderBindings.get(activity)
+ < ConfigProviderComponent.get(activity)
+ .getConfigProvider()
.getLong("number_of_call_to_do_remote_lookup", 5L));
logCp2Metrics(details, info);
}
diff --git a/java/com/android/dialer/app/calllog/CallLogFragment.java b/java/com/android/dialer/app/calllog/CallLogFragment.java
index 1e55c63..771254e 100644
--- a/java/com/android/dialer/app/calllog/CallLogFragment.java
+++ b/java/com/android/dialer/app/calllog/CallLogFragment.java
@@ -58,7 +58,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.FragmentUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.database.CallLogQueryHandler;
import com.android.dialer.database.CallLogQueryHandler.Listener;
import com.android.dialer.location.GeoUtil;
@@ -297,7 +297,9 @@
protected void setupView(View view) {
recyclerView = (RecyclerView) view.findViewById(R.id.recycler_view);
- if (ConfigProviderBindings.get(getContext()).getBoolean("is_call_log_item_anim_null", false)) {
+ if (ConfigProviderComponent.get(getContext())
+ .getConfigProvider()
+ .getBoolean("is_call_log_item_anim_null", false)) {
recyclerView.setItemAnimator(null);
}
recyclerView.setHasFixedSize(true);
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index 9b7741d..5b579f5 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -69,7 +69,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
@@ -309,7 +309,8 @@
primaryActionButtonView.setOnClickListener(this);
primaryActionView.setOnClickListener(this.expandCollapseListener);
if (this.voicemailPlaybackPresenter != null
- && ConfigProviderBindings.get(this.context)
+ && ConfigProviderComponent.get(this.context)
+ .getConfigProvider()
.getBoolean(
CallLogAdapter.ENABLE_CALL_LOG_MULTI_SELECT,
CallLogAdapter.ENABLE_CALL_LOG_MULTI_SELECT_FLAG)) {
@@ -599,6 +600,29 @@
setUpVideoButtonView.setVisibility(View.GONE);
inviteVideoButtonView.setVisibility(View.GONE);
+ // For an emergency number, show "Call details" only.
+ if (PhoneNumberHelper.isLocalEmergencyNumber(context, number)) {
+ createNewContactButtonView.setVisibility(View.GONE);
+ addToExistingContactButtonView.setVisibility(View.GONE);
+ sendMessageView.setVisibility(View.GONE);
+ callWithNoteButtonView.setVisibility(View.GONE);
+ callComposeButtonView.setVisibility(View.GONE);
+ blockReportView.setVisibility(View.GONE);
+ blockView.setVisibility(View.GONE);
+ unblockView.setVisibility(View.GONE);
+ reportNotSpamView.setVisibility(View.GONE);
+ voicemailPlaybackView.setVisibility(View.GONE);
+
+ detailsButtonView.setVisibility(View.VISIBLE);
+ detailsButtonView.setTag(
+ IntentProvider.getCallDetailIntentProvider(
+ callDetailsEntries,
+ buildContact(),
+ /* canReportCallerId = */ false,
+ /* canSupportAssistedDialing = */ false));
+ return;
+ }
+
if (isFullyUndialableVoicemail()) {
// Sometimes the voicemail server will report the message is from some non phone number
// source. If the number does not contains any dialable digit treat it as it is from a unknown
@@ -687,7 +711,8 @@
videoCallButtonView.setVisibility(View.VISIBLE);
CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
} else if (duo.isActivated(context) && !identifiedSpamCall) {
- if (ConfigProviderBindings.get(context)
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("enable_call_log_duo_invite_button", false)) {
inviteVideoButtonView.setTag(IntentProvider.getDuoInviteIntentProvider(number));
inviteVideoButtonView.setVisibility(View.VISIBLE);
@@ -696,7 +721,8 @@
}
} else if (duo.isEnabled(context) && !identifiedSpamCall) {
if (!duo.isInstalled(context)) {
- if (ConfigProviderBindings.get(context)
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("enable_call_log_install_duo_button", false)) {
setUpVideoButtonView.setTag(IntentProvider.getInstallDuoIntentProvider());
setUpVideoButtonView.setVisibility(View.VISIBLE);
@@ -705,7 +731,8 @@
CallIntentBuilder.increaseLightbringerCallButtonAppearInExpandedCallLogItemCount();
}
} else {
- if (ConfigProviderBindings.get(context)
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("enable_call_log_activate_duo_button", false)) {
setUpVideoButtonView.setTag(IntentProvider.getSetUpDuoIntentProvider());
setUpVideoButtonView.setVisibility(View.VISIBLE);
diff --git a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
index d137029..b5ca090 100644
--- a/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
+++ b/java/com/android/dialer/app/calllog/CallLogNotificationsQueryHelper.java
@@ -39,7 +39,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.database.Selection;
import com.android.dialer.compat.android.provider.VoicemailCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.location.GeoUtil;
import com.android.dialer.phonenumbercache.ContactInfo;
import com.android.dialer.phonenumbercache.ContactInfoHelper;
@@ -167,7 +167,8 @@
return newCallsQuery.query(
Calls.VOICEMAIL_TYPE,
System.currentTimeMillis()
- - ConfigProviderBindings.get(context)
+ - ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(
CONFIG_NEW_VOICEMAIL_NOTIFICATION_THRESHOLD_OFFSET, TimeUnit.DAYS.toMillis(7)));
}
diff --git a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
index 2632fb3..9d04cb2 100644
--- a/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
+++ b/java/com/android/dialer/app/calllog/PhoneCallDetailsHelper.java
@@ -48,6 +48,8 @@
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
import com.android.dialer.logging.ContactSource;
import com.android.dialer.oem.MotorolaUtils;
+import com.android.dialer.phonenumbercache.CachedNumberLookupService;
+import com.android.dialer.phonenumbercache.PhoneNumberCache;
import com.android.dialer.phonenumberutil.PhoneNumberHelper;
import com.android.dialer.spannable.ContentWithLearnMoreSpanner;
import com.android.dialer.storage.StorageComponent;
@@ -76,6 +78,8 @@
private final CallLogCache callLogCache;
/** Calendar used to construct dates */
private final Calendar calendar;
+
+ private final CachedNumberLookupService cachedNumberLookupService;
/** The injected current time in milliseconds since the epoch. Used only by tests. */
private Long currentTimeMillisForTest;
@@ -95,6 +99,7 @@
this.resources = resources;
this.callLogCache = callLogCache;
calendar = Calendar.getInstance();
+ cachedNumberLookupService = PhoneNumberCache.get(context).getCachedNumberLookupService();
}
static boolean shouldShowVoicemailDonationPromo(
@@ -125,7 +130,7 @@
}
/** Returns true if primary name is empty or the data is from Cequint Caller ID. */
- private static boolean shouldShowLocation(PhoneCallDetails details) {
+ private boolean shouldShowLocation(PhoneCallDetails details) {
if (TextUtils.isEmpty(details.geocode)) {
return false;
}
@@ -133,6 +138,11 @@
if (details.sourceType == ContactSource.Type.SOURCE_TYPE_CEQUINT_CALLER_ID) {
return true;
}
+ if (cachedNumberLookupService != null
+ && cachedNumberLookupService.isBusiness(details.sourceType)) {
+ return true;
+ }
+
// Don't bother showing geo location for contacts.
if (!TextUtils.isEmpty(details.namePrimary)) {
return false;
@@ -482,7 +492,6 @@
: Phone.getTypeLabel(resources, details.numberType, details.numberLabel);
}
}
-
if (!TextUtils.isEmpty(details.namePrimary) && TextUtils.isEmpty(numberFormattedLabel)) {
numberFormattedLabel = details.displayNumber;
}
diff --git a/java/com/android/dialer/app/res/layout/call_log_list_item.xml b/java/com/android/dialer/app/res/layout/call_log_list_item.xml
index fd73e0b..c9c1a67 100644
--- a/java/com/android/dialer/app/res/layout/call_log_list_item.xml
+++ b/java/com/android/dialer/app/res/layout/call_log_list_item.xml
@@ -97,7 +97,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/call_log_name_margin_bottom"
android:layout_marginEnd="@dimen/call_log_icon_margin"
- style="Dialer.TextAppearance.Primary.Ellipsize"/>
+ style="@style/Dialer.TextAppearance.Primary.Ellipsize"/>
<LinearLayout
android:id="@+id/call_type"
diff --git a/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml b/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml
index 437fa7d..d5f315e 100644
--- a/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml
+++ b/java/com/android/dialer/app/res/layout/empty_content_view_dialpad_search.xml
@@ -32,7 +32,7 @@
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingBottom="8dp"
- style="Dialer.TextAppearance.Primary.Ellipsize"/>
+ style="@style/Dialer.TextAppearance.Primary.Ellipsize"/>
<TextView
android:id="@+id/empty_list_view_action"
diff --git a/java/com/android/dialer/app/settings/DialerSettingsActivity.java b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
index 6b763ae..9cd01b6 100644
--- a/java/com/android/dialer/app/settings/DialerSettingsActivity.java
+++ b/java/com/android/dialer/app/settings/DialerSettingsActivity.java
@@ -38,7 +38,7 @@
import com.android.dialer.blocking.FilteredNumberCompat;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.proguard.UsedByReflection;
import com.android.dialer.util.PermissionsUtil;
import com.android.dialer.voicemail.settings.VoicemailSettingsFragment;
@@ -160,7 +160,7 @@
boolean isAssistedDialingEnabled =
ConcreteCreator.isAssistedDialingEnabled(
- ConfigProviderBindings.get(getApplicationContext()));
+ ConfigProviderComponent.get(getApplicationContext()).getConfigProvider());
LogUtil.i(
"DialerSettingsActivity.onBuildHeaders",
"showing assisted dialing header: " + isAssistedDialingEnabled);
diff --git a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
index 917870e..e4c075b 100644
--- a/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
+++ b/java/com/android/dialer/app/voicemail/VoicemailPlaybackPresenter.java
@@ -52,7 +52,7 @@
import com.android.dialer.common.concurrent.AsyncTaskExecutors;
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.Constants;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
@@ -870,7 +870,9 @@
}
private static boolean isShareVoicemailAllowed(Context context) {
- return ConfigProviderBindings.get(context).getBoolean(CONFIG_SHARE_VOICEMAIL_ALLOWED, true);
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(CONFIG_SHARE_VOICEMAIL_ALLOWED, true);
}
private static class ShareVoicemailWorker
diff --git a/java/com/android/dialer/assisteddialing/ConcreteCreator.java b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
index dfd28a6..0507743 100644
--- a/java/com/android/dialer/assisteddialing/ConcreteCreator.java
+++ b/java/com/android/dialer/assisteddialing/ConcreteCreator.java
@@ -27,7 +27,7 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.LogUtil;
import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.strictmode.StrictModeUtils;
/**
@@ -55,7 +55,7 @@
public static AssistedDialingMediator createNewAssistedDialingMediator(
@NonNull TelephonyManager telephonyManager, @NonNull Context context) {
- ConfigProvider configProvider = ConfigProviderBindings.get(context);
+ ConfigProvider configProvider = ConfigProviderComponent.get(context).getConfigProvider();
if (telephonyManager == null) {
LogUtil.i(
diff --git a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
index f1ea4c9..965a169 100644
--- a/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
+++ b/java/com/android/dialer/assisteddialing/ui/AssistedDialingSettingFragment.java
@@ -29,7 +29,7 @@
import com.android.dialer.assisteddialing.ConcreteCreator;
import com.android.dialer.assisteddialing.CountryCodeProvider;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.google.auto.value.AutoValue;
@@ -70,7 +70,8 @@
getContext().getSystemService(TelephonyManager.class), getContext());
countryCodeProvider =
- ConcreteCreator.getCountryCodeProvider(ConfigProviderBindings.get(getContext()));
+ ConcreteCreator.getCountryCodeProvider(
+ ConfigProviderComponent.get(getContext()).getConfigProvider());
// Load the preferences from an XML resource
addPreferencesFromResource(R.xml.assisted_dialing_setting);
diff --git a/java/com/android/dialer/blocking/Blocking.java b/java/com/android/dialer/blocking/Blocking.java
index e86d0a6..a1d8b4f 100644
--- a/java/com/android/dialer/blocking/Blocking.java
+++ b/java/com/android/dialer/blocking/Blocking.java
@@ -16,14 +16,27 @@
package com.android.dialer.blocking;
+import android.content.ContentProviderOperation;
+import android.content.ContentProviderResult;
+import android.content.ContentResolver;
import android.content.ContentValues;
import android.content.Context;
+import android.content.OperationApplicationException;
+import android.database.Cursor;
+import android.os.RemoteException;
+import android.provider.BlockedNumberContract;
import android.provider.BlockedNumberContract.BlockedNumbers;
import android.support.annotation.Nullable;
import android.telephony.PhoneNumberUtils;
+import android.util.ArrayMap;
+import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.database.Selection;
+import com.google.common.collect.ImmutableCollection;
+import com.google.common.collect.ImmutableMap;
import com.google.common.util.concurrent.ListenableFuture;
-import com.google.common.util.concurrent.ListeningExecutorService;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
/** Blocks and unblocks number. */
public final class Blocking {
@@ -47,7 +60,7 @@
}
/**
- * Block a number.
+ * Block a list of numbers.
*
* @param countryIso the current location used to guess the country code of the number if not
* available. If {@code null} and {@code number} does not have a country code, only the
@@ -55,29 +68,31 @@
* @throws BlockingFailedException in the returned future if the operation failed.
*/
public static ListenableFuture<Void> block(
- Context context,
- ListeningExecutorService executorService,
- String number,
- @Nullable String countryIso) {
- return executorService.submit(
- () -> {
- ContentValues values = new ContentValues();
- values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, number);
- String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
- if (e164Number != null) {
- values.put(BlockedNumbers.COLUMN_E164_NUMBER, e164Number);
- }
- try {
- context.getContentResolver().insert(BlockedNumbers.CONTENT_URI, values);
- } catch (SecurityException e) {
- throw new BlockingFailedException(e);
- }
- return null;
- });
+ Context context, ImmutableCollection<String> numbers, @Nullable String countryIso) {
+ return DialerExecutorComponent.get(context)
+ .backgroundExecutor()
+ .submit(
+ () -> {
+ ArrayList<ContentProviderOperation> operations = new ArrayList<>();
+ for (String number : numbers) {
+ ContentValues values = new ContentValues();
+ values.put(BlockedNumbers.COLUMN_ORIGINAL_NUMBER, number);
+ String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+ if (e164Number != null) {
+ values.put(BlockedNumbers.COLUMN_E164_NUMBER, e164Number);
+ }
+ operations.add(
+ ContentProviderOperation.newInsert(BlockedNumbers.CONTENT_URI)
+ .withValues(values)
+ .build());
+ }
+ applyBatchOps(context.getContentResolver(), operations);
+ return null;
+ });
}
/**
- * Unblock a number.
+ * Unblock a list of number.
*
* @param countryIso the current location used to guess the country code of the number if not
* available. If {@code null} and {@code number} does not have a country code, only the
@@ -85,33 +100,95 @@
* @throws BlockingFailedException in the returned future if the operation failed.
*/
public static ListenableFuture<Void> unblock(
- Context context,
- ListeningExecutorService executorService,
- String number,
- @Nullable String countryIso) {
- return executorService.submit(
- () -> {
- Selection selection =
- Selection.column(BlockedNumbers.COLUMN_ORIGINAL_NUMBER).is("=", number);
- String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
- if (e164Number != null) {
- selection =
- selection
- .buildUpon()
- .or(Selection.column(BlockedNumbers.COLUMN_E164_NUMBER).is("=", e164Number))
- .build();
- }
- try {
- context
- .getContentResolver()
- .delete(
- BlockedNumbers.CONTENT_URI,
- selection.getSelection(),
- selection.getSelectionArgs());
- } catch (SecurityException e) {
- throw new BlockingFailedException(e);
- }
- return null;
- });
+ Context context, ImmutableCollection<String> numbers, @Nullable String countryIso) {
+ return DialerExecutorComponent.get(context)
+ .backgroundExecutor()
+ .submit(
+ () -> {
+ ArrayList<ContentProviderOperation> operations = new ArrayList<>();
+ for (String number : numbers) {
+ Selection selection =
+ Selection.column(BlockedNumbers.COLUMN_ORIGINAL_NUMBER).is("=", number);
+ String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+ if (e164Number != null) {
+ selection =
+ selection
+ .buildUpon()
+ .or(
+ Selection.column(BlockedNumbers.COLUMN_E164_NUMBER)
+ .is("=", e164Number))
+ .build();
+ }
+ operations.add(
+ ContentProviderOperation.newDelete(BlockedNumbers.CONTENT_URI)
+ .withSelection(selection.getSelection(), selection.getSelectionArgs())
+ .build());
+ }
+ applyBatchOps(context.getContentResolver(), operations);
+ return null;
+ });
+ }
+
+ /**
+ * Get blocked numbers from a list of number.
+ *
+ * @param countryIso the current location used to guess the country code of the number if not
+ * available. If {@code null} and {@code number} does not have a country code, only the
+ * original number will be used to check blocked status.
+ * @throws BlockingFailedException in the returned future if the operation failed.
+ */
+ public static ListenableFuture<ImmutableMap<String, Boolean>> isBlocked(
+ Context context, ImmutableCollection<String> numbers, @Nullable String countryIso) {
+ return DialerExecutorComponent.get(context)
+ .backgroundExecutor()
+ .submit(
+ () -> {
+ Map<String, Boolean> blockedStatus = new ArrayMap<>();
+ List<String> e164Numbers = new ArrayList<>();
+
+ for (String number : numbers) {
+ // Initialize as unblocked
+ blockedStatus.put(number, false);
+ String e164Number = PhoneNumberUtils.formatNumberToE164(number, countryIso);
+ if (e164Number != null) {
+ e164Numbers.add(e164Number);
+ }
+ }
+
+ Selection selection =
+ Selection.builder()
+ .or(Selection.column(BlockedNumbers.COLUMN_ORIGINAL_NUMBER).in(numbers))
+ .or(Selection.column(BlockedNumbers.COLUMN_E164_NUMBER).in(e164Numbers))
+ .build();
+
+ try (Cursor cursor =
+ context
+ .getContentResolver()
+ .query(
+ BlockedNumbers.CONTENT_URI,
+ new String[] {BlockedNumbers.COLUMN_ORIGINAL_NUMBER},
+ selection.getSelection(),
+ selection.getSelectionArgs(),
+ null)) {
+ if (cursor == null) {
+ return ImmutableMap.copyOf(blockedStatus);
+ }
+ while (cursor.moveToNext()) {
+ // Update blocked status
+ blockedStatus.put(cursor.getString(0), true);
+ }
+ }
+ return ImmutableMap.copyOf(blockedStatus);
+ });
+ }
+
+ private static ContentProviderResult[] applyBatchOps(
+ ContentResolver resolver, ArrayList<ContentProviderOperation> ops)
+ throws BlockingFailedException {
+ try {
+ return resolver.applyBatch(BlockedNumberContract.AUTHORITY, ops);
+ } catch (RemoteException | OperationApplicationException | SecurityException e) {
+ throw new BlockingFailedException(e);
+ }
}
}
diff --git a/java/com/android/dialer/blocking/FilteredNumberCompat.java b/java/com/android/dialer/blocking/FilteredNumberCompat.java
index d263d21..71af340 100644
--- a/java/com/android/dialer/blocking/FilteredNumberCompat.java
+++ b/java/com/android/dialer/blocking/FilteredNumberCompat.java
@@ -30,7 +30,7 @@
import android.telecom.TelecomManager;
import android.telephony.PhoneNumberUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.database.FilteredNumberContract.FilteredNumber;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberSources;
@@ -115,7 +115,9 @@
* migration has been performed, {@code false} otherwise.
*/
public static boolean useNewFiltering(Context context) {
- return !ConfigProviderBindings.get(context).getBoolean("debug_force_dialer_filtering", false)
+ return !ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("debug_force_dialer_filtering", false)
&& canUseNewFiltering()
&& hasMigratedToNewBlocking(context);
}
diff --git a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
index fb0399d..28ac7bf 100644
--- a/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
+++ b/java/com/android/dialer/blockreportspam/ShowBlockReportSpamDialogReceiver.java
@@ -40,6 +40,7 @@
import com.android.dialer.spam.Spam;
import com.android.dialer.spam.SpamComponent;
import com.android.dialer.spam.SpamSettings;
+import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
@@ -225,8 +226,7 @@
Futures.addCallback(
Blocking.block(
context,
- DialerExecutorComponent.get(context).backgroundExecutor(),
- dialogInfo.getNormalizedNumber(),
+ ImmutableList.of(dialogInfo.getNormalizedNumber()),
dialogInfo.getCountryIso()),
new FutureCallback<Void>() {
@Override
@@ -252,8 +252,7 @@
Futures.addCallback(
Blocking.unblock(
context,
- DialerExecutorComponent.get(context).backgroundExecutor(),
- dialogInfo.getNormalizedNumber(),
+ ImmutableList.of(dialogInfo.getNormalizedNumber()),
dialogInfo.getCountryIso()),
new FutureCallback<Void>() {
@Override
diff --git a/java/com/android/dialer/callcomposer/CallComposerActivity.java b/java/com/android/dialer/callcomposer/CallComposerActivity.java
index ce3f7f2..921bbba 100644
--- a/java/com/android/dialer/callcomposer/CallComposerActivity.java
+++ b/java/com/android/dialer/callcomposer/CallComposerActivity.java
@@ -60,7 +60,7 @@
import com.android.dialer.common.concurrent.DialerExecutor;
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.Constants;
import com.android.dialer.contactphoto.ContactPhotoManager;
import com.android.dialer.dialercontact.DialerContact;
@@ -78,6 +78,7 @@
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.util.UriUtils;
import com.android.dialer.util.ViewUtil;
+import com.android.dialer.widget.BidiTextView;
import com.android.dialer.widget.DialerToolbar;
import com.android.dialer.widget.LockableViewPager;
import com.android.incallui.callpending.CallPendingActivity;
@@ -135,7 +136,7 @@
private Long sessionId = Session.NO_SESSION_ID;
private TextView nameView;
- private TextView numberView;
+ private BidiTextView numberView;
private QuickContactBadge contactPhoto;
private RelativeLayout contactContainer;
private DialerToolbar toolbar;
@@ -345,7 +346,9 @@
@VisibleForTesting
public long getSessionStartedTimeoutMillis() {
- return ConfigProviderBindings.get(this).getLong("ec_session_started_timeout", 10_000);
+ return ConfigProviderComponent.get(this)
+ .getConfigProvider()
+ .getLong("ec_session_started_timeout", 10_000);
}
@Override
@@ -441,7 +444,9 @@
getEnrichedCallManager().sendCallComposerData(sessionId, data);
maybeShowPrivacyToast(data);
if (data.hasImageData()
- && ConfigProviderBindings.get(this).getBoolean("enable_delayed_ec_images", true)
+ && ConfigProviderComponent.get(this)
+ .getConfigProvider()
+ .getBoolean("enable_delayed_ec_images", true)
&& !TelecomUtil.isInManagedCall(this)) {
timeoutHandler.postDelayed(placeTelecomCallRunnable, getRCSTimeoutMillis());
startActivity(
@@ -476,7 +481,9 @@
@VisibleForTesting
public long getRCSTimeoutMillis() {
- return ConfigProviderBindings.get(this).getLong("ec_image_upload_timeout", 15_000);
+ return ConfigProviderComponent.get(this)
+ .getConfigProvider()
+ .getLong("ec_image_upload_timeout", 15_000);
}
private void placeTelecomCall() {
diff --git a/java/com/android/dialer/callcomposer/res/layout/call_composer_activity.xml b/java/com/android/dialer/callcomposer/res/layout/call_composer_activity.xml
index 49d278f..8b982b9 100644
--- a/java/com/android/dialer/callcomposer/res/layout/call_composer_activity.xml
+++ b/java/com/android/dialer/callcomposer/res/layout/call_composer_activity.xml
@@ -57,7 +57,7 @@
android:textColor="?android:attr/textColorPrimaryInverse"
android:textSize="@dimen/call_composer_name_text_size"/>
- <TextView
+ <com.android.dialer.widget.BidiTextView
android:id="@+id/phone_number"
android:layout_width="match_parent"
android:layout_height="wrap_content"
diff --git a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
index 44b5a43..84a60c1 100644
--- a/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
+++ b/java/com/android/dialer/calldetails/CallDetailsHeaderViewHolder.java
@@ -40,6 +40,7 @@
import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
import com.android.dialer.logging.InteractionEvent;
import com.android.dialer.logging.Logger;
+import com.android.dialer.phonenumberutil.PhoneNumberHelper;
import com.android.dialer.widget.BidiTextView;
/**
@@ -53,7 +54,7 @@
private final CallDetailsHeaderListener callDetailsHeaderListener;
private final ImageView callbackButton;
private final BidiTextView nameView;
- private final TextView numberView;
+ private final BidiTextView numberView;
private final TextView networkView;
private final QuickContactBadge contactPhoto;
private final Context context;
@@ -157,20 +158,26 @@
contact.getNameOrNumber(),
contact.getContactType());
- nameView.setText(contact.getNameOrNumber());
- if (!TextUtils.isEmpty(contact.getDisplayNumber())) {
- numberView.setVisibility(View.VISIBLE);
- String secondaryInfo =
- TextUtils.isEmpty(contact.getNumberLabel())
- ? contact.getDisplayNumber()
- : context.getString(
- com.android.contacts.common.R.string.call_subject_type_and_number,
- contact.getNumberLabel(),
- contact.getDisplayNumber());
- numberView.setText(secondaryInfo);
+ // Hide the secondary text of the header by default.
+ // We will show it if needed (see below).
+ numberView.setVisibility(View.GONE);
+ numberView.setText(null);
+
+ if (PhoneNumberHelper.isLocalEmergencyNumber(context, contact.getNumber())) {
+ nameView.setText(context.getResources().getString(R.string.emergency_number));
} else {
- numberView.setVisibility(View.GONE);
- numberView.setText(null);
+ nameView.setText(contact.getNameOrNumber());
+ if (!TextUtils.isEmpty(contact.getDisplayNumber())) {
+ numberView.setVisibility(View.VISIBLE);
+ String secondaryInfo =
+ TextUtils.isEmpty(contact.getNumberLabel())
+ ? contact.getDisplayNumber()
+ : context.getString(
+ com.android.contacts.common.R.string.call_subject_type_and_number,
+ contact.getNumberLabel(),
+ contact.getDisplayNumber());
+ numberView.setText(secondaryInfo);
+ }
}
if (!TextUtils.isEmpty(contact.getSimDetails().getNetwork())) {
diff --git a/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml b/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml
index cb2faa7..bfbb4f8 100644
--- a/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml
+++ b/java/com/android/dialer/calldetails/res/layout/call_details_entry.xml
@@ -40,11 +40,12 @@
<TextView
android:id="@+id/call_time"
- style="@style/Dialer.TextAppearance.Secondary.Ellipsize"
+ style="@style/Dialer.TextAppearance.Secondary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="@dimen/call_entry_bottom_padding"
android:layout_marginStart="@dimen/call_entry_text_left_margin"
+ android:layout_marginEnd="16dp"
android:layout_below="@+id/call_type"/>
<TextView
diff --git a/java/com/android/dialer/calldetails/res/layout/contact_container.xml b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
old mode 100644
new mode 100755
index e918feb..4df81f1
--- a/java/com/android/dialer/calldetails/res/layout/contact_container.xml
+++ b/java/com/android/dialer/calldetails/res/layout/contact_container.xml
@@ -51,7 +51,7 @@
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/photo_text_margin"/>
- <TextView
+ <com.android.dialer.widget.BidiTextView
android:id="@+id/phone_number"
style="@style/Dialer.TextAppearance.Secondary.Ellipsize"
android:layout_width="wrap_content"
diff --git a/java/com/android/dialer/commandline/impl/BlockingCommand.java b/java/com/android/dialer/commandline/impl/BlockingCommand.java
index f06e240..d064505 100644
--- a/java/com/android/dialer/commandline/impl/BlockingCommand.java
+++ b/java/com/android/dialer/commandline/impl/BlockingCommand.java
@@ -28,6 +28,7 @@
import com.android.dialer.phonelookup.PhoneLookupInfo;
import com.android.dialer.phonelookup.consolidator.PhoneLookupInfoConsolidator;
import com.android.dialer.phonenumberproto.DialerPhoneNumberUtil;
+import com.google.common.collect.ImmutableList;
import com.google.common.util.concurrent.Futures;
import com.google.common.util.concurrent.ListenableFuture;
import com.google.common.util.concurrent.ListeningExecutorService;
@@ -71,7 +72,7 @@
if ("block".equals(command)) {
String number = args.getPositionals().get(1);
return Futures.transform(
- Blocking.block(appContext, executorService, number, null),
+ Blocking.block(appContext, ImmutableList.of(number), null),
(unused) -> "blocked " + number,
MoreExecutors.directExecutor());
}
@@ -79,7 +80,7 @@
if ("unblock".equals(command)) {
String number = args.getPositionals().get(1);
return Futures.transform(
- Blocking.unblock(appContext, executorService, number, null),
+ Blocking.unblock(appContext, ImmutableList.of(number), null),
(unused) -> "unblocked " + number,
MoreExecutors.directExecutor());
}
diff --git a/java/com/android/dialer/configprovider/ConfigProviderBindings.java b/java/com/android/dialer/configprovider/ConfigProviderBindings.java
deleted file mode 100644
index 0bf0e75..0000000
--- a/java/com/android/dialer/configprovider/ConfigProviderBindings.java
+++ /dev/null
@@ -1,68 +0,0 @@
-/*
- * 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.configprovider;
-
-import android.content.Context;
-import android.support.annotation.NonNull;
-import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
-import android.support.v4.os.UserManagerCompat;
-import com.android.dialer.common.Assert;
-
-/** Accessor for getting a {@link ConfigProvider}. */
-public class ConfigProviderBindings {
-
- private static ConfigProvider configProvider;
- private static ConfigProvider configProviderStub;
-
- public static ConfigProvider get(@NonNull Context context) {
- Assert.isNotNull(context);
- if (configProvider != null) {
- return configProvider;
- }
- if (!UserManagerCompat.isUserUnlocked(context)) {
- if (configProviderStub == null) {
- configProviderStub = new ConfigProviderStub();
- }
- return configProviderStub;
- }
- configProvider = ConfigProviderComponent.get(context).getConfigProvider();
- return configProvider;
- }
-
- @VisibleForTesting
- public static void setForTesting(@Nullable ConfigProvider configProviderForTesting) {
- configProvider = configProviderForTesting;
- }
-
- private static class ConfigProviderStub implements ConfigProvider {
- @Override
- public String getString(String key, String defaultValue) {
- return defaultValue;
- }
-
- @Override
- public long getLong(String key, long defaultValue) {
- return defaultValue;
- }
-
- @Override
- public boolean getBoolean(String key, boolean defaultValue) {
- return defaultValue;
- }
- }
-}
diff --git a/java/com/android/dialer/configprovider/ConfigProviderComponent.java b/java/com/android/dialer/configprovider/ConfigProviderComponent.java
index e974e30..5b5afd7 100644
--- a/java/com/android/dialer/configprovider/ConfigProviderComponent.java
+++ b/java/com/android/dialer/configprovider/ConfigProviderComponent.java
@@ -27,7 +27,6 @@
public abstract class ConfigProviderComponent {
@NonNull
- @Deprecated // Use ConfigProviderBindings instead
public abstract ConfigProvider getConfigProvider();
public static ConfigProviderComponent get(Context context) {
diff --git a/java/com/android/dialer/database/DialerDatabaseHelper.java b/java/com/android/dialer/database/DialerDatabaseHelper.java
index b61cc39..b1cd090 100644
--- a/java/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/java/com/android/dialer/database/DialerDatabaseHelper.java
@@ -42,7 +42,7 @@
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.DialerFutureSerializer;
import com.android.dialer.common.database.Selection;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.database.FilteredNumberContract.FilteredNumberColumns;
import com.android.dialer.smartdial.util.SmartDialNameMatcher;
import com.android.dialer.smartdial.util.SmartDialPrefix;
@@ -682,7 +682,9 @@
context.getSharedPreferences(DATABASE_LAST_CREATED_SHARED_PREF, Context.MODE_PRIVATE);
long defaultLastUpdateMillis =
- ConfigProviderBindings.get(context).getLong(DEFAULT_LAST_UPDATED_CONFIG_KEY, 0);
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getLong(DEFAULT_LAST_UPDATED_CONFIG_KEY, 0);
long sharedPrefLastUpdateMillis =
databaseLastUpdateSharedPref.getLong(LAST_UPDATED_MILLIS, defaultLastUpdateMillis);
diff --git a/java/com/android/dialer/dialpadview/theme/res/values/styles.xml b/java/com/android/dialer/dialpadview/theme/res/values/styles.xml
index 04ebb1b..8705a17 100644
--- a/java/com/android/dialer/dialpadview/theme/res/values/styles.xml
+++ b/java/com/android/dialer/dialpadview/theme/res/values/styles.xml
@@ -32,7 +32,7 @@
<item name="dialpad_elevation">0dp</item>
</style>
- <style name="Dialpad.Light">
+ <style name="Dialpad.Themed">
<item name="dialpad_text_color">?android:attr/textColorSecondary</item>
<item name="dialpad_text_color_primary">?android:attr/colorPrimary</item>
<item name="dialpad_text_color_secondary">?android:attr/textColorSecondary</item>
diff --git a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
index eeeae13..bd9cc31 100644
--- a/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
+++ b/java/com/android/dialer/glidephotomanager/impl/GlidePhotoManagerImpl.java
@@ -143,7 +143,7 @@
photoInfo.getIsSpam(),
photoInfo.getIsBusiness(),
TelecomManager.PRESENTATION_ALLOWED, // TODO(twyen):implement
- false)); // TODO(twyen):implement
+ photoInfo.getIsConference()));
return letterTileDrawable;
}
diff --git a/java/com/android/dialer/glidephotomanager/photo_info.proto b/java/com/android/dialer/glidephotomanager/photo_info.proto
index 6fa21d8..07908d8 100644
--- a/java/com/android/dialer/glidephotomanager/photo_info.proto
+++ b/java/com/android/dialer/glidephotomanager/photo_info.proto
@@ -9,7 +9,7 @@
// Contains information associated with a number, which is used to create the
// photo.
-// Next ID: 12
+// Next ID: 13
message PhotoInfo {
// The display name of the number.
optional string name = 1;
@@ -44,4 +44,7 @@
// Whether the photo should be badged as RTT call.
optional bool is_rtt = 11;
+
+ // Whether to show conference call icon instead of contact icon.
+ optional bool is_conference = 12;
}
diff --git a/java/com/android/dialer/i18n/DialerBidiFormatter.java b/java/com/android/dialer/i18n/DialerBidiFormatter.java
index 4ebaa66..e882e06 100644
--- a/java/com/android/dialer/i18n/DialerBidiFormatter.java
+++ b/java/com/android/dialer/i18n/DialerBidiFormatter.java
@@ -26,6 +26,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.regex.Matcher;
+import java.util.regex.Pattern;
/**
* An enhanced version of {@link BidiFormatter} that can recognize a formatted phone number
@@ -40,6 +41,9 @@
private DialerBidiFormatter() {}
+ // Regular expression that matches a single space in the beginning or end of a string.
+ private static final String REGEXP_SURROUNDING_SPACE = "^[ ]|[ ]$";
+
/**
* Divides the given text into segments, applies {@link BidiFormatter#unicodeWrap(CharSequence)}
* to each segment, and then reassembles the text.
@@ -65,19 +69,49 @@
}
/**
- * Segments the given text using {@link Patterns#PHONE}.
+ * Segments the given text into a sequence of substrings using the following procedure.
*
- * <p>For example, "Mobile, +1 650-253-0000, 20 seconds" will be segmented into {"Mobile, ", "+1
- * 650-253-0000", ", 20 seconds"}.
+ * <ol>
+ * <li>Separate text matching {@link Patterns#PHONE} from others.
+ * <p>For example: "Mobile, +1 650-253-0000, 20 seconds" will be segmented into<br>
+ * {"Mobile, ", "+1 650-253-0000", ", 20 seconds"}
+ * <li>For each substring produced by the previous step, separate a single whitespace at the
+ * start/end of it from the rest of the substring.
+ * <p>For example, the first substring "Mobile, " will be segmented into {"Mobile,", " "}.
+ * </ol>
+ *
+ * <p>The final result of segmenting "Mobile, +1 650-253-0000, 20 seconds" is<br>
+ * {"Mobile,", " ", "+1 650-253-0000", ", 20 seconds"}.
+ *
+ * <p>The reason for singling out the whitespace at the start/end of a substring is to prevent it
+ * from being misplaced in RTL context.
*/
@VisibleForTesting
static List<CharSequence> segmentText(CharSequence text) {
Assert.checkArgument(!TextUtils.isEmpty(text));
+ // Separate text matching the phone number pattern from others.
+ List<CharSequence> segmentsSeparatingPhoneNumbers = segmentText(text, Patterns.PHONE);
+
+ // For each substring, separate a single whitespace at the start/end of it from the rest of the
+ // substring.
+ List<CharSequence> finalSegments = new ArrayList<>();
+ Pattern patternSurroundingSpace = Pattern.compile(REGEXP_SURROUNDING_SPACE);
+ for (CharSequence segment : segmentsSeparatingPhoneNumbers) {
+ finalSegments.addAll(segmentText(segment, patternSurroundingSpace));
+ }
+
+ return finalSegments;
+ }
+
+ /** Segments the given text into a sequence of substrings using the provided pattern. */
+ private static List<CharSequence> segmentText(CharSequence text, Pattern pattern) {
+ Assert.checkArgument(!TextUtils.isEmpty(text));
+
List<CharSequence> segments = new ArrayList<>();
- // Find the start index and the end index of each segment matching the phone number pattern.
- Matcher matcher = Patterns.PHONE.matcher(text.toString());
+ // Find the start index and the end index of each segment matching the pattern.
+ Matcher matcher = pattern.matcher(text.toString());
List<Range> segmentRanges = new ArrayList<>();
while (matcher.find()) {
segmentRanges.add(Range.newBuilder().setStart(matcher.start()).setEnd(matcher.end()).build());
diff --git a/java/com/android/dialer/inject/DialerRootComponent.java b/java/com/android/dialer/inject/DialerRootComponent.java
index 11dbf96..e508e17 100644
--- a/java/com/android/dialer/inject/DialerRootComponent.java
+++ b/java/com/android/dialer/inject/DialerRootComponent.java
@@ -41,4 +41,6 @@
@Retention(RetentionPolicy.SOURCE)
public @interface DialerRootComponent {
DialerVariant variant();
+
+ Class<?> injectClass() default Object.class;
}
diff --git a/java/com/android/dialer/logging/reporting_location.proto b/java/com/android/dialer/logging/reporting_location.proto
index b9912be..1d6ba47 100644
--- a/java/com/android/dialer/logging/reporting_location.proto
+++ b/java/com/android/dialer/logging/reporting_location.proto
@@ -15,5 +15,6 @@
CALL_LOG_HISTORY = 1;
FEEDBACK_PROMPT = 2;
VOICEMAIL_HISTORY = 3;
+ CONTACT_DETAILS = 4;
}
}
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index e14c5b9..9169dc3 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -81,7 +81,7 @@
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.common.concurrent.UiListener;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.constants.ActivityRequestCodes;
import com.android.dialer.contactsfragment.ContactsFragment;
import com.android.dialer.contactsfragment.ContactsFragment.Header;
@@ -1313,7 +1313,9 @@
Logger.get(activity).logScreenView(ScreenEvent.Type.MAIN_SPEED_DIAL, activity);
selectedTab = TabIndex.SPEED_DIAL;
- if (ConfigProviderBindings.get(activity).getBoolean("enable_new_favorites_tab", false)) {
+ if (ConfigProviderComponent.get(activity)
+ .getConfigProvider()
+ .getBoolean("enable_new_favorites_tab", false)) {
android.support.v4.app.Fragment supportFragment =
supportFragmentManager.findFragmentByTag(SPEED_DIAL_TAG);
showSupportFragment(
@@ -1618,7 +1620,10 @@
LastTabController(Context context, BottomNavBar bottomNavBar, boolean canShowVoicemailTab) {
this.context = context;
this.bottomNavBar = bottomNavBar;
- isEnabled = ConfigProviderBindings.get(context).getBoolean("last_tab_enabled", false);
+ isEnabled =
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("last_tab_enabled", false);
this.canShowVoicemailTab = canShowVoicemailTab;
}
diff --git a/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java b/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
index 3a43f84..4794b88 100644
--- a/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
+++ b/java/com/android/dialer/main/impl/bottomnav/BottomNavItem.java
@@ -29,7 +29,7 @@
import android.widget.LinearLayout;
import android.widget.TextView;
import com.android.dialer.common.Assert;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.theme.base.ThemeComponent;
/** Navigation item in a bottom nav. */
@@ -75,7 +75,9 @@
String countString = String.format(Integer.toString(count));
boolean use99PlusCount =
- ConfigProviderBindings.get(getContext()).getBoolean("use_99_plus", false);
+ ConfigProviderComponent.get(getContext())
+ .getConfigProvider()
+ .getBoolean("use_99_plus", false);
boolean use9Plus = !use99PlusCount;
if (use99PlusCount && count > 99) {
diff --git a/java/com/android/dialer/main/impl/bottomnav/res/layout/bottom_nav_item.xml b/java/com/android/dialer/main/impl/bottomnav/res/layout/bottom_nav_item.xml
index 3fbd9ff..02874a9 100644
--- a/java/com/android/dialer/main/impl/bottomnav/res/layout/bottom_nav_item.xml
+++ b/java/com/android/dialer/main/impl/bottomnav/res/layout/bottom_nav_item.xml
@@ -59,5 +59,6 @@
android:layout_height="wrap_content"
android:layout_marginBottom="8dp"
android:gravity="center_horizontal"
+ android:textSize="12sp"
style="@style/Dialer.TextAppearance.Secondary"/>
</com.android.dialer.main.impl.bottomnav.BottomNavItem>
\ No newline at end of file
diff --git a/java/com/android/dialer/main/impl/res/values/styles.xml b/java/com/android/dialer/main/impl/res/values/styles.xml
index 7b36e78..dd24179 100644
--- a/java/com/android/dialer/main/impl/res/values/styles.xml
+++ b/java/com/android/dialer/main/impl/res/values/styles.xml
@@ -27,7 +27,7 @@
<!-- TODO(a bug): Check to see if we can remove this after NewVoicemailFragment launches -->
<item name="actionModeStyle">@style/MainActionModeStyle</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
- <item name="dialpad_style">@style/Dialpad.Light</item>
+ <item name="dialpad_style">@style/Dialpad.Themed</item>
</style>
<style name="MainActivityThemeBase.Dark" parent="Dialer.Dark.ThemeBase.NoActionBar">
@@ -35,7 +35,7 @@
<!-- TODO(a bug): Check to see if we can remove this after NewVoicemailFragment launches -->
<item name="actionModeStyle">@style/MainActionModeStyle</item>
<item name="actionBarTheme">@style/ThemeOverlay.AppCompat.Dark.ActionBar</item>
- <item name="dialpad_style">@style/Dialpad.Light</item>
+ <item name="dialpad_style">@style/Dialpad.Themed</item>
</style>
<!-- Colors our actionbar in action mode to dialer theme color. -->
diff --git a/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
index 578684e..049cf2e 100644
--- a/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
+++ b/java/com/android/dialer/main/impl/toolbar/res/layout/toolbar_layout.xml
@@ -61,8 +61,8 @@
android:layout_toEndOf="@+id/search_magnifying_glass"
android:layout_toStartOf="@+id/voice_search_button"
android:text="@string/dialer_hint_find_contact"
- android:textColor="?android:attr/textColorHint"
- android:textSize="16dp"/>
+ android:textSize="16dp"
+ style="@style/Dialer.TextAppearance.Secondary"/>
<ImageView
android:id="@+id/voice_search_button"
diff --git a/java/com/android/dialer/oem/CequintCallerIdManager.java b/java/com/android/dialer/oem/CequintCallerIdManager.java
index 53f5352..ea6cbb8 100644
--- a/java/com/android/dialer/oem/CequintCallerIdManager.java
+++ b/java/com/android/dialer/oem/CequintCallerIdManager.java
@@ -30,7 +30,7 @@
import android.text.TextUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.google.auto.value.AutoValue;
import java.util.concurrent.ConcurrentHashMap;
@@ -113,7 +113,9 @@
/** Check whether Cequint Caller ID provider package is available and enabled. */
@AnyThread
public static synchronized boolean isCequintCallerIdEnabled(@NonNull Context context) {
- if (!ConfigProviderBindings.get(context).getBoolean(CONFIG_CALLER_ID_ENABLED, true)) {
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(CONFIG_CALLER_ID_ENABLED, true)) {
return false;
}
if (!hasAlreadyCheckedCequintCallerIdPackage) {
diff --git a/java/com/android/dialer/oem/MotorolaUtils.java b/java/com/android/dialer/oem/MotorolaUtils.java
index 3879f91..0268937 100644
--- a/java/com/android/dialer/oem/MotorolaUtils.java
+++ b/java/com/android/dialer/oem/MotorolaUtils.java
@@ -22,7 +22,7 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.PackageUtils;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -79,19 +79,22 @@
}
public static boolean shouldBlinkHdIconWhenConnectingCall(Context context) {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_HD_CODEC_BLINKING_ICON_WHEN_CONNECTING_CALL_ENABLED, true)
&& isSupportingSprintHdCodec(context);
}
public static boolean shouldShowHdIconInNotification(Context context) {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_HD_CODEC_SHOW_ICON_IN_NOTIFICATION_ENABLED, true)
&& isSupportingSprintHdCodec(context);
}
public static boolean shouldShowWifiIconInCallLog(Context context, int features) {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_WIFI_CALL_SHOW_ICON_IN_CALL_LOG_ENABLED, true)
&& (features & Calls.FEATURES_WIFI) == Calls.FEATURES_WIFI
&& isSupportingSprintWifiCall(context);
@@ -102,7 +105,8 @@
return disablePhoneNumberFormattingForTest;
}
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_DISABLE_PHONE_NUMBER_FORMATTING, true)
&& context.getResources().getBoolean(R.bool.motorola_disable_phone_number_formatting);
}
diff --git a/java/com/android/dialer/postcall/PostCall.java b/java/com/android/dialer/postcall/PostCall.java
index 341db3b..542b8d0 100644
--- a/java/com/android/dialer/postcall/PostCall.java
+++ b/java/com/android/dialer/postcall/PostCall.java
@@ -29,7 +29,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
import com.android.dialer.enrichedcall.EnrichedCallManager;
@@ -96,7 +96,10 @@
};
int durationMs =
- (int) ConfigProviderBindings.get(activity).getLong("post_call_prompt_duration_ms", 8_000);
+ (int)
+ ConfigProviderComponent.get(activity)
+ .getConfigProvider()
+ .getLong("post_call_prompt_duration_ms", 8_000);
activeSnackbar =
Snackbar.make(rootView, message, durationMs)
.setAction(actionText, onClickListener)
@@ -215,7 +218,7 @@
boolean callDisconnectedByUser = manager.getBoolean(KEY_POST_CALL_DISCONNECT_PRESSED, false);
- ConfigProvider binding = ConfigProviderBindings.get(context);
+ ConfigProvider binding = ConfigProviderComponent.get(context).getConfigProvider();
return disconnectTimeMillis != -1
&& connectTimeMillis != -1
&& isSimReady(context)
@@ -240,7 +243,9 @@
}
private static boolean isEnabled(Context context) {
- return ConfigProviderBindings.get(context).getBoolean("enable_post_call_prod", true);
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("enable_post_call_prod", true);
}
private static boolean isSimReady(Context context) {
diff --git a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
index bf7995a..60245ee 100644
--- a/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
+++ b/java/com/android/dialer/precall/externalreceiver/LaunchPreCallActivity.java
@@ -28,7 +28,7 @@
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.LogUtil;
import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCall;
@@ -69,7 +69,8 @@
super.onCreate(savedInstanceState);
Logger.get(this).logImpression(DialerImpression.Type.PRECALL_INITIATED_EXTERNAL);
- ConfigProvider configProvider = ConfigProviderBindings.get(getApplicationContext());
+ ConfigProvider configProvider =
+ ConfigProviderComponent.get(getApplicationContext()).getConfigProvider();
Intent intent = getIntent();
CallIntentBuilder builder = new CallIntentBuilder(intent.getData(), Type.EXTERNAL_INITIATION);
diff --git a/java/com/android/dialer/precall/impl/AssistedDialAction.java b/java/com/android/dialer/precall/impl/AssistedDialAction.java
index e4e5255..40a810b 100644
--- a/java/com/android/dialer/precall/impl/AssistedDialAction.java
+++ b/java/com/android/dialer/precall/impl/AssistedDialAction.java
@@ -31,7 +31,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
import com.android.dialer.configprovider.ConfigProvider;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.precall.PreCallAction;
import com.android.dialer.precall.PreCallCoordinator;
import com.android.dialer.telecom.TelecomUtil;
@@ -90,7 +90,7 @@
private TelephonyManager getAssistedDialingTelephonyManager(
Context context, CallIntentBuilder builder) {
- ConfigProvider configProvider = ConfigProviderBindings.get(context);
+ ConfigProvider configProvider = ConfigProviderComponent.get(context).getConfigProvider();
TelephonyManager telephonyManager = context.getSystemService(TelephonyManager.class);
// None of this will be required in the framework because the PhoneAccountHandle
// is already mapped to the request in the TelecomConnection.
diff --git a/java/com/android/dialer/precall/impl/CallingAccountSelector.java b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
index b2a6593..042f585 100644
--- a/java/com/android/dialer/precall/impl/CallingAccountSelector.java
+++ b/java/com/android/dialer/precall/impl/CallingAccountSelector.java
@@ -32,7 +32,7 @@
import com.android.dialer.callintent.CallIntentBuilder;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
import com.android.dialer.precall.PreCallAction;
@@ -64,7 +64,8 @@
@Override
public boolean requiresUi(Context context, CallIntentBuilder builder) {
- if (!ConfigProviderBindings.get(context)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("precall_calling_account_selector_enabled", true)) {
return false;
}
diff --git a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
index b8f54d8..825375d 100644
--- a/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
+++ b/java/com/android/dialer/precall/impl/UkRegionPrefixInInternationalFormatHandler.java
@@ -19,7 +19,7 @@
import android.content.Context;
import android.telephony.PhoneNumberUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.precall.impl.MalformedNumberRectifier.MalformedNumberHandler;
import com.google.common.base.Optional;
@@ -37,7 +37,8 @@
@Override
public Optional<String> handle(Context context, String number) {
- if (!ConfigProviderBindings.get(context)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("uk_region_prefix_in_international_format_fix_enabled", true)) {
return Optional.absent();
}
diff --git a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
index b546dc0..1cfdbb1 100644
--- a/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
+++ b/java/com/android/dialer/preferredsim/PreferredAccountUtil.java
@@ -30,7 +30,7 @@
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.google.common.base.Optional;
import com.google.common.collect.ImmutableSet;
@@ -102,7 +102,8 @@
*/
public static ImmutableSet<String> getValidAccountTypes(Context context) {
return ImmutableSet.copyOf(
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(
"preferred_sim_valid_account_types",
"com.google;"
diff --git a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
index 086cd7a..ffd98f4 100644
--- a/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
+++ b/java/com/android/dialer/preferredsim/impl/PreferredAccountWorkerImpl.java
@@ -44,7 +44,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.Annotations.BackgroundExecutor;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.inject.ApplicationContext;
import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
@@ -357,7 +357,9 @@
@WorkerThread
private static boolean isPreferredSimEnabled(Context context) {
Assert.isWorkerThread();
- if (!ConfigProviderBindings.get(context).getBoolean("preferred_sim_enabled", true)) {
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("preferred_sim_enabled", true)) {
return false;
}
diff --git a/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java b/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
index cb31208..06b994f 100644
--- a/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
+++ b/java/com/android/dialer/rootcomponentgenerator/RootComponentGeneratingStep.java
@@ -35,6 +35,7 @@
import com.google.common.collect.SetMultimap;
import com.squareup.javapoet.AnnotationSpec;
import com.squareup.javapoet.ClassName;
+import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.TypeSpec;
import dagger.Component;
import java.lang.annotation.Annotation;
@@ -51,7 +52,30 @@
import javax.lang.model.element.TypeElement;
import javax.lang.model.type.TypeMirror;
-/** Generates root component for a java type annotated with {@link DialerRootComponent}. */
+/**
+ * Generates root component for a java type annotated with {@link DialerRootComponent}.
+ *
+ * <p>If users use {@link GenerateTestDaggerApp} along with RootComponentGenerator, there's an
+ * optional method that they can use to inject instance in the test.
+ *
+ * <p>Example:
+ *
+ * <p>
+ *
+ * <pre>
+ * <code>
+ * @Inject SomeThing someThing;
+ * @Before
+ * public void setUp() {
+ * ...
+ * TestApplication application = (TestApplication) RuntimeEnvironment.application;
+ * TestComponent component = (TestComponent) application.component();
+ * component.inject(this);
+ * ...
+ * }
+ * </code>
+ * </pre>
+ */
final class RootComponentGeneratingStep implements ProcessingStep {
private final ProcessingEnvironment processingEnv;
@@ -110,6 +134,15 @@
componentAnnotation.addMember("modules", "$T.class", annotatedElement.asType());
}
rootComponentClassBuilder.addAnnotation(componentAnnotation.build());
+
+ AnnotationMirror dialerRootComponentMirror =
+ getAnnotationMirror(rootElement, DialerRootComponent.class).get();
+
+ TypeMirror annotatedTestClass =
+ (TypeMirror) getAnnotationValue(dialerRootComponentMirror, "injectClass").getValue();
+
+ rootComponentClassBuilder.addMethod(generateInjectMethod(annotatedTestClass));
+
TypeSpec rootComponentClass = rootComponentClassBuilder.build();
RootComponentUtils.writeJavaFile(
processingEnv, ClassName.get(rootElement).packageName(), rootComponentClass);
@@ -163,6 +196,14 @@
}
}
+ private MethodSpec generateInjectMethod(TypeMirror testClassTypeMirror) {
+ return MethodSpec.methodBuilder("inject")
+ .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
+ .returns(void.class)
+ .addParameter(ClassName.get(testClassTypeMirror), "clazz")
+ .build();
+ }
+
private interface MetadataProcessor {
void process(TypeElement typeElement);
}
diff --git a/java/com/android/dialer/rtt/RttTranscriptActivity.java b/java/com/android/dialer/rtt/RttTranscriptActivity.java
index 18ae20c..574cdb2 100644
--- a/java/com/android/dialer/rtt/RttTranscriptActivity.java
+++ b/java/com/android/dialer/rtt/RttTranscriptActivity.java
@@ -20,7 +20,6 @@
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.Nullable;
-import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
@@ -30,6 +29,7 @@
import com.android.dialer.common.concurrent.UiListener;
import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.protos.ProtoParsers;
+import com.android.dialer.widget.DialerToolbar;
/** Activity holds RTT transcript. */
public class RttTranscriptActivity extends AppCompatActivity {
@@ -40,6 +40,7 @@
private RttTranscriptAdapter adapter;
private UiListener<RttTranscript> rttTranscriptUiListener;
+ private DialerToolbar toolbar;
public static Intent getIntent(
Context context, String transcriptId, String primaryText, PhotoInfo photoInfo) {
@@ -54,9 +55,9 @@
protected void onCreate(@Nullable Bundle bundle) {
super.onCreate(bundle);
setContentView(R.layout.activity_rtt_transcript);
- ActionBar actionBar = getSupportActionBar();
- actionBar.setDisplayShowHomeEnabled(true);
- actionBar.setDisplayHomeAsUpEnabled(true);
+ toolbar = findViewById(R.id.toolbar);
+ toolbar.setBackgroundColor(getColor(R.color.rtt_transcript_primary_color));
+ getWindow().setStatusBarColor(getColor(R.color.rtt_transcript_primary_color_dark));
RecyclerView recyclerView = findViewById(R.id.rtt_recycler_view);
LinearLayoutManager layoutManager = new LinearLayoutManager(this);
@@ -86,7 +87,7 @@
});
String primaryText = intent.getStringExtra(EXTRA_PRIMARY_TEXT);
- getSupportActionBar().setTitle(primaryText);
+ toolbar.setTitle(primaryText);
PhotoInfo photoInfo =
ProtoParsers.getTrusted(intent, EXTRA_PHOTO_INFO, PhotoInfo.getDefaultInstance());
diff --git a/java/com/android/dialer/rtt/res/layout/activity_rtt_transcript.xml b/java/com/android/dialer/rtt/res/layout/activity_rtt_transcript.xml
index 628a793..772fde1 100644
--- a/java/com/android/dialer/rtt/res/layout/activity_rtt_transcript.xml
+++ b/java/com/android/dialer/rtt/res/layout/activity_rtt_transcript.xml
@@ -14,10 +14,16 @@
limitations under the License.
-->
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:background="@color/rtt_transcript_background_color">
+ android:background="@color/rtt_transcript_background_color"
+ android:orientation="vertical">
+
+ <com.android.dialer.widget.DialerToolbar
+ android:id="@+id/toolbar"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"/>
<android.support.v7.widget.RecyclerView
android:id="@+id/rtt_recycler_view"
@@ -27,4 +33,4 @@
android:paddingBottom="16dp"
android:clipToPadding="false"/>
-</FrameLayout>
+</LinearLayout>
diff --git a/java/com/android/dialer/rtt/res/values/colors.xml b/java/com/android/dialer/rtt/res/values/colors.xml
index 5de06f9..3b27a57 100644
--- a/java/com/android/dialer/rtt/res/values/colors.xml
+++ b/java/com/android/dialer/rtt/res/values/colors.xml
@@ -16,5 +16,6 @@
-->
<resources>
<color name="rtt_transcript_primary_color">#37474F</color>
+ <color name="rtt_transcript_primary_color_dark">#263238</color>
<color name="rtt_transcript_background_color">#ECEFF1</color>
</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/shortcuts/Shortcuts.java b/java/com/android/dialer/shortcuts/Shortcuts.java
index c2bbb4d..d08e344 100644
--- a/java/com/android/dialer/shortcuts/Shortcuts.java
+++ b/java/com/android/dialer/shortcuts/Shortcuts.java
@@ -18,7 +18,7 @@
import android.content.Context;
import android.support.annotation.NonNull;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
/** Checks if dynamic shortcuts should be enabled. */
public class Shortcuts {
@@ -27,7 +27,9 @@
private static final String DYNAMIC_SHORTCUTS_ENABLED = "dynamic_shortcuts_enabled";
static boolean areDynamicShortcutsEnabled(@NonNull Context context) {
- return ConfigProviderBindings.get(context).getBoolean(DYNAMIC_SHORTCUTS_ENABLED, true);
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(DYNAMIC_SHORTCUTS_ENABLED, true);
}
private Shortcuts() {}
diff --git a/java/com/android/dialer/spam/Spam.java b/java/com/android/dialer/spam/Spam.java
index 028bda4..b797ce3 100644
--- a/java/com/android/dialer/spam/Spam.java
+++ b/java/com/android/dialer/spam/Spam.java
@@ -61,6 +61,19 @@
ListenableFuture<SpamStatus> checkSpamStatus(String number, @Nullable String defaultCountryIso);
/**
+ * Checks if the given number is suspected of being spam, checking additional information as
+ * needed for the in-call ui.
+ *
+ * <p>See {@link #checkSpamStatus(String, String)}.
+ *
+ * @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> checkSpamStatusForInCallUi(
+ 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.
*
diff --git a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
index 34209cc..c270c59 100644
--- a/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
+++ b/java/com/android/dialer/spam/promo/SpamBlockingPromoHelper.java
@@ -28,7 +28,7 @@
import android.support.v4.os.BuildCompat;
import android.view.View;
import android.widget.Toast;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.notification.DialerNotificationManager;
@@ -65,7 +65,9 @@
* @return true if we should show a spam blocking promo.
*/
public boolean shouldShowSpamBlockingPromo() {
- if (!ConfigProviderBindings.get(context).getBoolean(ENABLE_SPAM_BLOCKING_PROMO, false)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(ENABLE_SPAM_BLOCKING_PROMO, false)
|| !spamSettings.isSpamEnabled()
|| !spamSettings.isSpamBlockingEnabledByFlag()
|| spamSettings.isSpamBlockingEnabledByUser()) {
@@ -77,7 +79,8 @@
.unencryptedSharedPrefs()
.getLong(SPAM_BLOCKING_PROMO_LAST_SHOW_MILLIS, 0);
long showPeriodMillis =
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(SPAM_BLOCKING_PROMO_PERIOD_MILLIS, Long.MAX_VALUE);
return lastShowMillis == 0 || System.currentTimeMillis() - lastShowMillis > showPeriodMillis;
}
@@ -85,7 +88,8 @@
/* Returns true if we should show a spam blocking promo in after call notification scenario. */
public boolean shouldShowAfterCallSpamBlockingPromo() {
return shouldShowSpamBlockingPromo()
- && ConfigProviderBindings.get(context)
+ && ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(ENABLE_AFTER_CALL_SPAM_BLOCKING_PROMO, false);
}
diff --git a/java/com/android/dialer/spam/stub/SpamStub.java b/java/com/android/dialer/spam/stub/SpamStub.java
index 5eeed45..7d48ca6 100644
--- a/java/com/android/dialer/spam/stub/SpamStub.java
+++ b/java/com/android/dialer/spam/stub/SpamStub.java
@@ -68,6 +68,12 @@
}
@Override
+ public ListenableFuture<SpamStatus> checkSpamStatusForInCallUi(
+ String number, @Nullable String defaultCountryIso) {
+ return checkSpamStatus(number, defaultCountryIso);
+ }
+
+ @Override
public ListenableFuture<Void> updateSpamListDownload(boolean isEnabledByUser) {
// no-op
return Futures.immediateFuture(null);
diff --git a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
index b8c7e52..c8f20c7 100644
--- a/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
+++ b/java/com/android/dialer/theme/base/impl/AospThemeImpl.java
@@ -139,8 +139,8 @@
@Override
public int getColorPrimaryDark() {
- Assert.checkArgument(colorPrimary != -1);
- return 0;
+ Assert.checkArgument(colorPrimaryDark != -1);
+ return colorPrimaryDark;
}
@Override
diff --git a/java/com/android/dialer/theme/base/res/values/attr.xml b/java/com/android/dialer/theme/base/res/values/attr.xml
index 41c6225..606d161 100644
--- a/java/com/android/dialer/theme/base/res/values/attr.xml
+++ b/java/com/android/dialer/theme/base/res/values/attr.xml
@@ -23,4 +23,14 @@
<attr name="colorTextOnUnthemedDarkBackground" format="color"/>
<!-- Used to color icons on dark backgrounds. White in Light Theme. -->
<attr name="colorIconOnUnthemedDarkBackground" format="color"/>
-</resources>
\ No newline at end of file
+ <!-- Used to color the background of chat bubbles we send -->
+ <attr name="colorMobileOriginatingChatBackground" format="color"/>
+ <!-- Used to color the text in chat bubbles we send -->
+ <attr name="colorMobileOriginatingChatText" format="color"/>
+ <!-- Used to color the background of chat bubbles we receive -->
+ <attr name="colorMobileTerminatingChatBackground" format="color"/>
+ <!-- Used to color the text in chat bubbles we receive -->
+ <attr name="colorMobileTerminatingChatText" format="color"/>
+ <!-- Used to theme ripple effects with the app's primary color. -->
+ <attr name="colorPrimary20pct" format="color|reference"/>
+</resources>
diff --git a/java/com/android/dialer/theme/base/res/values/styles_dialer_light.xml b/java/com/android/dialer/theme/base/res/values/styles_dialer_light.xml
index cfdee78..5fecbae 100644
--- a/java/com/android/dialer/theme/base/res/values/styles_dialer_light.xml
+++ b/java/com/android/dialer/theme/base/res/values/styles_dialer_light.xml
@@ -34,7 +34,6 @@
<item name="android:textColorSecondary">@color/settings_text_color_secondary</item>
<item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="android:colorAccent">?android:attr/colorPrimary</item>
- <item name="android:textColorLink">?android:attr/colorPrimary</item>
</style>
<!-- TODO(a bug): This is only actively used in empty_content_view.xml. Move it there. -->
diff --git a/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml b/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
index e01a3a2..142bb89 100644
--- a/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
+++ b/java/com/android/dialer/theme/base/res/values/theme_dialer_dark.xml
@@ -33,24 +33,24 @@
<!-- Activities and Applications should inherit from one of the themes above. -->
<style name="Dialer.Dark.ThemeBase">
<!-- These values should be used to color all backgrounds. -->
- <item name="android:colorBackground">@color/dialer_dark_background</item>
- <item name="android:colorBackgroundFloating">@color/dialer_dark_background_floating</item>
+ <item name="android:colorBackground">@color/google_grey_900</item>
+ <item name="android:colorBackgroundFloating">@color/google_grey_800</item>
<!-- These values should be used to set text color. -->
<!-- swap text colors. -->
- <item name="android:textColorPrimary">@color/dialer_primary_text_color_inverse</item>
- <item name="android:textColorSecondary">@color/dialer_secondary_text_color_inverse</item>
+ <item name="android:textColorPrimary">@color/dialer_dark_primary_text_color</item>
+ <item name="android:textColorSecondary">@color/dialer_dark_secondary_text_color</item>
<item name="android:textColorPrimaryInverse">@color/dialer_primary_text_color</item>
<item name="android:textColorSecondaryInverse">@color/dialer_secondary_text_color</item>
- <item name="android:textColorHint">@color/dialer_text_hint_color</item>
+ <item name="android:textColorHint">@color/google_grey_600</item>
<!-- These will be automatically used to color most Appcompat/Material widgets. -->
- <item name="android:colorPrimary">@color/dialer_theme_color</item>
- <item name="colorPrimary">@color/dialer_theme_color</item>
- <item name="android:colorPrimaryDark">@color/dialer_theme_color_dark</item>
- <item name="colorPrimaryDark">@color/dialer_theme_color_dark</item>
- <item name="android:colorAccent">@color/dialer_secondary_color</item>
- <item name="colorAccent">@color/dialer_secondary_color</item>
+ <item name="android:colorPrimary">@color/dialer_dark_theme_color</item>
+ <item name="colorPrimary">@color/dialer_dark_theme_color</item>
+ <item name="android:colorPrimaryDark">@color/dialer_dark_theme_color_dark</item>
+ <item name="colorPrimaryDark">@color/dialer_dark_theme_color_dark</item>
+ <item name="android:colorAccent">@color/dialer_dark_secondary_color</item>
+ <item name="colorAccent">@color/dialer_dark_secondary_color</item>
<!-- Used to automatically style check/selected checkbox, switches and radio buttons -->
<item name="colorControlActivated">?android:attr/colorPrimary</item>
@@ -58,7 +58,8 @@
<!-- Dialer specific attributes. -->
<item name="colorIcon">?android:attr/textColorSecondary</item>
<item name="colorIconSecondary">?android:attr/textColorSecondary</item>
- <item name="colorTextOnUnthemedDarkBackground">@color/dialer_primary_text_color_inverse</item>
- <item name="colorIconOnUnthemedDarkBackground">@color/dialer_icon_color_white</item>
+ <item name="colorTextOnUnthemedDarkBackground">@android:color/white</item>
+ <item name="colorIconOnUnthemedDarkBackground">@android:color/white</item>
+ <item name="colorPrimary20pct">@color/dialer_dark_theme_color_20pct</item>
</style>
</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml b/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
index 667b972..db06df4 100644
--- a/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
+++ b/java/com/android/dialer/theme/base/res/values/theme_dialer_light.xml
@@ -21,6 +21,12 @@
<!-- These are used to style all actionbars in Dialer. These aren't needed in Dialer.ThemeBase.NoActionBar -->
<item name="actionBarStyle">@style/DialerActionBarBaseStyle</item>
<item name="actionBarSize">@dimen/action_bar_height</item>
+
+ <!-- Pulled from Theme.AppCompat.Light.DarkActionbar-->
+ <item name="actionBarPopupTheme">@style/ThemeOverlay.AppCompat.Light</item>
+ <item name="actionBarWidgetTheme">@null</item>
+ <item name="actionBarTheme">@style/DialerActionBarBaseTheme</item>
+ <item name="listChoiceBackgroundIndicator">@drawable/abc_list_selector_holo_dark</item>
</style>
<style name="Dialer.ThemeBase.NoActionBar">
@@ -33,15 +39,15 @@
<!-- Activities and Applications should inherit from one of the themes above. -->
<style name="Dialer.ThemeBase">
<!-- These values should be used to color all backgrounds. -->
- <item name="android:colorBackground">@color/dialer_background_light</item>
- <item name="android:colorBackgroundFloating">@color/dialer_background_floating_light</item>
+ <item name="android:colorBackground">@color/dialer_background_color</item>
+ <item name="android:colorBackgroundFloating">@android:color/white</item>
<!-- These values should be used to set text color. -->
<item name="android:textColorPrimary">@color/dialer_primary_text_color</item>
<item name="android:textColorSecondary">@color/dialer_secondary_text_color</item>
- <item name="android:textColorPrimaryInverse">@color/dialer_primary_text_color_inverse</item>
- <item name="android:textColorSecondaryInverse">@color/dialer_secondary_text_color_inverse</item>
- <item name="android:textColorHint">@color/dialer_text_hint_color</item>
+ <item name="android:textColorPrimaryInverse">@color/google_grey_300</item>
+ <item name="android:textColorSecondaryInverse">@color/google_grey_400</item>
+ <item name="android:textColorHint">@color/google_grey_600</item>
<!-- These will be automatically used to color most Appcompat/Material widgets. -->
<item name="android:colorPrimary">@color/dialer_theme_color</item>
@@ -55,10 +61,15 @@
<item name="colorControlActivated">?android:attr/colorPrimary</item>
<!-- Dialer specific attributes. -->
- <item name="colorIcon">@color/dialer_secondary_text_color</item>
- <item name="colorIconSecondary">@color/dialer_icon_color_secondary</item>
- <item name="colorTextOnUnthemedDarkBackground">@color/dialer_primary_text_color_inverse</item>
- <item name="colorIconOnUnthemedDarkBackground">@color/dialer_icon_color_white</item>
+ <item name="colorIcon">@color/google_grey_700</item>
+ <item name="colorIconSecondary">@color/google_grey_400</item>
+ <item name="colorTextOnUnthemedDarkBackground">@android:color/white</item>
+ <item name="colorIconOnUnthemedDarkBackground">@android:color/white</item>
+ <item name="colorMobileTerminatingChatText">@color/google_grey_900</item>
+ <item name="colorMobileTerminatingChatBackground">@color/google_grey_100</item>
+ <item name="colorMobileOriginatingChatText">@color/google_blue_900</item>
+ <item name="colorMobileOriginatingChatBackground">@color/google_blue_100</item>
+ <item name="colorPrimary20pct">@color/dialer_theme_color_20pct</item>
</style>
<!-- TODO(a bug): investigate making this style's parent Dialer.ThemeBase.NoActionBar -->
@@ -78,4 +89,8 @@
<item name="android:background">?android:attr/colorPrimary</item>
<item name="background">?android:attr/colorPrimary</item>
</style>
+ <style name="DialerActionBarBaseTheme"
+ parent="@style/ThemeOverlay.AppCompat.Dark.ActionBar">
+ <item name="colorControlNormal">@android:color/white</item>
+ </style>
</resources>
diff --git a/java/com/android/dialer/theme/common/res/values/colors.xml b/java/com/android/dialer/theme/common/res/values/colors.xml
index 8f59767..1831862 100644
--- a/java/com/android/dialer/theme/common/res/values/colors.xml
+++ b/java/com/android/dialer/theme/common/res/values/colors.xml
@@ -20,6 +20,7 @@
<color name="dialer_end_call_button_color">#BD2A2A</color>
<color name="dialer_divider_line_color">#D8D8D8</color>
<color name="dialer_link_color">#2A56C6</color>
+ <color name="dialer_snackbar_action_text_color">#4285F4</color>
<!-- Colors for the notification actions -->
<color name="notification_action_accept">#097138</color>
diff --git a/java/com/android/dialer/theme/common/res/values/strings.xml b/java/com/android/dialer/theme/common/res/values/strings.xml
index 7d72092..5952a01 100644
--- a/java/com/android/dialer/theme/common/res/values/strings.xml
+++ b/java/com/android/dialer/theme/common/res/values/strings.xml
@@ -39,6 +39,9 @@
<!-- Displayed when handover from WiFi to Lte occurs during a video call -->
<string name="video_call_lte_to_wifi_handover_toast">Continuing call using Wi\u2011Fi\u2026</string>
+ <!-- Displayed when RTT upgrade request failed -->
+ <string name="rtt_call_not_available_toast">RTT not available for this call</string>
+
<!-- String used to build a phone number type and phone number string.
Example: Mobile 650-555-1212 -->
<string name="call_subject_type_and_number">
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
index 82e79c6..703e40b 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_primary_text_color.xml
@@ -16,6 +16,6 @@
-->
<!-- Primary text color in the Phone app -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@color/dialer_dark_text_color_disabled"/>
- <item android:color="@color/dialer_dark_primary_text_color_enabled"/>
+ <item android:state_enabled="false" android:color="@color/google_grey_700"/>
+ <item android:color="@color/google_grey_400"/>
</selector>
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
index d057f9e..486669f 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_dark_secondary_text_color.xml
@@ -16,6 +16,6 @@
-->
<!-- Secondary text color in the Phone app -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@color/dialer_dark_text_color_disabled"/>
- <item android:color="@color/dialer_dark_secondary_text_color_enabled"/>
+ <item android:state_enabled="false" android:color="@color/google_grey_700"/>
+ <item android:color="@color/google_grey_300"/>
</selector>
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_primary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_primary_text_color.xml
index 6612b17..58aa2b0 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_primary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_primary_text_color.xml
@@ -16,6 +16,6 @@
-->
<!-- Primary text color in the Phone app -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@color/dialer_text_color_disabled"/>
- <item android:color="@color/dialer_primary_text_color_enabled"/>
+ <item android:state_enabled="false" android:color="@color/google_grey_400"/>
+ <item android:color="@color/google_grey_900"/>
</selector>
\ No newline at end of file
diff --git a/java/com/android/dialer/theme/hidden/res/color/dialer_secondary_text_color.xml b/java/com/android/dialer/theme/hidden/res/color/dialer_secondary_text_color.xml
index e1c000a..20dfd35 100644
--- a/java/com/android/dialer/theme/hidden/res/color/dialer_secondary_text_color.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/dialer_secondary_text_color.xml
@@ -16,6 +16,6 @@
-->
<!-- Secondary text color in the Phone app -->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_enabled="false" android:color="@color/dialer_text_color_disabled"/>
- <item android:color="@color/dialer_secondary_text_color_enabled"/>
+ <item android:state_enabled="false" android:color="@color/google_grey_400"/>
+ <item android:color="@color/google_grey_700"/>
</selector>
\ No newline at end of file
diff --git a/java/com/android/dialer/theme/hidden/res/color/settings_text_color_primary.xml b/java/com/android/dialer/theme/hidden/res/color/settings_text_color_primary.xml
index 7a14d22..b26c2c2 100644
--- a/java/com/android/dialer/theme/hidden/res/color/settings_text_color_primary.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/settings_text_color_primary.xml
@@ -18,6 +18,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@color/dialer_text_color_disabled" android:state_enabled="false"/>
- <item android:color="@color/dialer_primary_text_color_enabled"/>
+ <item android:color="@color/google_grey_400" android:state_enabled="false"/>
+ <item android:color="@color/google_grey_900"/>
</selector>
diff --git a/java/com/android/dialer/theme/hidden/res/color/settings_text_color_secondary.xml b/java/com/android/dialer/theme/hidden/res/color/settings_text_color_secondary.xml
index c4baefd..21e125a 100644
--- a/java/com/android/dialer/theme/hidden/res/color/settings_text_color_secondary.xml
+++ b/java/com/android/dialer/theme/hidden/res/color/settings_text_color_secondary.xml
@@ -18,6 +18,6 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@color/dialer_text_color_disabled" android:state_enabled="false"/>
- <item android:color="@color/dialer_secondary_text_color_enabled"/>
+ <item android:color="@color/google_grey_400" android:state_enabled="false"/>
+ <item android:color="@color/google_grey_700"/>
</selector>
diff --git a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_dark.xml b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_dark.xml
index 7dc894b..e48474e 100644
--- a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_dark.xml
+++ b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_dark.xml
@@ -15,26 +15,8 @@
-->
<resources>
<!-- Essential theme colors -->
- <color name="dialer_dark_theme_color">#2A56C6</color>
- <color name="dialer_dark_theme_color_dark">#1C3AA9</color>
- <color name="dialer_dark_secondary_color">#F50057</color>
- <color name="dialer_dark_theme_color_20pct">#332A56C6</color>
-
- <!-- Text colors -->
- <color name="dialer_dark_primary_text_color_enabled">#FFFFFF</color>
- <color name="dialer_dark_secondary_text_color_enabled">#DDFFFFFF</color>
- <color name="dialer_dark_text_color_disabled">#333333</color>
- <color name="dialer_dark_text_hint_color">#DE78909C</color>
- <color name="dialer_dark_primary_text_color_inverse">#212121</color>
- <color name="dialer_dark_secondary_text_color_inverse">#636363</color>
- <color name="dialer_dark_snackbar_action_text_color">#4285F4</color>
-
- <!-- Background colors -->
- <color name="dialer_dark_background">#212121</color>
- <color name="dialer_dark_background_floating">#000000</color>
-
- <!-- Other useful colors -->
- <color name="dialer_dark_icon_color">#C4000000</color>
- <color name="dialer_icon_color_secondary">#E1E1E1</color>
- <color name="dialer_icon_color_white">#FFFFFF</color>
+ <color name="dialer_dark_theme_color">#5195EA</color>
+ <color name="dialer_dark_theme_color_20pct">#335195EA</color>
+ <color name="dialer_dark_theme_color_dark">#2374CE</color>
+ <color name="dialer_dark_secondary_color">#5195EA</color>
</resources>
diff --git a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
index 1d5a1e7..988aad7 100644
--- a/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
+++ b/java/com/android/dialer/theme/hidden/res/values/colors_dialer_light.xml
@@ -14,38 +14,10 @@
~ limitations under the License
-->
<resources>
- <!-- Note: The following colors are used in the Dialer settings screens. Since Dialer's settings
- link into the Telephony settings as well, changes to these colors should be mirrored in
- Telephony:
-
- Android source path: packages/apps/PhoneCommon/res/values/colors.xml
- - Local: dialer_theme_color Android Source: dialer_theme_color
- - Local: dialer_theme_color_dark Android Source: dialer_theme_color_dark
- Android source path: packages/services/Telecomm/res/values/colors.xml
- - Local: dialer_theme_color Android Source: theme_color
- - Local: dialer_theme_color_dark Android Source: dialer_settings_color_dark
- -->
<!-- Essential theme colors -->
<color name="dialer_theme_color">#2A56C6</color>
+ <color name="dialer_theme_color_20pct">#332A56C6</color>
<color name="dialer_theme_color_dark">#1C3AA9</color>
<color name="dialer_secondary_color">#F50057</color>
- <color name="dialer_theme_color_20pct">#332A56C6</color>
-
- <!-- Text colors -->
- <color name="dialer_primary_text_color_enabled">#212121</color>
- <color name="dialer_secondary_text_color_enabled">#636363</color>
- <color name="dialer_text_color_disabled">#9E9E9E</color>
- <color name="dialer_text_hint_color">#DE78909C</color>
- <color name="dialer_primary_text_color_inverse">#FFFFFF</color>
- <color name="dialer_secondary_text_color_inverse">#DDFFFFFF</color>
- <color name="dialer_snackbar_action_text_color">#4285F4</color>
-
- <!-- Background colors -->
- <color name="dialer_background_light">#FAFAFA</color>
- <color name="dialer_background_floating_light">#FFFFFF</color>
-
- <!-- Other useful colors -->
- <color name="dialer_icon_color">#89000000</color>
- <color name="dialer_icon_color_secondary">#E1E1E1</color>
- <color name="dialer_icon_color_white">#FFFFFF</color>
+ <color name="dialer_background_color">#FAFAFA</color>
</resources>
diff --git a/java/com/android/dialer/theme/hidden/res/values/colors_pallet.xml b/java/com/android/dialer/theme/hidden/res/values/colors_pallet.xml
new file mode 100644
index 0000000..7a092b2
--- /dev/null
+++ b/java/com/android/dialer/theme/hidden/res/values/colors_pallet.xml
@@ -0,0 +1,35 @@
+<!--
+ ~ 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
+ -->
+<resources>
+ <color name="google_blue_900">#174EA6</color>
+ <color name="google_blue_800">#185ABC</color>
+ <color name="google_blue_700">#1967D2</color>
+ <color name="google_blue_600">#1A73E8</color>
+ <color name="google_blue_500">#4285F4</color>
+ <color name="google_blue_100">#D2E3FC</color>
+ <color name="google_blue_50">#E8F0FE</color>
+
+ <color name="google_grey_900">#202124</color>
+ <color name="google_grey_800">#3C4043</color>
+ <color name="google_grey_700">#5F6368</color>
+ <color name="google_grey_600">#80868B</color>
+ <color name="google_grey_500">#9AA0A6</color>
+ <color name="google_grey_400">#BDC1C6</color>
+ <color name="google_grey_300">#DADCE0</color>
+ <color name="google_grey_200">#E8EAED</color>
+ <color name="google_grey_100">#F1F3F4</color>
+ <color name="google_grey_50">#F8F9FA</color>
+</resources>
diff --git a/java/com/android/dialer/theme/hidden/res/values/styles.xml b/java/com/android/dialer/theme/hidden/res/values/styles.xml
index 90e4529..44a35f8 100644
--- a/java/com/android/dialer/theme/hidden/res/values/styles.xml
+++ b/java/com/android/dialer/theme/hidden/res/values/styles.xml
@@ -55,5 +55,7 @@
<!-- TODO(a bug): figure out why ?android:attr/colorPrimary doesn't work here -->
<item name="android:colorAccent">@color/dialer_theme_color</item>
<item name="colorAccent">@color/dialer_theme_color</item>
+ <item name="android:textColorPrimary">@color/dialer_primary_text_color</item>
+ <item name="android:textColorSecondary">@color/dialer_secondary_text_color</item>
</style>
</resources>
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusCorruptionHandler.java b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusCorruptionHandler.java
index 630a17d..75b21e7 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailStatusCorruptionHandler.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailStatusCorruptionHandler.java
@@ -27,7 +27,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
@@ -47,7 +47,9 @@
public static void maybeFixVoicemailStatus(Context context, Cursor statusCursor, Source source) {
- if (ConfigProviderBindings.get(context).getBoolean(CONFIG_VVM_STATUS_FIX_DISABLED, false)) {
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(CONFIG_VVM_STATUS_FIX_DISABLED, false)) {
return;
}
diff --git a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
index 6225212..efc094c 100644
--- a/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
+++ b/java/com/android/dialer/voicemail/listui/error/VoicemailTosMessageCreator.java
@@ -37,7 +37,7 @@
import android.view.View.OnClickListener;
import com.android.dialer.common.LogUtil;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.voicemail.listui.error.VoicemailErrorMessage.Action;
@@ -552,7 +552,8 @@
}
private String getLearnMoreUrl() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(
"voicemail_transcription_learn_more_url",
context.getString(R.string.dialer_terms_and_conditions_learn_more_url));
diff --git a/java/com/android/dialer/widget/DialerToolbar.java b/java/com/android/dialer/widget/DialerToolbar.java
index 02ec8c0..40dabe8 100644
--- a/java/com/android/dialer/widget/DialerToolbar.java
+++ b/java/com/android/dialer/widget/DialerToolbar.java
@@ -29,13 +29,13 @@
public class DialerToolbar extends Toolbar {
private final TextView title;
- private final TextView subtitle;
+ private final BidiTextView subtitle;
public DialerToolbar(Context context, @Nullable AttributeSet attributeSet) {
super(context, attributeSet);
inflate(context, R.layout.dialer_toolbar, this);
title = (TextView) findViewById(R.id.title);
- subtitle = (TextView) findViewById(R.id.subtitle);
+ subtitle = (BidiTextView) findViewById(R.id.subtitle);
setElevation(getResources().getDimensionPixelSize(R.dimen.toolbar_elevation));
setBackgroundColor(ThemeComponent.get(context).theme().getColorPrimary());
diff --git a/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml b/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml
old mode 100644
new mode 100755
index a75176a..3b4d136
--- a/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml
+++ b/java/com/android/dialer/widget/res/layout/dialer_toolbar.xml
@@ -31,7 +31,7 @@
android:textColor="?android:attr/textColorPrimaryInverse"
style="@style/Dialer.TextAppearance.Header2"/>
- <TextView
+ <com.android.dialer.widget.BidiTextView
android:id="@+id/subtitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/java/com/android/incallui/CallCardPresenter.java b/java/com/android/incallui/CallCardPresenter.java
index 6614e7c..91255cc 100644
--- a/java/com/android/incallui/CallCardPresenter.java
+++ b/java/com/android/incallui/CallCardPresenter.java
@@ -48,7 +48,7 @@
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression;
import com.android.dialer.logging.Logger;
import com.android.dialer.multimedia.MultimediaData;
@@ -768,7 +768,8 @@
}
private boolean shouldShowLocation() {
- if (!ConfigProviderBindings.get(context)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_ENABLE_EMERGENCY_LOCATION, CONFIG_ENABLE_EMERGENCY_LOCATION_DEFAULT)) {
LogUtil.i("CallCardPresenter.getLocationFragment", "disabled by config.");
return false;
@@ -840,7 +841,8 @@
int scale = batteryStatus.getIntExtra(BatteryManager.EXTRA_SCALE, -1);
float batteryPercent = (100f * level) / scale;
long threshold =
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(
CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION,
CONFIG_MIN_BATTERY_PERCENT_FOR_EMERGENCY_LOCATION_DEFAULT);
diff --git a/java/com/android/incallui/DialpadFragment.java b/java/com/android/incallui/DialpadFragment.java
index 343cb34..2ae2aca 100644
--- a/java/com/android/incallui/DialpadFragment.java
+++ b/java/com/android/incallui/DialpadFragment.java
@@ -21,6 +21,7 @@
import android.telephony.PhoneNumberUtils;
import android.util.ArrayMap;
import android.util.AttributeSet;
+import android.view.ContextThemeWrapper;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
@@ -136,7 +137,9 @@
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- final View parent = inflater.inflate(R.layout.incall_dialpad_fragment, container, false);
+ Context contextThemeWrapper = new ContextThemeWrapper(getActivity(), R.style.Dialer_ThemeBase);
+ LayoutInflater layoutInflater = inflater.cloneInContext(contextThemeWrapper);
+ final View parent = layoutInflater.inflate(R.layout.incall_dialpad_fragment, container, false);
dialpadView = (DialpadView) parent.findViewById(R.id.dialpad_view);
dialpadView.setCanDigitsBeEdited(false);
dialpadView.setBackgroundResource(R.color.incall_dialpad_background);
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 2ec1730..7d9608a 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -62,7 +62,7 @@
import com.android.dialer.common.concurrent.DialerExecutorComponent;
import com.android.dialer.common.concurrent.ThreadUtil;
import com.android.dialer.common.concurrent.UiListener;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.Logger;
import com.android.dialer.logging.ScreenEvent;
import com.android.dialer.metrics.Metrics;
@@ -1506,7 +1506,8 @@
LogUtil.i("InCallActivity.shouldAllowAnswerAndRelease", "video call");
return false;
}
- if (!ConfigProviderBindings.get(this)
+ if (!ConfigProviderComponent.get(this)
+ .getConfigProvider()
.getBoolean(ConfigNames.ANSWER_AND_RELEASE_ENABLED, true)) {
LogUtil.i("InCallActivity.shouldAllowAnswerAndRelease", "disabled by config");
return false;
diff --git a/java/com/android/incallui/InCallPresenter.java b/java/com/android/incallui/InCallPresenter.java
index 5aabf06..150499f 100644
--- a/java/com/android/incallui/InCallPresenter.java
+++ b/java/com/android/incallui/InCallPresenter.java
@@ -423,6 +423,10 @@
if (dialerCall == null) {
dialerCall = callList.getOutgoingCall();
}
+ // Outgoing call can be disconnected and reason will be shown in toast
+ if (dialerCall == null) {
+ dialerCall = callList.getDisconnectedCall();
+ }
if (dialerCall == null) {
return false;
}
diff --git a/java/com/android/incallui/ReturnToCallController.java b/java/com/android/incallui/ReturnToCallController.java
index 09e1845..94ce8d7 100644
--- a/java/com/android/incallui/ReturnToCallController.java
+++ b/java/com/android/incallui/ReturnToCallController.java
@@ -32,7 +32,7 @@
import com.android.bubble.BubbleInfo.Action;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.lettertile.LetterTileDrawable;
import com.android.dialer.telecom.TelecomUtil;
import com.android.dialer.theme.base.ThemeComponent;
@@ -82,7 +82,9 @@
private InCallState inCallState;
public static boolean isEnabled(Context context) {
- return ConfigProviderBindings.get(context).getBoolean("enable_return_to_call_bubble_v2", false);
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("enable_return_to_call_bubble_v2", false);
}
public ReturnToCallController(Context context, ContactInfoCache contactInfoCache) {
diff --git a/java/com/android/incallui/StatusBarNotifier.java b/java/com/android/incallui/StatusBarNotifier.java
index 27d23c4..6519e00 100644
--- a/java/com/android/incallui/StatusBarNotifier.java
+++ b/java/com/android/incallui/StatusBarNotifier.java
@@ -66,7 +66,7 @@
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.contactphoto.BitmapUtil;
import com.android.dialer.enrichedcall.EnrichedCallManager;
import com.android.dialer.enrichedcall.Session;
@@ -292,7 +292,8 @@
if (callState == DialerCallState.INCOMING
|| callState == DialerCallState.CALL_WAITING
|| isVideoUpgradeRequest) {
- if (ConfigProviderBindings.get(context)
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("quiet_incoming_call_if_ui_showing", true)) {
notificationType =
InCallPresenter.getInstance().isShowingInCallUi()
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index 41c3354..88713f4 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -29,7 +29,7 @@
import android.view.SurfaceView;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.util.PermissionsUtil;
import com.android.incallui.InCallPresenter.InCallDetailsListener;
import com.android.incallui.InCallPresenter.InCallOrientationListener;
@@ -1081,7 +1081,9 @@
"VideoCallPresenter.shouldShowCameraPermissionToast", "already shown for this call");
return false;
}
- if (!ConfigProviderBindings.get(context).getBoolean("camera_permission_dialog_allowed", true)) {
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("camera_permission_dialog_allowed", true)) {
LogUtil.i("VideoCallPresenter.shouldShowCameraPermissionToast", "disabled by config");
return false;
}
diff --git a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
index b661579..494a622 100644
--- a/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
+++ b/java/com/android/incallui/answer/impl/classifier/HumanInteractionClassifier.java
@@ -20,7 +20,7 @@
import android.hardware.SensorEvent;
import android.util.DisplayMetrics;
import android.view.MotionEvent;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
/** An classifier trying to determine whether it is a human interacting with the phone or not. */
class HumanInteractionClassifier extends Classifier {
@@ -44,7 +44,8 @@
classifierData = new ClassifierData(dpi, displayMetrics.heightPixels);
historyEvaluator = new HistoryEvaluator();
enabled =
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_ANSWER_FALSE_TOUCH_DETECTION_ENABLED, true);
strokeClassifiers =
diff --git a/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java b/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java
index 2ed4346..734fa96 100644
--- a/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java
+++ b/java/com/android/incallui/answer/impl/hint/AnswerHintFactory.java
@@ -24,7 +24,7 @@
import android.support.annotation.VisibleForTesting;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.storage.StorageComponent;
import com.android.incallui.util.AccessibilityUtil;
@@ -95,7 +95,9 @@
.unencryptedSharedPrefs()
.getInt(ANSWERED_COUNT_PREFERENCE_KEY, 0);
long threshold =
- ConfigProviderBindings.get(context).getLong(CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY, 3);
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getLong(CONFIG_ANSWER_HINT_ANSWERED_THRESHOLD_KEY, 3);
LogUtil.i(
"AnswerHintFactory.shouldShowAnswerHint",
"answerCount: %d, threshold: %d",
@@ -110,7 +112,8 @@
* string.
*/
private static boolean isDeviceWhitelisted(Context context, String device) {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(CONFIG_ANSWER_HINT_WHITELISTED_DEVICES_KEY, DEFAULT_WHITELISTED_DEVICES_CSV)
.contains("/" + device + "/");
}
diff --git a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
index f6444e5..e9d2c6f 100644
--- a/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
+++ b/java/com/android/incallui/answer/impl/hint/PawSecretCodeListener.java
@@ -25,7 +25,7 @@
import android.text.TextUtils;
import android.widget.Toast;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.logging.DialerImpression.Type;
import com.android.dialer.logging.Logger;
import com.android.dialer.storage.StorageComponent;
@@ -62,7 +62,9 @@
return;
}
String secretCode =
- ConfigProviderBindings.get(context).getString(CONFIG_PAW_SECRET_CODE, "729");
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getString(CONFIG_PAW_SECRET_CODE, "729");
if (secretCode == null) {
return;
}
diff --git a/java/com/android/incallui/answer/impl/res/drawable/shape_chip_drawable.xml b/java/com/android/incallui/answer/impl/res/drawable/shape_chip_drawable.xml
index 3740f3d..adb153f 100644
--- a/java/com/android/incallui/answer/impl/res/drawable/shape_chip_drawable.xml
+++ b/java/com/android/incallui/answer/impl/res/drawable/shape_chip_drawable.xml
@@ -18,7 +18,7 @@
android:color="#DADCE0">
<item android:id="@android:id/mask">
<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="@color/dialer_background_light"/>
+ <solid android:color="?android:attr/colorBackground"/>
<padding
android:bottom="9dp"
android:left="8dp"
@@ -29,7 +29,7 @@
</item>
<item>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
- <solid android:color="@color/dialer_background_floating_light"/>
+ <solid android:color="#FFFFFF"/>
<stroke
android:width="1dp"
android:color="#DADCE0"/>
@@ -41,4 +41,4 @@
<corners android:radius="40dp"/>
</shape>
</item>
-</ripple>
\ No newline at end of file
+</ripple>
diff --git a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
index 939d120..8aeb05f 100644
--- a/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
+++ b/java/com/android/incallui/answerproximitysensor/AnswerProximitySensor.java
@@ -22,7 +22,7 @@
import android.os.Trace;
import android.view.Display;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.incallui.call.DialerCall;
import com.android.incallui.call.DialerCallListener;
import com.android.incallui.call.state.DialerCallState;
@@ -53,7 +53,8 @@
return false;
}
- if (!ConfigProviderBindings.get(context)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_ANSWER_PROXIMITY_SENSOR_ENABLED, true)) {
LogUtil.i("AnswerProximitySensor.shouldUse", "disabled by config");
Trace.endSection();
@@ -84,7 +85,8 @@
this.call = call;
LogUtil.i("AnswerProximitySensor.constructor", "acquiring lock");
- if (ConfigProviderBindings.get(context)
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(CONFIG_ANSWER_PSEUDO_PROXIMITY_WAKE_LOCK_ENABLED, true)) {
answerProximityWakeLock = new PseudoProximityWakeLock(context, pseudoScreenState);
} else {
diff --git a/java/com/android/incallui/call/CallList.java b/java/com/android/incallui/call/CallList.java
index 634a302..31afe71 100644
--- a/java/com/android/incallui/call/CallList.java
+++ b/java/com/android/incallui/call/CallList.java
@@ -150,7 +150,9 @@
if (SpamComponent.get(context).spamSettings().isSpamEnabled()) {
String number = TelecomCallUtil.getNumber(telecomCall);
ListenableFuture<SpamStatus> futureSpamStatus =
- SpamComponent.get(context).spam().checkSpamStatus(number, call.getCountryIso());
+ SpamComponent.get(context)
+ .spam()
+ .checkSpamStatusForInCallUi(number, call.getCountryIso());
Futures.addCallback(
futureSpamStatus,
diff --git a/java/com/android/incallui/call/DialerCall.java b/java/com/android/incallui/call/DialerCall.java
index b2c8dcc..904a5a8 100644
--- a/java/com/android/incallui/call/DialerCall.java
+++ b/java/com/android/incallui/call/DialerCall.java
@@ -60,7 +60,7 @@
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
import com.android.dialer.compat.telephony.TelephonyManagerCompat;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.duo.DuoComponent;
import com.android.dialer.enrichedcall.EnrichedCallCapabilities;
import com.android.dialer.enrichedcall.EnrichedCallComponent;
@@ -315,6 +315,7 @@
@Override
public void onRttInitiationFailure(Call call, int reason) {
LogUtil.v("TelecomCallCallback.onRttInitiationFailure", "reason=%d", reason);
+ Toast.makeText(context, R.string.rtt_call_not_available_toast, Toast.LENGTH_LONG).show();
update();
}
@@ -841,7 +842,8 @@
boolean isInEmergencyCallbackWindow(long timestampMillis) {
long emergencyCallbackWindowMillis =
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(CONFIG_EMERGENCY_CALLBACK_WINDOW_MILLIS, TimeUnit.MINUTES.toMillis(5));
return System.currentTimeMillis() - timestampMillis < emergencyCallbackWindowMillis;
}
diff --git a/java/com/android/incallui/contactgrid/BottomRow.java b/java/com/android/incallui/contactgrid/BottomRow.java
index 7388c50..767d666 100644
--- a/java/com/android/incallui/contactgrid/BottomRow.java
+++ b/java/com/android/incallui/contactgrid/BottomRow.java
@@ -18,9 +18,6 @@
import android.content.Context;
import android.support.annotation.Nullable;
-import android.telephony.PhoneNumberUtils;
-import android.text.BidiFormatter;
-import android.text.TextDirectionHeuristics;
import android.text.TextUtils;
import com.android.incallui.call.state.DialerCallState;
import com.android.incallui.incall.protocol.PrimaryCallState;
@@ -118,21 +115,15 @@
return primaryInfo.location();
}
if (!primaryInfo.nameIsNumber() && !TextUtils.isEmpty(primaryInfo.number())) {
- CharSequence spannedNumber = spanDisplayNumber(primaryInfo.number());
if (primaryInfo.label() == null) {
- return spannedNumber;
+ return primaryInfo.number();
} else {
- return TextUtils.concat(primaryInfo.label(), " ", spannedNumber);
+ return TextUtils.concat(primaryInfo.label(), " ", primaryInfo.number());
}
}
return null;
}
- private static CharSequence spanDisplayNumber(String displayNumber) {
- return PhoneNumberUtils.createTtsSpannable(
- BidiFormatter.getInstance().unicodeWrap(displayNumber, TextDirectionHeuristics.LTR));
- }
-
private static boolean isIncoming(PrimaryCallState state) {
return state.state() == DialerCallState.INCOMING
|| state.state() == DialerCallState.CALL_WAITING;
diff --git a/java/com/android/incallui/contactgrid/ContactGridManager.java b/java/com/android/incallui/contactgrid/ContactGridManager.java
index 6d04a27..189f6fe 100644
--- a/java/com/android/incallui/contactgrid/ContactGridManager.java
+++ b/java/com/android/incallui/contactgrid/ContactGridManager.java
@@ -35,11 +35,12 @@
import android.widget.ViewAnimator;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.glidephotomanager.GlidePhotoManagerComponent;
import com.android.dialer.glidephotomanager.PhotoInfo;
import com.android.dialer.lettertile.LetterTileDrawable;
import com.android.dialer.util.DrawableConverter;
+import com.android.dialer.widget.BidiTextView;
import com.android.incallui.incall.protocol.ContactPhotoType;
import com.android.incallui.incall.protocol.PrimaryCallState;
import com.android.incallui.incall.protocol.PrimaryInfo;
@@ -77,7 +78,7 @@
private final TextView forwardedNumberView;
private final ImageView spamIconImageView;
private final ViewAnimator bottomTextSwitcher;
- private final TextView bottomTextView;
+ private final BidiTextView bottomTextView;
private final Chronometer bottomTimerView;
private final Space topRowSpace;
private int avatarSize;
@@ -301,7 +302,9 @@
if (hideAvatar) {
avatarImageView.setVisibility(View.GONE);
} else if (avatarSize > 0 && updateAvatarVisibility()) {
- if (ConfigProviderBindings.get(context).getBoolean("enable_glide_photo", false)) {
+ if (ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean("enable_glide_photo", false)) {
loadPhotoWithGlide();
} else {
loadPhotoWithLegacy();
@@ -315,7 +318,8 @@
PhotoInfo.newBuilder()
.setIsBusiness(primaryInfo.photoType() == ContactPhotoType.BUSINESS)
.setIsVoicemail(primaryCallState.isVoiceMailNumber())
- .setIsSpam(primaryInfo.isSpam());
+ .setIsSpam(primaryInfo.isSpam())
+ .setIsConference(primaryCallState.isConference());
// Contact has a name, that is a number.
if (primaryInfo.nameIsNumber() && primaryInfo.number() != null) {
diff --git a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
index ce355ea..73db413 100644
--- a/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
+++ b/java/com/android/incallui/contactgrid/res/layout/incall_contactgrid_bottom_row.xml
@@ -53,7 +53,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="2dp"
android:measureAllChildren="false">
- <TextView
+ <com.android.dialer.widget.BidiTextView
android:id="@+id/contactgrid_bottom_text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
diff --git a/java/com/android/incallui/rtt/impl/res/color/submit_button_background_color.xml b/java/com/android/incallui/rtt/impl/res/color/submit_button_background_color.xml
new file mode 100644
index 0000000..0da2c37
--- /dev/null
+++ b/java/com/android/incallui/rtt/impl/res/color/submit_button_background_color.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ 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
+ -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false"
+ android:color="#BDBDBD" />
+ <item android:color="#FFFFFF" />
+</selector>
\ No newline at end of file
diff --git a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
index 21d00a3..cff2b3f 100644
--- a/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
+++ b/java/com/android/incallui/rtt/impl/res/layout/frag_rtt_chat.xml
@@ -62,11 +62,11 @@
android:layout_height="53dp"
android:layout_gravity="bottom"
android:background="@drawable/input_bubble_background"
- android:backgroundTint="?colorIcon"
+ android:backgroundTint="@color/submit_button_background_color"
android:backgroundTintMode="multiply"
android:contentDescription="@string/content_description_rtt_check_button"
android:src="@drawable/quantum_ic_done_vd_theme_24"
- android:tint="?android:attr/colorPrimary"
+ android:tint="@color/submit_button_color"
android:visibility="gone"/>
</LinearLayout>
diff --git a/java/com/android/incallui/spam/SpamAlternativeExperimentUtil.java b/java/com/android/incallui/spam/SpamAlternativeExperimentUtil.java
index 52eadcf..27942d8 100644
--- a/java/com/android/incallui/spam/SpamAlternativeExperimentUtil.java
+++ b/java/com/android/incallui/spam/SpamAlternativeExperimentUtil.java
@@ -18,7 +18,7 @@
import android.content.Context;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
/** Returns resource id based on experiment number. */
public final class SpamAlternativeExperimentUtil {
@@ -29,7 +29,9 @@
*/
public static int getResourceIdByName(String resourceName, Context context) {
long experiment =
- ConfigProviderBindings.get(context).getLong("experiment_for_alternative_spam_word", 230150);
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getLong("experiment_for_alternative_spam_word", 230150);
LogUtil.i(
"SpamAlternativeExperimentUtil.getResourceIdByName", "using experiment %d", experiment);
String modifiedResourceName = resourceName;
diff --git a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java b/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
index b060f64..f2916f4 100644
--- a/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
+++ b/java/com/android/incallui/speakeasy/SpeakEasyCallManager.java
@@ -54,6 +54,16 @@
*/
boolean isAvailable(@NonNull Context context);
+ /**
+ * Optional: Performs work necessary to happen-before callers use other methods on this interface.
+ *
+ * @apiNote Use of this API is completely optional, and callers are NOT required to invoke this
+ * method prior to using other methods on the interface.
+ * @implSpec Other members of this interface always promise to do any required initialization work
+ * at the time they are invoked. This method will always be idempotent.
+ */
+ default void performManualInitialization() {}
+
/** Returns the config provider flag associated with the feature. */
@NonNull
String getConfigProviderFlag();
diff --git a/java/com/android/incallui/theme/res/values/colors.xml b/java/com/android/incallui/theme/res/values/colors.xml
index cb894bb..059fe59 100644
--- a/java/com/android/incallui/theme/res/values/colors.xml
+++ b/java/com/android/incallui/theme/res/values/colors.xml
@@ -25,9 +25,6 @@
<!-- Background color for status bar. For portrait this will be ignored. -->
<color name="statusbar_background_color">?android:attr/colorPrimary</color>
- <!-- 20% opacity, theme color. -->
- <color name="incall_dialpad_touch_tint">@color/dialer_theme_color_20pct</color>
-
<!-- Background colors for InCallUI. This is a set of colors which pass WCAG
AA and all have a contrast ratio over 5:1.
diff --git a/java/com/android/incallui/theme/res/values/styles.xml b/java/com/android/incallui/theme/res/values/styles.xml
index 3475e35..e6d6b07 100644
--- a/java/com/android/incallui/theme/res/values/styles.xml
+++ b/java/com/android/incallui/theme/res/values/styles.xml
@@ -25,7 +25,7 @@
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
- <item name="dialpad_key_button_touch_tint">@color/incall_dialpad_touch_tint</item>
+ <item name="dialpad_key_button_touch_tint">?attr/colorPrimary20pct</item>
<item name="dialpad_style">@style/InCallDialpad</item>
<item name="android:windowAnimationStyle">@null</item>
@@ -34,11 +34,14 @@
</style>
<style name="Theme.InCallScreen" parent="@style/Dialer.Dark.ThemeBase.NoActionBar">
+ <item name="android:textColorPrimary">@android:color/white</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowDrawsSystemBarBackgrounds">true</item>
+ <item name="android:colorPrimaryDark">@color/dialer_theme_color_dark</item>
+ <item name="colorPrimaryDark">@color/dialer_theme_color_dark</item>
- <item name="dialpad_key_button_touch_tint">@color/incall_dialpad_touch_tint</item>
+ <item name="dialpad_key_button_touch_tint">?attr/colorPrimary20pct</item>
<item name="dialpad_style">@style/InCallDialpad</item>
<item name="android:windowAnimationStyle">@null</item>
@@ -49,7 +52,7 @@
<style name="Theme.InCallScreen.ManageConference" parent="Dialer.ThemeBase.ActionBar">
</style>
- <style name="InCallDialpad" parent="Dialpad.Light">
+ <style name="InCallDialpad" parent="Dialpad.Themed">
<item name="dialpad_key_number_margin_bottom">
@dimen/incall_dialpad_key_number_margin_bottom
</item>
@@ -72,8 +75,6 @@
@dimen/incall_end_call_spacing
</item>
<item name="dialpad_elevation">10dp</item>
- <item name="dialpad_text_color">?android:attr/textColorPrimaryInverse</item>
- <item name="dialpad_text_color_secondary">?android:attr/textColorSecondaryInverse</item>
</style>
<style name="AfterCallNotificationTheme" parent="Dialer.ThemeBase.NoActionBar">
diff --git a/java/com/android/incallui/videotech/duo/DuoVideoTech.java b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
index ac74e54..47f0757 100644
--- a/java/com/android/incallui/videotech/duo/DuoVideoTech.java
+++ b/java/com/android/incallui/videotech/duo/DuoVideoTech.java
@@ -24,7 +24,7 @@
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
import com.android.dialer.common.concurrent.DefaultFutureCallback;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.dialer.duo.Duo;
import com.android.dialer.duo.DuoListener;
import com.android.dialer.logging.DialerImpression;
@@ -60,7 +60,8 @@
@Override
public boolean isAvailable(Context context, PhoneAccountHandle phoneAccountHandle) {
- if (!ConfigProviderBindings.get(context)
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("enable_lightbringer_video_upgrade", true)) {
LogUtil.v("DuoVideoTech.isAvailable", "upgrade disabled by flag");
return false;
diff --git a/java/com/android/voicemail/impl/DialerVvmConfigManager.java b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
index 7fa960e..99c95dd 100644
--- a/java/com/android/voicemail/impl/DialerVvmConfigManager.java
+++ b/java/com/android/voicemail/impl/DialerVvmConfigManager.java
@@ -23,7 +23,7 @@
import android.support.annotation.Nullable;
import android.support.annotation.VisibleForTesting;
import android.util.ArrayMap;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.impl.utils.XmlUtils;
import com.google.common.collect.ComparisonChain;
import java.io.IOException;
@@ -133,7 +133,8 @@
PersistableBundle bundle = (PersistableBundle) object;
if (bundle.containsKey(KEY_FEATURE_FLAG_NAME)
- && !ConfigProviderBindings.get(context)
+ && !ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean(bundle.getString(KEY_FEATURE_FLAG_NAME), false)) {
continue;
}
diff --git a/java/com/android/voicemail/impl/VoicemailClientImpl.java b/java/com/android/voicemail/impl/VoicemailClientImpl.java
index 187ded9..36e5a6c 100644
--- a/java/com/android/voicemail/impl/VoicemailClientImpl.java
+++ b/java/com/android/voicemail/impl/VoicemailClientImpl.java
@@ -30,7 +30,7 @@
import android.telephony.TelephonyManager;
import com.android.dialer.common.Assert;
import com.android.dialer.common.LogUtil;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.PinChanger;
import com.android.voicemail.VisualVoicemailTypeExtensions;
import com.android.voicemail.VoicemailClient;
@@ -105,7 +105,9 @@
return false;
}
- if (!ConfigProviderBindings.get(context).getBoolean(ALLOW_VOICEMAIL_ARCHIVE, false)) {
+ if (!ConfigProviderComponent.get(context)
+ .getConfigProvider()
+ .getBoolean(ALLOW_VOICEMAIL_ARCHIVE, false)) {
LogUtil.i(
"VoicemailClientImpl.isVoicemailArchiveAllowed",
"feature disabled by config: %s",
diff --git a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
index ce5094f..6ac2337 100644
--- a/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
+++ b/java/com/android/voicemail/impl/protocol/Vvm3Subscriber.java
@@ -31,7 +31,7 @@
import android.text.Spanned;
import android.text.style.URLSpan;
import android.util.ArrayMap;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import com.android.voicemail.impl.ActivationTask;
import com.android.voicemail.impl.Assert;
import com.android.voicemail.impl.OmtpEvents;
@@ -312,7 +312,8 @@
@VisibleForTesting
static List<Pattern> getSubscribeLinkPatterns(Context context) {
String patternsJsonString =
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(
VVM3_SUBSCRIBE_LINK_PATTERNS_JSON_ARRAY, VVM3_SUBSCRIBE_LINK_DEFAULT_PATTERNS);
List<Pattern> patterns = new ArrayList<>();
diff --git a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
index 54a1ae4..66bf16c 100644
--- a/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
+++ b/java/com/android/voicemail/impl/transcribe/TranscriptionConfigProvider.java
@@ -17,7 +17,7 @@
import android.content.Context;
import android.os.Build;
-import com.android.dialer.configprovider.ConfigProviderBindings;
+import com.android.dialer.configprovider.ConfigProviderComponent;
import java.util.concurrent.TimeUnit;
/** Provides configuration values needed to connect to the transcription server. */
@@ -30,20 +30,23 @@
public boolean isVoicemailTranscriptionAvailable() {
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.O
- && ConfigProviderBindings.get(context)
+ && ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("voicemail_transcription_available", false);
}
public String getServerAddress() {
// Private voicemail transcription service
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(
"voicemail_transcription_server_address", "voicemailtranscription-pa.googleapis.com");
}
public String getApiKey() {
// Android API key restricted to com.google.android.dialer
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getString(
"voicemail_transcription_client_api_key", "AIzaSyAXdDnif6B7sBYxU8hzw9qAp3pRPVHs060");
}
@@ -53,47 +56,55 @@
}
public boolean shouldUsePlaintext() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("voicemail_transcription_server_use_plaintext", false);
}
public boolean shouldUseSyncApi() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("voicemail_transcription_server_use_sync_api", false);
}
public long getMaxTranscriptionRetries() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong("voicemail_transcription_max_transcription_retries", 2L);
}
public int getMaxGetTranscriptPolls() {
return (int)
- ConfigProviderBindings.get(context)
+ ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong("voicemail_transcription_max_get_transcript_polls", 20L);
}
public long getInitialGetTranscriptPollDelayMillis() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(
"voicemail_transcription_get_initial_transcript_poll_delay_millis",
TimeUnit.SECONDS.toMillis(1));
}
public long getMaxGetTranscriptPollTimeMillis() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getLong(
"voicemail_transcription_get_max_transcript_poll_time_millis",
TimeUnit.MINUTES.toMillis(20));
}
public boolean isVoicemailDonationAvailable() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("voicemail_transcription_donation_available", false);
}
public boolean useClientGeneratedVoicemailIds() {
- return ConfigProviderBindings.get(context)
+ return ConfigProviderComponent.get(context)
+ .getConfigProvider()
.getBoolean("voicemail_transcription_client_generated_voicemail_ids", false);
}