Merge "Follow new PinnedPositions API changes (1/2)"
diff --git a/Android.mk b/Android.mk
index 206f004..c72c019 100644
--- a/Android.mk
+++ b/Android.mk
@@ -4,10 +4,11 @@
 LOCAL_MODULE_TAGS := optional
 
 contacts_common_dir := ../ContactsCommon
+phone_common_dir := ../PhoneCommon
 incallui_dir := ../InCallUI
 
-src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src
-res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res
+src_dirs := src $(contacts_common_dir)/src $(incallui_dir)/src $(phone_common_dir)/src
+res_dirs := res $(contacts_common_dir)/res $(incallui_dir)/res $(phone_common_dir)/res
 
 LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
 LOCAL_RESOURCE_DIR := $(addprefix $(LOCAL_PATH)/, $(res_dirs))
@@ -15,11 +16,11 @@
 LOCAL_AAPT_FLAGS := \
     --auto-add-overlay \
     --extra-packages com.android.contacts.common \
-    --extra-packages com.android.incallui
+    --extra-packages com.android.incallui \
+    --extra-packages com.android.phone.common
 
 LOCAL_JAVA_LIBRARIES := telephony-common
 LOCAL_STATIC_JAVA_LIBRARIES := \
-    com.android.phone.shared \
     com.android.services.telephony.common \
     com.android.vcard \
     android-common \
diff --git a/proguard.flags b/proguard.flags
index 40ef035..38d4050 100644
--- a/proguard.flags
+++ b/proguard.flags
@@ -6,9 +6,9 @@
 }
 
 # Any class or method annotated with NeededForTesting or NeededForReflection.
--keep @com.android.contacts.common.test.NeededForTesting class *
+-keep @com.android.contacts.common.testing.NeededForTesting class *
 -keepclassmembers class * {
-@com.android.contacts.common.test.NeededForTesting *;
+@com.android.contacts.common.testing.NeededForTesting *;
 @com.android.dialer.NeededForReflection *;
 }
 
diff --git a/res/menu/dialpad_options.xml b/res/menu/dialpad_options.xml
index c1f2515..311a5ee 100644
--- a/res/menu/dialpad_options.xml
+++ b/res/menu/dialpad_options.xml
@@ -19,8 +19,8 @@
         android:title="@string/add_contact"
         android:showAsAction="withText" />
     <item
-        android:id="@+id/menu_select_sim"
-        android:title="@string/menu_select_sim"
+        android:id="@+id/menu_select_subscription"
+        android:title="@string/menu_select_subscription"
         android:showAsAction="withText" />
     <item
         android:id="@+id/menu_2s_pause"
diff --git a/res/menu/dialtacts_options.xml b/res/menu/dialtacts_options.xml
index d1c8854..558cbd8 100644
--- a/res/menu/dialtacts_options.xml
+++ b/res/menu/dialtacts_options.xml
@@ -20,8 +20,8 @@
         android:icon="@drawable/ic_menu_history_lt"
         android:title="@string/action_menu_call_history_description" />
     <item
-        android:id="@+id/menu_select_sim"
-        android:title="@string/menu_select_sim" />
+        android:id="@+id/menu_select_subscription"
+        android:title="@string/menu_select_subscription" />
     <item
         android:id="@+id/menu_import_export"
         android:title="@string/menu_import_export" />
diff --git a/res/values-fi/strings.xml b/res/values-fi/strings.xml
index cd8e640..1abbe88 100644
--- a/res/values-fi/strings.xml
+++ b/res/values-fi/strings.xml
@@ -90,8 +90,7 @@
     <string name="add_contact" msgid="8875804371377471164">"Lisää kontakti"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Lisää 2 sekunnin tauko"</string>
     <string name="add_wait" msgid="3360818652790319634">"Lisää tauko"</string>
-    <!-- no translation found for menu_select_sim (3603578201960504010) -->
-    <skip />
+    <string name="menu_select_sim" msgid="3603578201960504010">"Valitse SIM-kortti"</string>
     <string name="call_settings" msgid="7666474782093693667">"Asetukset"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Uusi yhteystieto"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Kaikki yhteystiedot"</string>
@@ -174,8 +173,7 @@
     <string name="call_log_header_today" msgid="3225248682434212981">"Tänään"</string>
     <string name="call_log_header_yesterday" msgid="9139172458834033092">"Eilen"</string>
     <string name="call_log_header_last_week" msgid="5197040511028258038">"Viime viikko"</string>
-    <!-- no translation found for call_log_header_other (5769921959940709084) -->
-    <skip />
+    <string name="call_log_header_other" msgid="5769921959940709084">"Vanhempi"</string>
     <string name="call_detail_list_header" msgid="866455969433213220">"Soittoluettelo"</string>
     <string name="voicemail_speaker_on" msgid="209154030283487068">"Ota kaiutin käyttöön."</string>
     <string name="voicemail_speaker_off" msgid="7390530056413093958">"Poista kaiutin käytöstä."</string>
diff --git a/res/values-hr/strings.xml b/res/values-hr/strings.xml
index 4f46a7b..2c1cfee 100644
--- a/res/values-hr/strings.xml
+++ b/res/values-hr/strings.xml
@@ -173,7 +173,7 @@
     <string name="call_log_header_today" msgid="3225248682434212981">"Danas"</string>
     <string name="call_log_header_yesterday" msgid="9139172458834033092">"Jučer"</string>
     <string name="call_log_header_last_week" msgid="5197040511028258038">"Prošli tjedan"</string>
-    <string name="call_log_header_other" msgid="5769921959940709084">"Starije"</string>
+    <string name="call_log_header_other" msgid="5769921959940709084">"Stariji"</string>
     <string name="call_detail_list_header" msgid="866455969433213220">"Popis poziva"</string>
     <string name="voicemail_speaker_on" msgid="209154030283487068">"Uključivanje zvučnika."</string>
     <string name="voicemail_speaker_off" msgid="7390530056413093958">"Isključivanje zvučnika."</string>
diff --git a/res/values-ka-rGE/strings.xml b/res/values-ka-rGE/strings.xml
index 0cb2683..8f05bd1 100644
--- a/res/values-ka-rGE/strings.xml
+++ b/res/values-ka-rGE/strings.xml
@@ -139,7 +139,7 @@
     <string name="activity_not_available" msgid="8265265380537872585">"არჩეული ქმედებისათვის ინსტალირებული აქტივობა არ არის."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"შეიყვანეთ სახელი, ან ტელეფონის ნომერი"</string>
     <string name="recentMissed_empty" msgid="4177320482947526015">"ბოლოს გამოტოვებული ზარები არ გაგაჩნიათ."</string>
-    <string name="recentVoicemails_empty" msgid="4905583746647459963">"ბოლოს მიღებული ხმოვანი ფოსტა არ გაგა."</string>
+    <string name="recentVoicemails_empty" msgid="4905583746647459963">"ბოლოს მიღებული ხმოვანი ფოსტა არ გაგაჩნიათ."</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"მხოლოდ რჩეულების ჩვენება"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"ისტორია"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"ყველა"</string>
diff --git a/res/values-ms-rMY/strings.xml b/res/values-ms-rMY/strings.xml
index 34fa375..90e7789 100644
--- a/res/values-ms-rMY/strings.xml
+++ b/res/values-ms-rMY/strings.xml
@@ -90,8 +90,7 @@
     <string name="add_contact" msgid="8875804371377471164">"Tambah kenalan"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Tambah jeda 2 saat"</string>
     <string name="add_wait" msgid="3360818652790319634">"Tambah penungguan"</string>
-    <!-- no translation found for menu_select_sim (3603578201960504010) -->
-    <skip />
+    <string name="menu_select_sim" msgid="3603578201960504010">"Pilih kad SIM"</string>
     <string name="call_settings" msgid="7666474782093693667">"Tetapan"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Kenalan baru"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Semua kenalan"</string>
@@ -174,8 +173,7 @@
     <string name="call_log_header_today" msgid="3225248682434212981">"Hari ini"</string>
     <string name="call_log_header_yesterday" msgid="9139172458834033092">"Semalam"</string>
     <string name="call_log_header_last_week" msgid="5197040511028258038">"Minggu lepas"</string>
-    <!-- no translation found for call_log_header_other (5769921959940709084) -->
-    <skip />
+    <string name="call_log_header_other" msgid="5769921959940709084">"Lebih lama"</string>
     <string name="call_detail_list_header" msgid="866455969433213220">"Senarai Panggilan"</string>
     <string name="voicemail_speaker_on" msgid="209154030283487068">"Hidupkan pembesar suara."</string>
     <string name="voicemail_speaker_off" msgid="7390530056413093958">"Matikan pembesar suara."</string>
diff --git a/res/values-nb/strings.xml b/res/values-nb/strings.xml
index 77af3c6..798ad13 100644
--- a/res/values-nb/strings.xml
+++ b/res/values-nb/strings.xml
@@ -139,7 +139,7 @@
     <string name="activity_not_available" msgid="8265265380537872585">"Det er ingen installert aktivitet tilgjengelig for å håndtere den valgte handlingen."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Skriv inn et navn eller telefonnummer"</string>
     <string name="recentMissed_empty" msgid="4177320482947526015">"Du har ingen nylig tapte anrop."</string>
-    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Du har ingen nylige innlegg i talepostkassen."</string>
+    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Du har ingen nylige talepostmeldinger."</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Vis bare favoritter"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Logg"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"Alle"</string>
@@ -154,7 +154,7 @@
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Legg til i kontakter"</string>
     <string name="recents_footer_text" msgid="7315554578957453359">"Se hele anropsloggen"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye tapte anrop"</string>
-    <string name="speed_dial_empty" msgid="5476435149276295630">"Med hurtigvalg kan du starte anrop til \nfavoritter og numre\n du ringer ofte, med bare ett trykk."</string>
+    <string name="speed_dial_empty" msgid="5476435149276295630">"Med hurtigvalg kan du ring til \nfavoritter og numre\n du bruker ofte, med bare ett trykk."</string>
     <string name="all_contacts_empty" msgid="4536082452651392894">"Du har ingen kontakter."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Trykk på bildet for å se alle telefonnumrene, eller trykk og hold inne for å endre rekkefølgen"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Fjern"</string>
diff --git a/res/values-pt/strings.xml b/res/values-pt/strings.xml
index 184d8f2..e10bb2b 100644
--- a/res/values-pt/strings.xml
+++ b/res/values-pt/strings.xml
@@ -154,7 +154,7 @@
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Adicionar aos contatos"</string>
     <string name="recents_footer_text" msgid="7315554578957453359">"Ver todo o histórico de chamadas"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> novas chamadas perdidas"</string>
-    <string name="speed_dial_empty" msgid="5476435149276295630">"A discagem rápida é uma discagem por um toque\npara favoritos e números\naos quais você liga com frequência."</string>
+    <string name="speed_dial_empty" msgid="5476435149276295630">"A discagem rápida é uma discagem por um toque\npara favoritos e números\nusados com frequência."</string>
     <string name="all_contacts_empty" msgid="4536082452651392894">"Você não tem contatos."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Toque na imagem para ver todos os números ou pressione e segure para reordenar"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Descartar"</string>
diff --git a/res/values-ro/strings.xml b/res/values-ro/strings.xml
index 9fa0b5a..7a03d68 100644
--- a/res/values-ro/strings.xml
+++ b/res/values-ro/strings.xml
@@ -90,8 +90,7 @@
     <string name="add_contact" msgid="8875804371377471164">"Adăugați o persoană de contact"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Pauză 2 secunde"</string>
     <string name="add_wait" msgid="3360818652790319634">"Adăugaţi interval de aşteptare"</string>
-    <!-- no translation found for menu_select_sim (3603578201960504010) -->
-    <skip />
+    <string name="menu_select_sim" msgid="3603578201960504010">"Selectați cardul SIM"</string>
     <string name="call_settings" msgid="7666474782093693667">"Setări"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Persoană nouă în agendă"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Toată agenda"</string>
@@ -174,8 +173,7 @@
     <string name="call_log_header_today" msgid="3225248682434212981">"Astăzi"</string>
     <string name="call_log_header_yesterday" msgid="9139172458834033092">"Ieri"</string>
     <string name="call_log_header_last_week" msgid="5197040511028258038">"Săptămâna trecută"</string>
-    <!-- no translation found for call_log_header_other (5769921959940709084) -->
-    <skip />
+    <string name="call_log_header_other" msgid="5769921959940709084">"Mai vechi"</string>
     <string name="call_detail_list_header" msgid="866455969433213220">"Lista de apeluri"</string>
     <string name="voicemail_speaker_on" msgid="209154030283487068">"Porniți difuzorul."</string>
     <string name="voicemail_speaker_off" msgid="7390530056413093958">"Opriți difuzorul."</string>
diff --git a/res/values-tr/strings.xml b/res/values-tr/strings.xml
index c652307..9e2bdad 100644
--- a/res/values-tr/strings.xml
+++ b/res/values-tr/strings.xml
@@ -139,7 +139,7 @@
     <string name="activity_not_available" msgid="8265265380537872585">"Seçilen işlemi gerçekleştirmek için kullanılabilir yüklü etkinlik yok."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Ad veya telefon numarası yazın"</string>
     <string name="recentMissed_empty" msgid="4177320482947526015">"Yakın zamanda cevapsız çağrınız yok."</string>
-    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Yakın zamanda sesli mesajız yok."</string>
+    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Yakın zamanda sesli mesajınız yok."</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Yalnızca favori kişileri göster"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Geçmiş"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"Tümü"</string>
diff --git a/res/values-vi/strings.xml b/res/values-vi/strings.xml
index 1368438..b08e465 100644
--- a/res/values-vi/strings.xml
+++ b/res/values-vi/strings.xml
@@ -138,8 +138,8 @@
     <string name="call_not_available" msgid="8941576511946492225">"Không thể thực hiện cuộc gọi điện thoại vì ứng dụng Điện thoại đã bị tắt."</string>
     <string name="activity_not_available" msgid="8265265380537872585">"Không có ứng dụng đã cài đặt nào để xử lý tác vụ đã chọn."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"Nhập tên hoặc số điện thoại"</string>
-    <string name="recentMissed_empty" msgid="4177320482947526015">"Bạn không có cuộc gọi nhỡ gần đây nào."</string>
-    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Bạn không có thư thoại gần đây nào."</string>
+    <string name="recentMissed_empty" msgid="4177320482947526015">"Bạn không có cuộc gọi nhỡ nào gần đây."</string>
+    <string name="recentVoicemails_empty" msgid="4905583746647459963">"Bạn không có thư thoại nào gần đây."</string>
     <string name="show_favorites_only" msgid="5520072531022614595">"Chỉ hiển thị liên hệ ưa thích"</string>
     <string name="call_log_activity_title" msgid="4612824396355272023">"Lịch sử"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"Tất cả"</string>
@@ -154,7 +154,7 @@
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Thêm vào danh bạ"</string>
     <string name="recents_footer_text" msgid="7315554578957453359">"Xem lịch sử cuộc gọi đầy đủ"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> cuộc gọi nhỡ mới"</string>
-    <string name="speed_dial_empty" msgid="5476435149276295630">"Quay số nhanh là quay số bằng một lần chạm\nđối với các liên hệ yêu thích và số điện thoại\n bạn thường xuyên gọi."</string>
+    <string name="speed_dial_empty" msgid="5476435149276295630">"Gọi nhanh là gọi bằng một lần chạm\nđối với các liên hệ yêu thích và số điện thoại\n bạn thường xuyên gọi."</string>
     <string name="all_contacts_empty" msgid="4536082452651392894">"Bạn không có liên hệ nào."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Chạm vào hình ảnh để xem tất cả các số hoặc nhấn và giữ để sắp xếp lại"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Loại bỏ"</string>
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
index a055be5..495f017 100644
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -90,8 +90,7 @@
     <string name="add_contact" msgid="8875804371377471164">"添加联系人"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"延长暂停时间2秒"</string>
     <string name="add_wait" msgid="3360818652790319634">"延长等待时间"</string>
-    <!-- no translation found for menu_select_sim (3603578201960504010) -->
-    <skip />
+    <string name="menu_select_sim" msgid="3603578201960504010">"选择SIM卡"</string>
     <string name="call_settings" msgid="7666474782093693667">"设置"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"新建联系人"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"所有联系人"</string>
@@ -155,7 +154,7 @@
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"添加到通讯录"</string>
     <string name="recents_footer_text" msgid="7315554578957453359">"查看全部通话记录"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g>个新的未接电话"</string>
-    <string name="speed_dial_empty" msgid="5476435149276295630">"使用快速拨号功能,只需触摸一下即可拨打\n收藏联系人的电话号码\n以及经常拨打的电话号码。"</string>
+    <string name="speed_dial_empty" msgid="5476435149276295630">"使用快速拨号功能,只需轻轻一点即可拨打\n收藏联系人的电话号码\n以及经常拨打的电话号码。"</string>
     <string name="all_contacts_empty" msgid="4536082452651392894">"您没有联系人。"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"点按图片可查看所有号码,按住图片可重新排序"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"关闭"</string>
@@ -174,8 +173,7 @@
     <string name="call_log_header_today" msgid="3225248682434212981">"今天"</string>
     <string name="call_log_header_yesterday" msgid="9139172458834033092">"昨天"</string>
     <string name="call_log_header_last_week" msgid="5197040511028258038">"上周"</string>
-    <!-- no translation found for call_log_header_other (5769921959940709084) -->
-    <skip />
+    <string name="call_log_header_other" msgid="5769921959940709084">"更早"</string>
     <string name="call_detail_list_header" msgid="866455969433213220">"通话记录"</string>
     <string name="voicemail_speaker_on" msgid="209154030283487068">"打开扬声器。"</string>
     <string name="voicemail_speaker_off" msgid="7390530056413093958">"关闭扬声器。"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7513b50..a6aecc1 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -327,7 +327,7 @@
     <string name="add_wait">Add wait</string>
 
     <!-- Menu item to select SIM card [CHAR LIMIT=30] -->
-    <string name="menu_select_sim">Select SIM card</string>
+    <string name="menu_select_subscription">Select Subscription</string>
 
     <!-- Menu item label for call settings [CHAR LIMIT=30] -->
     <string name="call_settings">Settings</string>
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index d48b28e..8e873c8 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -37,6 +37,7 @@
 import android.provider.ContactsContract.Intents;
 import android.speech.RecognizerIntent;
 import android.support.v4.view.ViewPager;
+import android.telecomm.Subscription;
 import android.telephony.TelephonyManager;
 import android.text.Editable;
 import android.text.TextUtils;
@@ -62,10 +63,10 @@
 import android.widget.Toast;
 
 import com.android.contacts.common.CallUtil;
+import com.android.contacts.common.SubscriptionManager;
 import com.android.contacts.common.activity.TransactionSafeActivity;
-import com.android.contacts.common.animation.AnimationListenerAdapter;
 import com.android.contacts.common.dialog.ClearFrequentsDialog;
-import com.android.contacts.common.dialog.SelectSIMDialogFragment;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
 import com.android.contacts.common.interactions.ImportExportDialogFragment;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
 import com.android.contacts.common.widget.FloatingActionButtonController;
@@ -84,10 +85,12 @@
 import com.android.dialer.list.RegularSearchFragment;
 import com.android.dialer.list.SearchFragment;
 import com.android.dialer.list.SmartDialSearchFragment;
+import com.android.dialer.util.DialerUtils;
 import com.android.dialer.widget.ActionBarController;
 import com.android.dialer.widget.SearchEditTextLayout;
 import com.android.dialer.widget.SearchEditTextLayout.OnBackButtonClickedListener;
 import com.android.dialerbind.DatabaseHelperManager;
+import com.android.phone.common.animation.AnimationListenerAdapter;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -105,13 +108,15 @@
         OnDragDropListener,
         OnPhoneNumberPickerActionListener,
         PopupMenu.OnMenuItemClickListener,
-        SelectSIMDialogFragment.OnClickOkListener,
         ViewPager.OnPageChangeListener,
         ActionBarController.ActivityUi {
     private static final String TAG = "DialtactsActivity";
 
     public static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
 
+    /** Temporary flag for disabling subscription selection menu */
+    public static final boolean ENABLE_SUBSCRIPTION_SELECT = false;
+
     public static final String SHARED_PREFS_NAME = "com.android.dialer_preferences";
 
     /** Used to open Call Setting */
@@ -140,11 +145,6 @@
 
     private static final int ACTIVITY_REQUEST_CODE_VOICE_SEARCH = 1;
 
-    /**
-     * Constant to indicate there is only one service provider available.
-     */
-    private static final int NO_MULTI_SIM = -1;
-
     private FrameLayout parentLayout;
 
     /**
@@ -199,9 +199,9 @@
     private boolean mIsLandscape;
 
     /**
-     * Information about the currently selected SIM card.
+     * Information about the currently selected subscription.
      */
-    private int mCurrentSimCard = NO_MULTI_SIM;
+    private SubscriptionManager mSubscriptionManager = null;
 
     /**
      * The position of the currently selected tab in the attached {@link ListsFragment}.
@@ -369,7 +369,6 @@
         mActionBarController = new ActionBarController(this,
                 (SearchEditTextLayout) actionBar.getCustomView());
 
-
         SearchEditTextLayout searchEditTextLayout =
                 (SearchEditTextLayout) actionBar.getCustomView();
         searchEditTextLayout.setPreImeKeyListener(mSearchEditTextLayoutListener);
@@ -390,6 +389,11 @@
 
         mIsLandscape = getResources().getConfiguration().orientation
                 == Configuration.ORIENTATION_LANDSCAPE;
+
+        if (getTelephonyManager().getSubscriptions().size() > 1 && ENABLE_SUBSCRIPTION_SELECT) {
+            mSubscriptionManager = new SubscriptionManager(getTelephonyManager());
+        }
+
         final View floatingActionButtonContainer = findViewById(
                 R.id.floating_action_button_container);
         mFloatingActionButton = (ImageButton) findViewById(R.id.floating_action_button);
@@ -597,22 +601,14 @@
             case R.id.menu_call_settings:
                 handleMenuSettings();
                 return true;
-            case R.id.menu_select_sim:
-                SelectSIMDialogFragment.show(getFragmentManager(), mCurrentSimCard);
+            case R.id.menu_select_subscription:
+                SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
                 return true;
         }
         return false;
     }
 
     @Override
-    public void passSimUpdate(int simId) {
-        mCurrentSimCard = simId;
-        if (mIsDialpadShown) {
-            mDialpadFragment.setSimCard(simId);
-        }
-    }
-
-    @Override
     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
         if (requestCode == ACTIVITY_REQUEST_CODE_VOICE_SEARCH) {
             if (resultCode == RESULT_OK) {
@@ -642,7 +638,7 @@
         }
         mIsDialpadShown = true;
         mDialpadFragment.setAnimate(animate);
-        mDialpadFragment.setSimCard(mCurrentSimCard);
+        mDialpadFragment.setSubscriptionManager(mSubscriptionManager);
 
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         ft.show(mDialpadFragment);
@@ -780,8 +776,8 @@
         final OptionsPopupMenu popupMenu = new OptionsPopupMenu(this, invoker);
         popupMenu.inflate(R.menu.dialtacts_options);
         final Menu menu = popupMenu.getMenu();
-        final MenuItem selectSim = menu.findItem(R.id.menu_select_sim);
-        selectSim.setVisible(mCurrentSimCard != NO_MULTI_SIM);
+        final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
+        selectSubscription.setVisible(mSubscriptionManager != null);
         popupMenu.setOnMenuItemClickListener(this);
         return popupMenu;
     }
@@ -1113,7 +1109,7 @@
     @Override
     public void onCallNumberDirectly(String phoneNumber) {
         Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
-        startActivity(intent);
+        DialerUtils.startActivityWithErrorToast(this, intent);
         mClearSearchOnPause = true;
     }
 
diff --git a/src/com/android/dialer/PhoneCallDetailsHelper.java b/src/com/android/dialer/PhoneCallDetailsHelper.java
index bb74cba..f1b6f7f 100644
--- a/src/com/android/dialer/PhoneCallDetailsHelper.java
+++ b/src/com/android/dialer/PhoneCallDetailsHelper.java
@@ -185,6 +185,7 @@
     }
 
     /** Sets the text of the header view for the details page of a phone call. */
+    @NeededForTesting
     public void setCallDetailsHeader(TextView nameView, PhoneCallDetails details) {
         final CharSequence nameText;
         final CharSequence displayNumber =
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 249c30c..f19b924 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -43,6 +43,7 @@
 import com.android.dialer.PhoneCallDetails;
 import com.android.dialer.PhoneCallDetailsHelper;
 import com.android.dialer.R;
+import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.ExpirableCache;
 
 import com.google.common.annotations.VisibleForTesting;
@@ -304,7 +305,7 @@
             final Intent intent = intentProvider.getIntent(mContext);
             // See IntentProvider.getCallDetailIntentProvider() for why this may be null.
             if (intent != null) {
-                mContext.startActivity(intent);
+                DialerUtils.startActivityWithErrorToast(mContext, intent);
             }
         }
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index bb58802..f54aa6c 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -71,9 +71,8 @@
 
 import com.android.contacts.common.CallUtil;
 import com.android.contacts.common.GeoUtil;
-import com.android.contacts.common.dialog.SelectSIMDialogFragment;
-import com.android.contacts.common.dialpad.DialpadKeyButton;
-import com.android.contacts.common.dialpad.DialpadView;
+import com.android.contacts.common.SubscriptionManager;
+import com.android.contacts.common.dialog.SelectSubscriptionDialogFragment;
 import com.android.contacts.common.util.PhoneNumberFormatter;
 import com.android.contacts.common.util.StopWatch;
 import com.android.dialer.NeededForReflection;
@@ -83,6 +82,8 @@
 import com.android.dialer.util.DialerUtils;
 import com.android.phone.common.CallLogAsync;
 import com.android.phone.common.HapticFeedback;
+import com.android.phone.common.dialpad.DialpadKeyButton;
+import com.android.phone.common.dialpad.DialpadView;
 
 import com.google.common.annotations.VisibleForTesting;
 
@@ -99,15 +100,7 @@
         DialpadKeyButton.OnPressedListener {
     private static final String TAG = DialpadFragment.class.getSimpleName();
 
-    /**
-     * Constant to indicate there is only a single service provider available
-     */
-    private static final int NO_MULTI_SIM = -1;
-
-    /**
-     * Information about the currently selected SIM card.
-     */
-    private int mCurrentSimCard = NO_MULTI_SIM;
+    private static SubscriptionManager mSubscriptionManager;
 
     /**
      * This interface allows the DialpadFragment to tell its hosting Activity when and when not
@@ -279,10 +272,7 @@
      * Return an Intent for launching voicemail screen.
      */
     private static Intent getVoicemailIntent() {
-        final Intent intent = new Intent(Intent.ACTION_CALL_PRIVILEGED,
-                Uri.fromParts("voicemail", "", null));
-        intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-        return intent;
+        return CallUtil.getCallIntent(Uri.fromParts("voicemail", "", null));
     }
 
     private TelephonyManager getTelephonyManager() {
@@ -861,9 +851,9 @@
             @Override
             public void show() {
                 final Menu menu = getMenu();
-                final MenuItem selectSim = menu.findItem(R.id.menu_select_sim);
+                final MenuItem selectSubscription = menu.findItem(R.id.menu_select_subscription);
                 final MenuItem sendMessage = menu.findItem(R.id.menu_send_message);
-                selectSim.setVisible(mCurrentSimCard != NO_MULTI_SIM);
+                selectSubscription.setVisible(mSubscriptionManager != null);
                 sendMessage.setVisible(mSmsPackageComponentName != null);
 
                 boolean enable = !isDigitsEmpty();
@@ -986,7 +976,7 @@
     }
 
     public void callVoicemail() {
-        startActivity(getVoicemailIntent());
+        DialerUtils.startActivityWithErrorToast(getActivity(), getVoicemailIntent());
         hideAndClearDialpad(false);
     }
 
@@ -1085,7 +1075,7 @@
                 final Intent intent = CallUtil.getCallIntent(number,
                         (getActivity() instanceof DialtactsActivity ?
                                 ((DialtactsActivity) getActivity()).getCallOrigin() : null));
-                startActivity(intent);
+                DialerUtils.startActivityWithErrorToast(getActivity(), intent);
                 hideAndClearDialpad(false);
             }
         }
@@ -1448,8 +1438,8 @@
                 smsIntent.setComponent(mSmsPackageComponentName);
                 DialerUtils.startActivityWithErrorToast(getActivity(), smsIntent);
             }
-            case R.id.menu_select_sim:
-              SelectSIMDialogFragment.show(getFragmentManager(), mCurrentSimCard);
+            case R.id.menu_select_subscription:
+              SelectSubscriptionDialogFragment.show(getFragmentManager(), mSubscriptionManager);
               return true;
 
             default:
@@ -1621,8 +1611,8 @@
         return mAnimate;
     }
 
-    public void setSimCard(int simId) {
-        mCurrentSimCard = simId;
+    public void setSubscriptionManager(SubscriptionManager subscriptionManager) {
+        mSubscriptionManager = subscriptionManager;
     }
 
     public void setYFraction(float yFraction) {
diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
index 722b9b3..b494fff 100644
--- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -20,7 +20,6 @@
 import android.app.Dialog;
 import android.app.DialogFragment;
 import android.app.FragmentManager;
-import android.content.ContentValues;
 import android.content.Context;
 import android.content.CursorLoader;
 import android.content.DialogInterface;
@@ -37,7 +36,6 @@
 import android.provider.ContactsContract.CommonDataKinds.SipAddress;
 import android.provider.ContactsContract.Contacts;
 import android.provider.ContactsContract.Data;
-import android.provider.ContactsContract.PinnedPositions;
 import android.provider.ContactsContract.RawContacts;
 import android.view.LayoutInflater;
 import android.view.View;
@@ -55,6 +53,8 @@
 import com.android.contacts.common.util.ContactDisplayUtils;
 import com.android.dialer.R;
 import com.android.dialer.contact.ContactUpdateService;
+import com.android.dialer.util.DialerUtils;
+
 import com.google.common.annotations.VisibleForTesting;
 
 import java.util.ArrayList;
@@ -325,7 +325,7 @@
                 intent = CallUtil.getCallIntent(phoneNumber, callOrigin);
                 break;
         }
-        context.startActivity(intent);
+        DialerUtils.startActivityWithErrorToast(context, intent);
     }
 
     /**
diff --git a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
index 776a7a2..5f88776 100644
--- a/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
+++ b/src/com/android/dialer/list/PhoneFavoriteSquareTileView.java
@@ -23,8 +23,8 @@
 import android.widget.ImageButton;
 import android.widget.TextView;
 
-import com.android.contacts.common.R;
 import com.android.contacts.common.list.ContactEntry;
+import com.android.dialer.R;
 
 /**
  * Displays the contact's picture overlaid with their name and number type in a tile.
diff --git a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
index aa77af4..0c4e23e 100644
--- a/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoritesTileAdapter.java
@@ -42,10 +42,10 @@
 
 import com.android.contacts.common.ContactPhotoManager;
 import com.android.contacts.common.ContactTileLoaderFactory;
-import com.android.contacts.common.R;
 import com.android.contacts.common.list.ContactEntry;
 import com.android.contacts.common.list.ContactTileAdapter.DisplayType;
 import com.android.contacts.common.list.ContactTileView;
+import com.android.dialer.R;
 
 import java.util.ArrayList;
 import java.util.Comparator;
diff --git a/src/com/android/dialer/list/SearchFragment.java b/src/com/android/dialer/list/SearchFragment.java
index 093d7c7..03d2242 100644
--- a/src/com/android/dialer/list/SearchFragment.java
+++ b/src/com/android/dialer/list/SearchFragment.java
@@ -26,7 +26,6 @@
 import android.widget.AbsListView.OnScrollListener;
 import android.widget.ListView;
 
-import com.android.contacts.common.animation.AnimUtils;
 import com.android.contacts.common.list.ContactEntryListAdapter;
 import com.android.contacts.common.list.ContactListItemView;
 import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
@@ -35,6 +34,7 @@
 import com.android.dialer.DialtactsActivity;
 import com.android.dialer.R;
 import com.android.dialer.util.DialerUtils;
+import com.android.phone.common.animation.AnimUtils;
 
 public class SearchFragment extends PhoneNumberPickerFragment {
 
diff --git a/src/com/android/dialer/widget/ActionBarController.java b/src/com/android/dialer/widget/ActionBarController.java
index 0e94df4..4f1e2e6 100644
--- a/src/com/android/dialer/widget/ActionBarController.java
+++ b/src/com/android/dialer/widget/ActionBarController.java
@@ -7,9 +7,9 @@
 import android.os.Bundle;
 import android.util.Log;
 
-import com.android.contacts.common.animation.AnimUtils;
-import com.android.contacts.common.animation.AnimUtils.AnimationCallback;
 import com.android.dialer.DialtactsActivity;
+import com.android.phone.common.animation.AnimUtils;
+import com.android.phone.common.animation.AnimUtils.AnimationCallback;
 
 /**
  * Controls the various animated properties of the actionBar: showing/hiding, fading/revealing,
@@ -234,4 +234,4 @@
     public boolean getIsActionBarSlidUp() {
         return mIsActionBarSlidUp;
     }
-}
\ No newline at end of file
+}
diff --git a/src/com/android/dialer/widget/SearchEditTextLayout.java b/src/com/android/dialer/widget/SearchEditTextLayout.java
index 3dcbc4b..36e5789 100644
--- a/src/com/android/dialer/widget/SearchEditTextLayout.java
+++ b/src/com/android/dialer/widget/SearchEditTextLayout.java
@@ -27,8 +27,8 @@
 import android.widget.EditText;
 import android.widget.FrameLayout;
 
-import com.android.contacts.common.animation.AnimUtils;
 import com.android.dialer.R;
+import com.android.phone.common.animation.AnimUtils;
 
 public class SearchEditTextLayout extends FrameLayout {
     private static final float EXPAND_MARGIN_FRACTION_START = 0.8f;