Merge changes If0de7526,I5fa9e123,I70f2e6db

* changes:
  Add 311910 to motorola sprint configs.
  Remove obsolete methods in CompatUtils and rename it as "LocaleUtils".
  Placing a call from a search action now closes the keyboard.
diff --git a/java/com/android/dialer/app/DialtactsActivity.java b/java/com/android/dialer/app/DialtactsActivity.java
index 3d61f73..9057cd9 100644
--- a/java/com/android/dialer/app/DialtactsActivity.java
+++ b/java/com/android/dialer/app/DialtactsActivity.java
@@ -92,7 +92,6 @@
 import com.android.dialer.common.UiUtil;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactsfragment.ContactsFragment;
@@ -103,6 +102,7 @@
 import com.android.dialer.dialpadview.DialpadFragment.DialpadListener;
 import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback;
 import com.android.dialer.duo.DuoComponent;
+import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.interactions.PhoneNumberInteraction;
 import com.android.dialer.interactions.PhoneNumberInteraction.InteractionErrorCode;
 import com.android.dialer.logging.DialerImpression;
@@ -538,7 +538,7 @@
     // (1) the activity is not recreated with a new configuration, or
     // (2) the activity is recreated with a new configuration but the change is a language change.
     boolean isLanguageChanged =
-        !CompatUtils.getLocale(this).getISO3Language().equals(savedLanguageCode);
+        !LocaleUtils.getLocale(this).getISO3Language().equals(savedLanguageCode);
     if (!wasConfigurationChange || isLanguageChanged) {
       dialerDatabaseHelper.startSmartDialUpdateThread(/* forceUpdate = */ isLanguageChanged);
     }
@@ -638,7 +638,7 @@
     super.onSaveInstanceState(outState);
     outState.putString(KEY_SEARCH_QUERY, searchQuery);
     outState.putString(KEY_DIALPAD_QUERY, dialpadQuery);
-    outState.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(this).getISO3Language());
+    outState.putString(KEY_SAVED_LANGUAGE_CODE, LocaleUtils.getLocale(this).getISO3Language());
     outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, inRegularSearch);
     outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, inDialpadSearch);
     outState.putBoolean(KEY_IN_NEW_SEARCH_UI, inNewSearch);
diff --git a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
index 8fbc459..3f7def9 100644
--- a/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
+++ b/java/com/android/dialer/app/calllog/CallLogListItemViewHolder.java
@@ -71,7 +71,6 @@
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.AsyncTaskExecutors;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactphoto.ContactPhotoManager;
@@ -309,9 +308,7 @@
     }
 
     quickContactView.setOverlay(null);
-    if (CompatUtils.hasPrioritizedMimeType()) {
-      quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
-    }
+    quickContactView.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
     primaryActionButtonView.setOnClickListener(this);
     primaryActionView.setOnClickListener(this.expandCollapseListener);
     if (this.voicemailPlaybackPresenter != null
diff --git a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
index 3acb204..2c08558 100644
--- a/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
+++ b/java/com/android/dialer/app/filterednumber/NumbersAdapter.java
@@ -27,7 +27,6 @@
 import android.widget.SimpleCursorAdapter;
 import android.widget.TextView;
 import com.android.dialer.app.R;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.contactphoto.ContactPhotoManager;
 import com.android.dialer.contactphoto.ContactPhotoManager.DefaultImageRequest;
 import com.android.dialer.lettertile.LetterTileDrawable;
@@ -63,9 +62,7 @@
     final QuickContactBadge quickContactBadge =
         (QuickContactBadge) view.findViewById(R.id.quick_contact_photo);
     quickContactBadge.setOverlay(null);
-    if (CompatUtils.hasPrioritizedMimeType()) {
-      quickContactBadge.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
-    }
+    quickContactBadge.setPrioritizedMimeType(Phone.CONTENT_ITEM_TYPE);
 
     ContactInfo info = contactInfoHelper.lookupNumber(number, countryIso);
     if (info == null) {
diff --git a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java b/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java
index 6096ca8..6b41547 100644
--- a/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java
+++ b/java/com/android/dialer/app/list/PhoneFavoriteSquareTileView.java
@@ -25,7 +25,6 @@
 import android.widget.TextView;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.dialer.app.R;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.logging.InteractionEvent;
 import com.android.dialer.logging.Logger;
 import com.android.dialer.widget.BidiTextView;
@@ -64,21 +63,12 @@
   }
 
   private void launchQuickContact() {
-    if (CompatUtils.hasPrioritizedMimeType()) {
-      QuickContact.showQuickContact(
-          getContext(),
-          PhoneFavoriteSquareTileView.this,
-          getLookupUri(),
-          null,
-          Phone.CONTENT_ITEM_TYPE);
-    } else {
-      QuickContact.showQuickContact(
-          getContext(),
-          PhoneFavoriteSquareTileView.this,
-          getLookupUri(),
-          QuickContact.MODE_LARGE,
-          null);
-    }
+    QuickContact.showQuickContact(
+        getContext(),
+        PhoneFavoriteSquareTileView.this,
+        getLookupUri(),
+        null,
+        Phone.CONTENT_ITEM_TYPE);
   }
 
   @Override
diff --git a/java/com/android/dialer/compat/CompatUtils.java b/java/com/android/dialer/compat/CompatUtils.java
deleted file mode 100644
index f0039e9..0000000
--- a/java/com/android/dialer/compat/CompatUtils.java
+++ /dev/null
@@ -1,83 +0,0 @@
-/*
- * Copyright (C) 2015 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.compat;
-
-import android.content.Context;
-import android.os.LocaleList;
-import java.util.Locale;
-
-/** TODO(linyuh): Remove deprecated methods and rename this class. */
-public final class CompatUtils {
-
-  /** PrioritizedMimeType is added in API level 23. */
-  @Deprecated
-  public static boolean hasPrioritizedMimeType() {
-    return true;
-  }
-
-  /**
-   * Determines if this version is compatible with multi-SIM and the phone account APIs. Can also
-   * force the version to be lower through SdkVersionOverride.
-   *
-   * @return {@code true} if multi-SIM capability is available, {@code false} otherwise.
-   */
-  @Deprecated
-  public static boolean isMSIMCompatible() {
-    return true;
-  }
-
-  /**
-   * Determines if this version is compatible with video calling. Can also force the version to be
-   * lower through SdkVersionOverride.
-   *
-   * @return {@code true} if video calling is allowed, {@code false} otherwise.
-   */
-  @Deprecated
-  public static boolean isVideoCompatible() {
-    return true;
-  }
-
-  /**
-   * Determines if this version is capable of using presence checking for video calling. Support for
-   * video call presence indication is added in SDK 24.
-   *
-   * @return {@code true} if video presence checking is allowed, {@code false} otherwise.
-   */
-  @Deprecated
-  public static boolean isVideoPresenceCompatible() {
-    return true;
-  }
-
-  /**
-   * Determines if this version is compatible with call subject. Can also force the version to be
-   * lower through SdkVersionOverride.
-   *
-   * @return {@code true} if call subject is a feature on this device, {@code false} otherwise.
-   */
-  @Deprecated
-  public static boolean isCallSubjectCompatible() {
-    return true;
-  }
-
-  /** Returns locale of the device. */
-  public static Locale getLocale(Context context) {
-    LocaleList localList = context.getResources().getConfiguration().getLocales();
-    if (!localList.isEmpty()) {
-      return localList.get(0);
-    }
-    return Locale.getDefault();
-  }
-}
diff --git a/java/com/android/dialer/dialpadview/DialpadCharMappings.java b/java/com/android/dialer/dialpadview/DialpadCharMappings.java
index 15793a5..11975e6 100644
--- a/java/com/android/dialer/dialpadview/DialpadCharMappings.java
+++ b/java/com/android/dialer/dialpadview/DialpadCharMappings.java
@@ -20,7 +20,7 @@
 import android.support.annotation.NonNull;
 import android.support.v4.util.SimpleArrayMap;
 import com.android.dialer.common.Assert;
-import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.i18n.LocaleUtils;
 
 /** A class containing character mappings for the dialpad. */
 public class DialpadCharMappings {
@@ -133,7 +133,7 @@
    * null if no character-key map for the language code is defined.
    */
   public static SimpleArrayMap<Character, Character> getCharToKeyMap(@NonNull Context context) {
-    return CHAR_TO_KEY_MAPS.get(CompatUtils.getLocale(context).getISO3Language());
+    return CHAR_TO_KEY_MAPS.get(LocaleUtils.getLocale(context).getISO3Language());
   }
 
   /**
@@ -163,7 +163,7 @@
    * preference or null if no key-characters map for the language code is defined.
    */
   static String[] getKeyToCharsMap(@NonNull Context context) {
-    return KEY_TO_CHAR_MAPS.get(CompatUtils.getLocale(context).getISO3Language());
+    return KEY_TO_CHAR_MAPS.get(LocaleUtils.getLocale(context).getISO3Language());
   }
 
   /** Returns the default key-characters map (the one that uses the Latin alphabet). */
diff --git a/java/com/android/dialer/dialpadview/DialpadView.java b/java/com/android/dialer/dialpadview/DialpadView.java
index 1bd8bad..0369b40 100644
--- a/java/com/android/dialer/dialpadview/DialpadView.java
+++ b/java/com/android/dialer/dialpadview/DialpadView.java
@@ -41,7 +41,7 @@
 import com.android.dialer.animation.AnimUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.i18n.LocaleUtils;
 import java.text.DecimalFormat;
 import java.text.NumberFormat;
 import java.util.Locale;
@@ -234,7 +234,7 @@
   }
 
   private NumberFormat getNumberFormat() {
-    Locale locale = CompatUtils.getLocale(getContext());
+    Locale locale = LocaleUtils.getLocale(getContext());
 
     // Return the Persian number format if the current language is Persian.
     return "fas".equals(locale.getISO3Language())
diff --git a/java/com/android/dialer/i18n/LocaleUtils.java b/java/com/android/dialer/i18n/LocaleUtils.java
new file mode 100644
index 0000000..0532cc3
--- /dev/null
+++ b/java/com/android/dialer/i18n/LocaleUtils.java
@@ -0,0 +1,33 @@
+/*
+ * Copyright (C) 2015 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.i18n;
+
+import android.content.Context;
+import android.os.LocaleList;
+import java.util.Locale;
+
+/** Utilities for locale. */
+public final class LocaleUtils {
+
+  /** Returns the default locale of the device. */
+  public static Locale getLocale(Context context) {
+    LocaleList localList = context.getResources().getConfiguration().getLocales();
+    if (!localList.isEmpty()) {
+      return localList.get(0);
+    }
+    return Locale.getDefault();
+  }
+}
diff --git a/java/com/android/dialer/main/impl/OldMainActivityPeer.java b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
index 2db331a..70444bd 100644
--- a/java/com/android/dialer/main/impl/OldMainActivityPeer.java
+++ b/java/com/android/dialer/main/impl/OldMainActivityPeer.java
@@ -69,7 +69,6 @@
 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.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.constants.ActivityRequestCodes;
 import com.android.dialer.contactsfragment.ContactsFragment;
@@ -82,6 +81,7 @@
 import com.android.dialer.dialpadview.DialpadFragment.LastOutgoingCallCallback;
 import com.android.dialer.dialpadview.DialpadFragment.OnDialpadQueryChangedListener;
 import com.android.dialer.duo.DuoComponent;
+import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.interactions.PhoneNumberInteraction;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
@@ -419,7 +419,7 @@
     // Start the thread that updates the smart dial database if the activity is recreated with a
     // language change.
     boolean forceUpdate =
-        !CompatUtils.getLocale(activity).getISO3Language().equals(savedLanguageCode);
+        !LocaleUtils.getLocale(activity).getISO3Language().equals(savedLanguageCode);
     Database.get(activity).getDatabaseHelper(activity).startSmartDialUpdateThread(forceUpdate);
     showPostCallPrompt();
 
@@ -476,7 +476,7 @@
 
   @Override
   public void onSaveInstanceState(Bundle bundle) {
-    bundle.putString(KEY_SAVED_LANGUAGE_CODE, CompatUtils.getLocale(activity).getISO3Language());
+    bundle.putString(KEY_SAVED_LANGUAGE_CODE, LocaleUtils.getLocale(activity).getISO3Language());
     bundle.putInt(KEY_CURRENT_TAB, bottomNav.getSelectedTab());
     searchController.onSaveInstanceState(bundle);
   }
diff --git a/java/com/android/dialer/oem/res/values-mcc311-mnc910/motorola_config.xml b/java/com/android/dialer/oem/res/values-mcc311-mnc910/motorola_config.xml
new file mode 100644
index 0000000..935627b
--- /dev/null
+++ b/java/com/android/dialer/oem/res/values-mcc311-mnc910/motorola_config.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
+  -->
+
+<resources>
+  <bool name="motorola_sprint_hd_codec">true</bool>
+  <bool name="motorola_hidden_menu_enabled">true</bool>
+</resources>
\ No newline at end of file
diff --git a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
index fb28ed5..89fe04a 100644
--- a/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
+++ b/java/com/android/dialer/phonenumbergeoutil/impl/PhoneNumberGeoUtilImpl.java
@@ -19,7 +19,7 @@
 import android.content.Context;
 import android.text.TextUtils;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtil;
 import com.google.i18n.phonenumbers.NumberParseException;
 import com.google.i18n.phonenumbers.PhoneNumberUtil;
@@ -45,7 +45,7 @@
     PhoneNumberUtil util = PhoneNumberUtil.getInstance();
     PhoneNumberOfflineGeocoder geocoder = PhoneNumberOfflineGeocoder.getInstance();
 
-    Locale locale = CompatUtils.getLocale(context);
+    Locale locale = LocaleUtils.getLocale(context);
     Phonenumber.PhoneNumber pn = null;
     try {
       LogUtil.v(
diff --git a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
index 33a94ea..df7716c 100644
--- a/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
+++ b/java/com/android/dialer/phonenumberutil/PhoneNumberHelper.java
@@ -32,8 +32,8 @@
 import android.text.TextUtils;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.compat.telephony.TelephonyManagerCompat;
+import com.android.dialer.i18n.LocaleUtils;
 import com.android.dialer.oem.MotorolaUtils;
 import com.android.dialer.oem.PhoneNumberUtilsAccessor;
 import com.android.dialer.phonenumbergeoutil.PhoneNumberGeoUtilComponent;
@@ -249,7 +249,7 @@
         TelephonyManagerCompat.getNetworkCountryIsoForPhoneAccountHandle(
             context, phoneAccountHandle);
     if (TextUtils.isEmpty(countryIso)) {
-      countryIso = CompatUtils.getLocale(context).getCountry();
+      countryIso = LocaleUtils.getLocale(context).getCountry();
       LogUtil.i(
           "PhoneNumberHelper.getCurrentCountryIso",
           "No CountryDetector; falling back to countryIso based on locale: " + countryIso);
diff --git a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
index 64c8b10..505f1c6 100644
--- a/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
+++ b/java/com/android/dialer/searchfragment/list/NewSearchFragment.java
@@ -148,7 +148,7 @@
       LayoutInflater inflater, @Nullable ViewGroup parent, @Nullable Bundle savedInstanceState) {
     View view = inflater.inflate(R.layout.fragment_search, parent, false);
     adapter = new SearchAdapter(getContext(), new SearchCursorManager(), this);
-    adapter.setQuery(query, rawNumber, callInitiationType);
+    adapter.setQuery(query, rawNumber);
     adapter.setSearchActions(getActions());
     adapter.setZeroSuggestVisible(getArguments().getBoolean(KEY_SHOW_ZERO_SUGGEST));
     emptyContentView = view.findViewById(R.id.empty_view);
@@ -263,7 +263,7 @@
     this.query = query;
     this.callInitiationType = callInitiationType;
     if (adapter != null) {
-      adapter.setQuery(query, rawNumber, callInitiationType);
+      adapter.setQuery(query, rawNumber);
       adapter.setSearchActions(getActions());
       adapter.setZeroSuggestVisible(isRegularSearch());
       loadCp2ContactsCursor();
diff --git a/java/com/android/dialer/searchfragment/list/SearchActionViewHolder.java b/java/com/android/dialer/searchfragment/list/SearchActionViewHolder.java
index 76c71d6..7315e89 100644
--- a/java/com/android/dialer/searchfragment/list/SearchActionViewHolder.java
+++ b/java/com/android/dialer/searchfragment/list/SearchActionViewHolder.java
@@ -26,13 +26,10 @@
 import android.view.View.OnClickListener;
 import android.widget.ImageView;
 import android.widget.TextView;
-import com.android.dialer.callintent.CallInitiationType;
-import com.android.dialer.callintent.CallIntentBuilder;
-import com.android.dialer.callintent.CallSpecificAppData;
 import com.android.dialer.common.Assert;
 import com.android.dialer.logging.DialerImpression;
 import com.android.dialer.logging.Logger;
-import com.android.dialer.precall.PreCall;
+import com.android.dialer.searchfragment.common.RowClickListener;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.IntentUtil;
 import java.lang.annotation.Retention;
@@ -70,25 +67,25 @@
   private final Context context;
   private final ImageView actionImage;
   private final TextView actionText;
+  private final RowClickListener listener;
 
   private @Action int action;
   private int position;
   private String query;
-  private CallInitiationType.Type callInitiationType;
 
-  SearchActionViewHolder(View view) {
+  SearchActionViewHolder(View view, RowClickListener listener) {
     super(view);
     context = view.getContext();
     actionImage = view.findViewById(R.id.search_action_image);
     actionText = view.findViewById(R.id.search_action_text);
+    this.listener = listener;
     view.setOnClickListener(this);
   }
 
-  void setAction(@Action int action, int position, String query, CallInitiationType.Type type) {
+  void setAction(@Action int action, int position, String query) {
     this.action = action;
     this.position = position;
     this.query = query;
-    this.callInitiationType = type;
     switch (action) {
       case Action.ADD_TO_CONTACT:
         actionText.setText(R.string.search_shortcut_add_to_contact);
@@ -113,7 +110,6 @@
       case Action.INVALID:
       default:
         throw Assert.createIllegalStateFailException("Invalid action: " + action);
-
     }
   }
 
@@ -140,14 +136,7 @@
         break;
 
       case Action.MAKE_VILTE_CALL:
-        CallSpecificAppData videoCallSpecificAppData =
-            CallSpecificAppData.newBuilder()
-                .setCallInitiationType(callInitiationType)
-                .setPositionOfSelectedSearchResult(position)
-                .setCharactersInSearchString(query.length())
-                .build();
-        PreCall.start(
-            context, new CallIntentBuilder(query, videoCallSpecificAppData).setIsVideoCall(true));
+        listener.placeVideoCall(query, position);
         break;
 
       case Action.SEND_SMS:
@@ -156,13 +145,7 @@
         break;
 
       case Action.MAKE_VOICE_CALL:
-        CallSpecificAppData voiceCallSpecificAppData =
-            CallSpecificAppData.newBuilder()
-                .setCallInitiationType(callInitiationType)
-                .setPositionOfSelectedSearchResult(position)
-                .setCharactersInSearchString(query.length())
-                .build();
-        PreCall.start(context, new CallIntentBuilder(query, voiceCallSpecificAppData));
+        listener.placeVoiceCall(query, position);
         break;
 
       case Action.INVALID:
diff --git a/java/com/android/dialer/searchfragment/list/SearchAdapter.java b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
index c5f36e9..805eaf5 100644
--- a/java/com/android/dialer/searchfragment/list/SearchAdapter.java
+++ b/java/com/android/dialer/searchfragment/list/SearchAdapter.java
@@ -26,7 +26,6 @@
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.view.ViewGroup;
-import com.android.dialer.callintent.CallInitiationType;
 import com.android.dialer.common.Assert;
 import com.android.dialer.searchfragment.common.RowClickListener;
 import com.android.dialer.searchfragment.common.SearchCursor;
@@ -48,7 +47,6 @@
   // Raw query number from dialpad, which may contain special character such as "+". This is used
   // for actions to add contact or send sms.
   private String rawNumber;
-  private CallInitiationType.Type callInitiationType;
   private OnClickListener allowClickListener;
   private OnClickListener dismissClickListener;
   private RowClickListener rowClickListener;
@@ -83,7 +81,8 @@
             rowClickListener);
       case RowType.SEARCH_ACTION:
         return new SearchActionViewHolder(
-            LayoutInflater.from(context).inflate(R.layout.search_action_layout, root, false));
+            LayoutInflater.from(context).inflate(R.layout.search_action_layout, root, false),
+            rowClickListener);
       case RowType.LOCATION_REQUEST:
         return new LocationPermissionViewHolder(
             LayoutInflater.from(context).inflate(R.layout.location_permission_row, root, false),
@@ -117,8 +116,7 @@
           .setAction(
               searchCursorManager.getSearchAction(position),
               position,
-              TextUtils.isEmpty(rawNumber) ? query : rawNumber,
-              callInitiationType);
+              TextUtils.isEmpty(rawNumber) ? query : rawNumber);
     } else if (holder instanceof LocationPermissionViewHolder) {
       // No-op
     } else {
@@ -148,17 +146,16 @@
 
   /**
    * @param visible If true and query is empty, the adapter won't show any list elements.
-   * @see #setQuery(String, String, CallInitiationType.Type)
+   * @see #setQuery(String, String)
    * @see #getItemCount()
    */
   public void setZeroSuggestVisible(boolean visible) {
     showZeroSuggest = visible;
   }
 
-  public void setQuery(String query, @Nullable String rawNumber, CallInitiationType.Type type) {
+  public void setQuery(String query, @Nullable String rawNumber) {
     this.query = query;
     this.rawNumber = rawNumber;
-    this.callInitiationType = type;
     if (searchCursorManager.setQuery(query)) {
       notifyDataSetChanged();
     }
diff --git a/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java b/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
index 112cb19..76c05c5 100644
--- a/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
+++ b/java/com/android/dialer/smartdial/map/CompositeSmartDialMap.java
@@ -19,7 +19,7 @@
 import android.content.Context;
 import android.support.annotation.VisibleForTesting;
 import android.support.v4.util.SimpleArrayMap;
-import com.android.dialer.compat.CompatUtils;
+import com.android.dialer.i18n.LocaleUtils;
 import com.google.common.base.Optional;
 
 /**
@@ -157,7 +157,7 @@
 
   @VisibleForTesting
   static Optional<SmartDialMap> getExtraMap(Context context) {
-    String languageCode = CompatUtils.getLocale(context).getISO3Language();
+    String languageCode = LocaleUtils.getLocale(context).getISO3Language();
     return EXTRA_MAPS.containsKey(languageCode)
         ? Optional.of(EXTRA_MAPS.get(languageCode))
         : Optional.absent();
diff --git a/java/com/android/dialer/util/CallUtil.java b/java/com/android/dialer/util/CallUtil.java
index 22cab87..89af0b9 100644
--- a/java/com/android/dialer/util/CallUtil.java
+++ b/java/com/android/dialer/util/CallUtil.java
@@ -16,13 +16,13 @@
 
 package com.android.dialer.util;
 
+import android.annotation.SuppressLint;
 import android.content.Context;
 import android.net.Uri;
 import android.telecom.PhoneAccount;
 import android.telecom.PhoneAccountHandle;
 import android.telecom.TelecomManager;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.phonenumberutil.PhoneNumberHelper;
 import java.util.List;
 
@@ -62,9 +62,9 @@
    * @param context The context
    * @return A bit-mask describing the current video capabilities.
    */
+  @SuppressLint("MissingPermission")
   public static int getVideoCallingAvailability(Context context) {
-    if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
-        || !CompatUtils.isVideoCompatible()) {
+    if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)) {
       return VIDEO_CALLING_DISABLED;
     }
     TelecomManager telecommMgr = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
@@ -77,11 +77,6 @@
       PhoneAccount account = telecommMgr.getPhoneAccount(accountHandle);
       if (account != null) {
         if (account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING)) {
-          // Builds prior to N do not have presence support.
-          if (!CompatUtils.isVideoPresenceCompatible()) {
-            return VIDEO_CALLING_ENABLED;
-          }
-
           int videoCapabilities = VIDEO_CALLING_ENABLED;
           if (account.hasCapabilities(PhoneAccount.CAPABILITY_VIDEO_CALLING_RELIES_ON_PRESENCE)) {
             videoCapabilities |= VIDEO_CALLING_PRESENCE;
@@ -128,9 +123,9 @@
    * @return {@code true} if one of the call capable phone accounts supports calling with a subject
    *     specified, {@code false} otherwise.
    */
+  @SuppressLint("MissingPermission")
   public static boolean isCallWithSubjectSupported(Context context) {
-    if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)
-        || !CompatUtils.isCallSubjectCompatible()) {
+    if (!PermissionsUtil.hasPermission(context, android.Manifest.permission.READ_PHONE_STATE)) {
       return false;
     }
     TelecomManager telecommMgr = (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
diff --git a/java/com/android/incallui/InCallActivity.java b/java/com/android/incallui/InCallActivity.java
index 3236e16..8144ddb 100644
--- a/java/com/android/incallui/InCallActivity.java
+++ b/java/com/android/incallui/InCallActivity.java
@@ -60,7 +60,6 @@
 import com.android.dialer.common.LogUtil;
 import com.android.dialer.common.concurrent.DialerExecutorComponent;
 import com.android.dialer.common.concurrent.ThreadUtil;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.logging.DialerImpression.Type;
 import com.android.dialer.logging.Logger;
@@ -321,9 +320,7 @@
 
       // InCallActivity is responsible for disconnecting a new outgoing call if there is no way of
       // making it (i.e. no valid call capable accounts).
-      // If the version is not MSIM compatible, ignore this code.
-      if (CompatUtils.isMSIMCompatible()
-          && InCallPresenter.isCallWithNoValidAccounts(outgoingCall)) {
+      if (InCallPresenter.isCallWithNoValidAccounts(outgoingCall)) {
         LogUtil.i(
             "InCallActivity.internalResolveIntent", "Call with no valid accounts, disconnecting");
         outgoingCall.disconnect();
diff --git a/java/com/android/incallui/VideoCallPresenter.java b/java/com/android/incallui/VideoCallPresenter.java
index f5d681c..050ce98 100644
--- a/java/com/android/incallui/VideoCallPresenter.java
+++ b/java/com/android/incallui/VideoCallPresenter.java
@@ -29,7 +29,6 @@
 import android.view.SurfaceView;
 import com.android.dialer.common.Assert;
 import com.android.dialer.common.LogUtil;
-import com.android.dialer.compat.CompatUtils;
 import com.android.dialer.configprovider.ConfigProviderBindings;
 import com.android.dialer.util.PermissionsUtil;
 import com.android.incallui.InCallPresenter.InCallDetailsListener;
@@ -164,10 +163,7 @@
    * @param callState The current call state.
    * @return {@code true} if the incoming video surface should be shown, {@code false} otherwise.
    */
-  public static boolean showIncomingVideo(int videoState, int callState) {
-    if (!CompatUtils.isVideoCompatible()) {
-      return false;
-    }
+  static boolean showIncomingVideo(int videoState, int callState) {
 
     boolean isPaused = VideoProfile.isPaused(videoState);
     boolean isCallActive = callState == DialerCall.State.ACTIVE;
@@ -187,17 +183,13 @@
    * @return {@code true} if the the outgoing video surface should be shown, {@code false}
    *     otherwise.
    */
-  public static boolean showOutgoingVideo(
+  private static boolean showOutgoingVideo(
       Context context, int videoState, int sessionModificationState) {
     if (!VideoUtils.hasCameraPermissionAndShownPrivacyToast(context)) {
       LogUtil.i("VideoCallPresenter.showOutgoingVideo", "Camera permission is disabled by user.");
       return false;
     }
 
-    if (!CompatUtils.isVideoCompatible()) {
-      return false;
-    }
-
     return VideoProfile.isTransmissionEnabled(videoState)
         || isVideoUpgrade(sessionModificationState);
   }
@@ -309,12 +301,6 @@
     LogUtil.v("VideoCallPresenter.onVideoCallScreenUiReady", "");
     Assert.checkState(!isVideoCallScreenUiReady);
 
-    // Do not register any listeners if video calling is not compatible to safeguard against
-    // any accidental calls of video calling code.
-    if (!CompatUtils.isVideoCompatible()) {
-      return;
-    }
-
     deviceOrientation = InCallOrientationEventListener.getCurrentOrientation();
 
     // Register for call state changes last
@@ -345,10 +331,6 @@
     LogUtil.v("VideoCallPresenter.onVideoCallScreenUiUnready", "");
     Assert.checkState(isVideoCallScreenUiReady);
 
-    if (!CompatUtils.isVideoCompatible()) {
-      return;
-    }
-
     cancelAutoFullScreen();
 
     InCallPresenter.getInstance().removeListener(this);
@@ -1273,7 +1255,7 @@
   }
 
   private static boolean isBidirectionalVideoCall(DialerCall call) {
-    return CompatUtils.isVideoCompatible() && VideoProfile.isBidirectional(call.getVideoState());
+    return VideoProfile.isBidirectional(call.getVideoState());
   }
 
   private static boolean isIncomingVideoCall(DialerCall call) {
@@ -1299,10 +1281,6 @@
   }
 
   private static boolean isAudioCall(DialerCall call) {
-    if (!CompatUtils.isVideoCompatible()) {
-      return true;
-    }
-
     return call != null && VideoProfile.isAudioOnly(call.getVideoState());
   }
 
@@ -1311,8 +1289,7 @@
   }
 
   private static boolean isVideoCall(int videoState) {
-    return CompatUtils.isVideoCompatible()
-        && (VideoProfile.isTransmissionEnabled(videoState)
-            || VideoProfile.isReceptionEnabled(videoState));
+    return VideoProfile.isTransmissionEnabled(videoState)
+        || VideoProfile.isReceptionEnabled(videoState);
   }
 }