am b3c6951e: Merge "Fix Dialer tests"

* commit 'b3c6951e15865ac5a9007d281e12f380a16967e8':
  Fix Dialer tests
diff --git a/res/drawable/ic_phone_plus_wifi.png b/res/drawable/ic_phone_plus_wifi.png
new file mode 100644
index 0000000..5cd75ab
--- /dev/null
+++ b/res/drawable/ic_phone_plus_wifi.png
Binary files differ
diff --git a/res/drawable/ic_wifi_call.png b/res/drawable/ic_wifi_call.png
new file mode 100644
index 0000000..886cbd7
--- /dev/null
+++ b/res/drawable/ic_wifi_call.png
Binary files differ
diff --git a/res/layout/wifi_call_enable_completion.xml b/res/layout/wifi_call_enable_completion.xml
new file mode 100644
index 0000000..dd63c3b
--- /dev/null
+++ b/res/layout/wifi_call_enable_completion.xml
@@ -0,0 +1,55 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout
+        android:orientation="vertical"
+        android:id="@+id/call_log_list_item"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+    <ImageView
+            android:layout_width="192dp"
+            android:layout_height="128dp"
+            android:paddingTop="32dp"
+            android:paddingBottom="32dp"
+            android:layout_gravity="center_horizontal"
+            android:src="@drawable/ic_phone_plus_wifi"/>
+
+    <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:paddingLeft="64dp"
+            android:paddingRight="64dp"
+            android:textSize="12dp"
+            android:textColor="@color/dialtacts_secondary_text_color"
+            android:text="@string/wifi_setup_completed"/>
+
+    <LinearLayout
+            android:orientation="horizontal"
+            android:paddingTop="32dp"
+            android:paddingBottom="32dp"
+            android:layout_gravity="center_horizontal"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content">
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingRight="16dp"
+                android:textSize="12dp"
+                android:textAllCaps="true"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_setup_ok"/>
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:paddingRight="16dp"
+                android:textSize="12dp"
+                android:textAllCaps="true"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_setup_settings_shortcut"/>
+
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/wifi_call_enable_settings.xml b/res/layout/wifi_call_enable_settings.xml
new file mode 100644
index 0000000..565cb01
--- /dev/null
+++ b/res/layout/wifi_call_enable_settings.xml
@@ -0,0 +1,135 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout
+        android:orientation="vertical"
+        android:id="@+id/call_log_list_item"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+    <TextView
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:padding="10dp"
+            android:textSize="16dp"
+            android:textColor="@color/foreground_wifi_highlight"
+            android:background="@color/background_wifi_highlight"
+            android:text="@string/wifi_when_connected_to_a_signal"/>
+
+    <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@color/wifi_dark_wifi_highlight"/>
+
+    <LinearLayout
+            android:padding="10dp"
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <!-- TODO(ihab): Do this layout without using layout_weight -->
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="16dp"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_always_use_wifi"/>
+
+        <RadioButton
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/wifi_always_use_wifi"/>
+
+    </LinearLayout>
+
+    <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:background="@color/wifi_list_separator"/>
+
+    <LinearLayout
+            android:padding="10dp"
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <!-- TODO(ihab): Do this layout without using layout_weight -->
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="16dp"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_ask_use_wifi"/>
+
+        <RadioButton
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:id="@+id/wifi_ask_use_wifi"/>
+
+    </LinearLayout>
+
+    <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:layout_marginLeft="10dp"
+            android:layout_marginRight="10dp"
+            android:background="@color/wifi_list_separator"/>
+
+    <LinearLayout
+            android:padding="10dp"
+            android:orientation="horizontal"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <!-- TODO(ihab): Do this layout without using layout_weight -->
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:layout_weight="1"
+                android:textSize="16dp"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_never_use_wifi"/>
+
+        <RadioButton
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:checked="true"
+                android:id="@+id/wifi_never_use_wifi"/>
+
+    </LinearLayout>
+
+    <View
+            android:layout_width="match_parent"
+            android:layout_height="1dp"
+            android:background="@color/wifi_list_separator"/>
+
+    <LinearLayout
+            android:padding="10dp"
+            android:orientation="horizontal"
+            android:gravity="end"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content">
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16dp"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_next_setup_screen"/>
+
+        <ImageView
+                android:layout_width="32dp"
+                android:layout_height="32dp"
+                android:paddingStart="8dp"
+                android:src="@drawable/ic_wifi_call"/>
+
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/layout/wifi_call_enable_teaser.xml b/res/layout/wifi_call_enable_teaser.xml
new file mode 100644
index 0000000..fd70619
--- /dev/null
+++ b/res/layout/wifi_call_enable_teaser.xml
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<LinearLayout
+        android:orientation="horizontal"
+        android:id="@+id/call_log_list_item"
+        xmlns:android="http://schemas.android.com/apk/res/android"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+    <ImageView
+            android:layout_width="64dp"
+            android:layout_height="64dp"
+            android:padding="16dp"
+            android:src="@drawable/ic_wifi_call"
+            android:background="@color/background_wifi_highlight"/>
+
+    <LinearLayout
+        android:orientation="vertical"
+        android:layout_width="0dp"
+        android:layout_weight="1"
+        android:gravity="center_vertical"
+        android:padding="8dp"
+        android:layout_height="match_parent">
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="16dp"
+                android:textColor="@color/dialtacts_primary_text_color"
+                android:text="@string/wifi_no_signal_no_problem"/>
+
+        <TextView
+                android:layout_width="wrap_content"
+                android:layout_height="wrap_content"
+                android:textSize="12dp"
+                android:textColor="@color/dialtacts_secondary_text_color"
+                android:text="@string/wifi_enable_google_wifi_calling"/>
+
+    </LinearLayout>
+
+</LinearLayout>
\ No newline at end of file
diff --git a/res/values-af/strings.xml b/res/values-af/strings.xml
index e9e0676..927136d 100644
--- a/res/values-af/strings.xml
+++ b/res/values-af/strings.xml
@@ -160,5 +160,5 @@
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nuwe gemiste oproepe"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Gunstelinge en kontakte \nwat jy gereeld bel, sal hier wys.\nSo, begin bel."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tik prent om alle getalle te sien of druk en hou om te herorganiseer"</string>
-    <string name="description_dismiss" msgid="2146276780562549643">"Maak toe"</string>
+    <string name="description_dismiss" msgid="2146276780562549643">"Verwerp"</string>
 </resources>
diff --git a/res/values-ar/strings.xml b/res/values-ar/strings.xml
index 5b60eb9..9998c6f 100644
--- a/res/values-ar/strings.xml
+++ b/res/values-ar/strings.xml
@@ -125,13 +125,13 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"طلب لإضافة مكالمة"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"عدد الدقائق:<xliff:g id="MINUTES">%s</xliff:g>، عددالثواني: <xliff:g id="SECONDS">%s</xliff:g>"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"لم يتم إرسال المكالمة"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏لإعداد البريد الصوتي، انتقل إلى القائمة &gt; الإعدادات."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"لإعداد البريد الصوتي، انتقل إلى القائمة &gt; الإعدادات."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"للاتصال بالبريد الصوتي، يجب أولاً إيقاف وضع الطائرة."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"جارٍ التحميل..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"‏جارٍ التحميل من بطاقة SIM…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"‏بطاقة SIM وجهات الاتصال"</string>
+    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"جارٍ التحميل من بطاقة SIM…"</string>
+    <string name="simContacts_title" msgid="27341688347689769">"بطاقة SIM وجهات الاتصال"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"أعد تمكين تطبيق الأشخاص لاستخدام هذه الميزة."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"أدخل اسمًا أو رقم هاتف"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"الكل"</string>
diff --git a/res/values-da/strings.xml b/res/values-da/strings.xml
index 343016a..6bd3f72 100644
--- a/res/values-da/strings.xml
+++ b/res/values-da/strings.xml
@@ -160,5 +160,5 @@
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> nye ubesvarede opkald"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Dine foretrukne og de kontaktpersoner, du\noftest ringer til, vises her.\nSå gå du bare i gang med at ringe."</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Tryk på billedet for at se alle telefonnumre, eller tryk på billedet, og hold det nede, for at omarrangere"</string>
-    <string name="description_dismiss" msgid="2146276780562549643">"Annuller"</string>
+    <string name="description_dismiss" msgid="2146276780562549643">"Annullerer"</string>
 </resources>
diff --git a/res/values-fa/strings.xml b/res/values-fa/strings.xml
index ab95711..d7df7f6 100644
--- a/res/values-fa/strings.xml
+++ b/res/values-fa/strings.xml
@@ -125,7 +125,7 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"شماره گیری برای افزودن یک تماس"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> دقیقه و <xliff:g id="SECONDS">%s</xliff:g> ثانیه"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"تماس ارسال نشد"</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏برای راه‌اندازی پست صوتی به منو &gt; تنظیمات بروید."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"برای راه‌اندازی پست صوتی به منو &gt; تنظیمات بروید."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"برای تماس با پست صوتی، ابتدا حالت هواپیما را غیرفعال کنید."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"در حال بارگیری..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
diff --git a/res/values-fr/strings.xml b/res/values-fr/strings.xml
index f3dd323..bd54267 100644
--- a/res/values-fr/strings.xml
+++ b/res/values-fr/strings.xml
@@ -90,7 +90,7 @@
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Messages vocaux uniquement"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Afficher tous les appels"</string>
     <string name="add_2sec_pause" msgid="9214012315201040129">"Ajouter une pause de 2 s"</string>
-    <string name="add_wait" msgid="3360818652790319634">"Ajouter une attente"</string>
+    <string name="add_wait" msgid="3360818652790319634">"Ajouter Attente"</string>
     <string name="call_settings" msgid="7666474782093693667">"Paramètres"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Nouveau contact"</string>
     <string name="menu_allContacts" msgid="6948308384034051670">"Tous les contacts"</string>
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index 00e87fa..f6d2a3d 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -132,7 +132,7 @@
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
     <string name="simContacts_emptyLoading" msgid="6700035985448642408">"सिम कार्ड से लोड हो रहा है…"</string>
     <string name="simContacts_title" msgid="27341688347689769">"सिम कार्ड के संपर्क"</string>
-    <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग ऐप्स  को पुन: सक्षम करें."</string>
+    <string name="add_contact_not_available" msgid="1419207765446461366">"इस सुविधा का उपयोग करने के लिए लोग एप्स को पुन: सक्षम करें."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"नाम या फ़ोन नंबर लिखें"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"सभी"</string>
     <string name="call_log_missed_title" msgid="4541142293870638971">"छूटे हुए"</string>
diff --git a/res/values-hy-rAM/strings.xml b/res/values-hy-rAM/strings.xml
index 2a6e5e2..7385039 100644
--- a/res/values-hy-rAM/strings.xml
+++ b/res/values-hy-rAM/strings.xml
@@ -158,7 +158,7 @@
     <string name="search_shortcut_call_number" msgid="7277194656832895870">"Զանգել <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Ավելացնել կոնտակտներում"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"<xliff:g id="NUMBER">%s</xliff:g> նոր բաց թողնված զանգ"</string>
-    <string name="no_favorites" msgid="5212485868783382971">"Հաճախ կանչվող ընտրյալները և կոնտակտները\nկցուցադրվեն այստեղ:\nԿարող եք զանգել:"</string>
+    <string name="no_favorites" msgid="5212485868783382971">"Հաճախ կանչվող ընտրյալներ &amp; կոնտակտները\nկցուցադրվեն այստեղ:\nԿարող եք զանգել:"</string>
     <string name="contact_tooltip" msgid="7817483485692282287">"Հպեք նկարին՝ բոլոր համարները տեսնելու, կամ հպեք ու պահեք՝ վերադասավորելու համար:"</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Անտեսել"</string>
 </resources>
diff --git a/res/values-in/strings.xml b/res/values-in/strings.xml
index 0db2d04..4012b78 100644
--- a/res/values-in/strings.xml
+++ b/res/values-in/strings.xml
@@ -89,7 +89,7 @@
     <string name="menu_show_missed_only" msgid="154473166059743996">"Tampilkan panggilan terlewat"</string>
     <string name="menu_show_voicemails_only" msgid="1898421289561435703">"Tampilkan pesan suara saja"</string>
     <string name="menu_show_all_calls" msgid="7560347482073345885">"Tampilkan semua panggilan"</string>
-    <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2 dtk"</string>
+    <string name="add_2sec_pause" msgid="9214012315201040129">"Tambahkan jeda 2-det"</string>
     <string name="add_wait" msgid="3360818652790319634">"Tambahkan tunggu"</string>
     <string name="call_settings" msgid="7666474782093693667">"Setelan"</string>
     <string name="menu_newContact" msgid="1209922412763274638">"Kontak baru"</string>
diff --git a/res/values-iw/strings.xml b/res/values-iw/strings.xml
index 5a8df3ac..90c2ed6 100644
--- a/res/values-iw/strings.xml
+++ b/res/values-iw/strings.xml
@@ -125,13 +125,13 @@
     <string name="dialerDialpadHintText" msgid="5824490365898349041">"חייג כדי להוסיף שיחה"</string>
     <string name="callDetailsDurationFormat" msgid="8157706382818184268">"<xliff:g id="MINUTES">%s</xliff:g> דקות <xliff:g id="SECONDS">%s</xliff:g> שניות"</string>
     <string name="dialog_phone_call_prohibited_message" msgid="6554711866586660441">"השיחה לא נשלחה."</string>
-    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"‏כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' &gt; \'הגדרות\'."</string>
+    <string name="dialog_voicemail_not_ready_message" msgid="4384716252789515378">"כדי להגדיר את הדואר הקולי, עבור אל \'תפריט\' &gt; \'הגדרות\'."</string>
     <string name="dialog_voicemail_airplane_mode_message" msgid="530922773669546093">"כדי להתקשר לדואר קולי, ראשית כבה את מצב הטיסה."</string>
     <string name="contact_list_loading" msgid="5488620820563977329">"טוען..."</string>
     <string name="imei" msgid="3045126336951684285">"IMEI"</string>
     <string name="meid" msgid="6210568493746275750">"MEID"</string>
-    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"‏טוען מכרטיס SIM…"</string>
-    <string name="simContacts_title" msgid="27341688347689769">"‏אנשי קשר בכרטיס SIM"</string>
+    <string name="simContacts_emptyLoading" msgid="6700035985448642408">"טוען מכרטיס SIM…"</string>
+    <string name="simContacts_title" msgid="27341688347689769">"אנשי קשר בכרטיס SIM"</string>
     <string name="add_contact_not_available" msgid="1419207765446461366">"הפעל מחדש את אפליקציית אנשי הקשר כדי להשתמש בתכונה זו."</string>
     <string name="dialer_hint_find_contact" msgid="8798845521253672403">"הקלד שם או מספר טלפון"</string>
     <string name="call_log_all_title" msgid="3566738938889333307">"הכול"</string>
diff --git a/res/values-ru/strings.xml b/res/values-ru/strings.xml
index e647f63..5a9d84b 100644
--- a/res/values-ru/strings.xml
+++ b/res/values-ru/strings.xml
@@ -159,6 +159,6 @@
     <string name="search_shortcut_add_to_contacts" msgid="1853716708655789069">"Добавить в контакты"</string>
     <string name="num_missed_calls" msgid="8081736535604293886">"Пропущенных вызовов: <xliff:g id="NUMBER">%s</xliff:g>"</string>
     <string name="no_favorites" msgid="5212485868783382971">"Здесь будут отображаться избранные элементы\nи контакты, которым вы звоните чаще всего.\nОбщайтесь с удовольствием."</string>
-    <string name="contact_tooltip" msgid="7817483485692282287">"Нажмите на фото, чтобы посмотреть информацию о контакте. Чтобы переставить контакт в списке, нажмите на него и передвиньте на нужное место."</string>
+    <string name="contact_tooltip" msgid="7817483485692282287">"Нажмите на фото, чтобы посмотреть все номера. Чтобы изменить порядок номеров, нажмите и удерживайте фото."</string>
     <string name="description_dismiss" msgid="2146276780562549643">"Закрыть"</string>
 </resources>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index a8ddf2b..04e10b1 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -70,4 +70,17 @@
 
     <!-- Text color for no favorites message -->
     <color name="nofavorite_text_color">#777777</color>
+
+    <!-- Background color of wifi highlight items -->
+    <color name="background_wifi_highlight">#00ff00</color>
+
+    <!-- Foreground color of wifi highlight items -->
+    <color name="foreground_wifi_highlight">#ffffff</color>
+
+    <!-- Dark (e.g. border) regions of wifi highlight items -->
+    <color name="wifi_dark_wifi_highlight">#009900</color>
+
+    <!-- Generic separator color for wifi list items -->
+    <color name="wifi_list_separator">#909090</color>
+
 </resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 9b534da..b04eddd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -636,4 +636,27 @@
 
     <!-- Content description for dismiss button on badge. [CHAR LIMIT=NONE] -->
     <string name="description_dismiss">Dismiss</string>
+
+    <string name="wifi_no_signal_no_problem">No Signal? No Problem.</string>
+
+    <string name="wifi_enable_google_wifi_calling">Enable Google Wi-Fi Calling</string>
+
+    <string name="wifi_when_connected_to_a_signal">When connected to a strong Wi-Fi signal:</string>
+
+    <string name="wifi_always_use_wifi">Always use Wi-Fi to make calls</string>
+
+    <string name="wifi_ask_use_wifi">Always ask</string>
+
+    <string name="wifi_never_use_wifi">Never use Wi-Fi to make calls</string>
+
+    <string name="wifi_next_setup_screen">Next</string>
+
+    <string name="wifi_previous_setup_screen">Back</string>
+
+    <string name="wifi_setup_completed">Boom. Wi-Fi calling is all set up. You can change your preferences or turn it off anytime in settings.</string>
+
+    <string name="wifi_setup_ok">Ok, got it</string>
+
+    <string name="wifi_setup_settings_shortcut">Call settings</string>
+
 </resources>
diff --git a/src/com/android/dialer/list/PhoneFavoriteFragment.java b/src/com/android/dialer/list/PhoneFavoriteFragment.java
index 34666ee..19abcd7 100644
--- a/src/com/android/dialer/list/PhoneFavoriteFragment.java
+++ b/src/com/android/dialer/list/PhoneFavoriteFragment.java
@@ -183,6 +183,26 @@
         }
     }
 
+    private final WifiWizardAdapter.WifiWizardModel mWifiWizardModel =
+            new WifiWizardAdapter.WifiWizardModel() {
+                @Override
+                public void setWifiCallState(int state) {
+                    // TODO(ihab): Implement based on real data
+                }
+
+                @Override
+                public int getWifiCallState() {
+                    // TODO(ihab): Implement based on real data
+                    return WIFI_CALL_STATE_ALWAYS;
+                }
+
+                @Override
+                public boolean shouldDisplayWifiSelection() {
+                    // TODO(ihab): Implement based on real data
+                    return true;
+                }
+            };
+
     private Listener mListener;
 
     private OnListFragmentScrolledListener mActivityScrollListener;
@@ -305,7 +325,8 @@
                 R.layout.tile_interactions_teaser_view, mListView, false);
 
         mAdapter = new PhoneFavoriteMergedAdapter(getActivity(), this, mContactTileAdapter,
-                mCallLogAdapter, mShowAllContactsButton, mTileInteractionTeaserView);
+                mCallLogAdapter, mShowAllContactsButton, mTileInteractionTeaserView,
+                mWifiWizardModel);
 
         mTileInteractionTeaserView.setAdapter(mAdapter);
 
diff --git a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
index e7190c5..53d2ea6 100644
--- a/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
+++ b/src/com/android/dialer/list/PhoneFavoriteMergedAdapter.java
@@ -54,6 +54,7 @@
     private static final int ALL_CONTACTS_BUTTON_ITEM_ID = -1;
     private final PhoneFavoritesTileAdapter mContactTileAdapter;
     private final CallLogAdapter mCallLogAdapter;
+    private final WifiWizardAdapter mWifiWizardAdapter;
     private final View mShowAllContactsButton;
     private final PhoneFavoriteFragment mFragment;
     private final TileInteractionTeaserView mTileInteractionTeaserView;
@@ -104,14 +105,17 @@
             PhoneFavoritesTileAdapter contactTileAdapter,
             CallLogAdapter callLogAdapter,
             View showAllContactsButton,
-            TileInteractionTeaserView tileInteractionTeaserView) {
+            TileInteractionTeaserView tileInteractionTeaserView,
+            WifiWizardAdapter.WifiWizardModel wifiWizardModel) {
         final Resources resources = context.getResources();
         mContext = context;
         mFragment = fragment;
         mCallLogPadding = resources.getDimensionPixelSize(R.dimen.recent_call_log_item_padding);
         mContactTileAdapter = contactTileAdapter;
         mCallLogAdapter = callLogAdapter;
+        mWifiWizardAdapter = new WifiWizardAdapter(context, wifiWizardModel);
         mObserver = new CustomDataSetObserver();
+        mWifiWizardAdapter.registerDataSetObserver(mObserver);
         mCallLogAdapter.registerDataSetObserver(mObserver);
         mContactTileAdapter.registerDataSetObserver(mObserver);
         mShowAllContactsButton = showAllContactsButton;
@@ -123,15 +127,23 @@
     @Override
     public int getCount() {
         if (mContactTileAdapter.getCount() > 0) {
-            return mContactTileAdapter.getCount() + mCallLogAdapter.getCount() + 1 +
-                    getTeaserViewCount();
+            return mWifiWizardAdapter.getCount() + mContactTileAdapter.getCount() +
+                    mCallLogAdapter.getCount() + 1 + getTeaserViewCount();
         } else {
-            return mCallLogAdapter.getCount();
+            return mWifiWizardAdapter.getCount() + mCallLogAdapter.getCount();
         }
     }
 
     @Override
     public Object getItem(int position) {
+        if (mWifiWizardAdapter.getCount() > 0) {
+            if (position < mWifiWizardAdapter.getCount()) {
+                return mWifiWizardAdapter.getItem(position);
+            } else {
+                position -= mWifiWizardAdapter.getCount();
+            }
+        }
+
         final int callLogAdapterCount = mCallLogAdapter.getCount();
 
         if (callLogAdapterCount > 0) {
@@ -151,16 +163,26 @@
      *
      * These are the ranges of IDs reserved for each item type.
      *
-     * -(N + 1) to -3: CallLogAdapterItems, where N is equal to the number of call log items
+     * -(N + 4): Wi-Fi Wizard item, where N is equal to the number of call log items
+     * -(N + 3) to -3: CallLogAdapterItems, where N is equal to the number of call log items
      * -2: Teaser
      * -1: All contacts button
-     * 0 to (N -1): Rows of tiled contacts, where N is equal to the max rows of tiled contacts
-     * N to infinity: Rows of regular contacts. Their item id is calculated by N + contact_id,
+     * 0 to (M -1): Rows of tiled contacts, where M is equal to the max rows of tiled contacts
+     * M to infinity: Rows of regular contacts. Their item id is calculated by M + contact_id,
      * where contact_id is guaranteed to never be negative.
      */
     @Override
     public long getItemId(int position) {
         final int callLogAdapterCount = mCallLogAdapter.getCount();
+
+        if (mWifiWizardAdapter.getCount() > 0) {
+            if (position < mWifiWizardAdapter.getCount()) {
+                return - callLogAdapterCount - 4;
+            } else {
+                position -= mWifiWizardAdapter.getCount();
+            }
+        }
+
         if (position < callLogAdapterCount) {
             // Call log items are not animated, so reusing their position for IDs is fine.
             return ALL_CONTACTS_BUTTON_ITEM_ID - 2 - position;
@@ -184,7 +206,8 @@
 
     @Override
     public int getViewTypeCount() {
-        return (mContactTileAdapter.getViewTypeCount() +            /* Favorite and frequent */
+        return (mWifiWizardAdapter.getViewTypeCount() +             /* Enable Wifi calling */
+                mContactTileAdapter.getViewTypeCount() +            /* Favorite and frequent */
                 mCallLogAdapter.getViewTypeCount() +                /* Recent call log */
                 getTeaserViewCount() +                              /* Teaser */
                 1);                                                 /* Show all contacts button. */
@@ -192,6 +215,14 @@
 
     @Override
     public int getItemViewType(int position) {
+        if (mWifiWizardAdapter.getCount() > 0) {
+            if (position < mWifiWizardAdapter.getCount()) {
+                return mWifiWizardAdapter.getItemViewType(position);
+            } else {
+                position -= mWifiWizardAdapter.getCount();
+            }
+        }
+
         final int callLogAdapterCount = mCallLogAdapter.getCount();
 
         if (position < callLogAdapterCount) {
@@ -202,7 +233,7 @@
                 mTileInteractionTeaserView.getShouldDisplayInList()) {
             // View type of the teaser row is the last view type of the contact tile adapter + 3
             return mContactTileAdapter.getViewTypeCount() + 2;
-        } else if (position < getCount() - 1) {
+        } else if (position < getCount() - mWifiWizardAdapter.getCount() - 1) {
             return mContactTileAdapter.getItemViewType(
                     getAdjustedFavoritePosition(position, callLogAdapterCount));
         } else {
@@ -214,9 +245,32 @@
 
     @Override
     public View getView(int position, View convertView, ViewGroup parent) {
+        if (mWifiWizardAdapter.getCount() > 0) {
+            if (position < mWifiWizardAdapter.getCount()) {
+                SwipeableCallLogRow wrapper = new SwipeableCallLogRow(mContext);
+                wrapper.addView(mWifiWizardAdapter.getView(position, convertView, parent));
+                wrapper.setOnItemSwipeListener(new OnItemGestureListener() {
+                    @Override
+                    public void onSwipe(View view) {}
+
+                    @Override
+                    public void onTouch() {}
+
+                    @Override
+                    public boolean isSwipeEnabled() {
+                        return false;
+                    }
+                });
+                return wrapper;
+            } else {
+                position -= mWifiWizardAdapter.getCount();
+            }
+        }
+
         final int callLogAdapterCount = mCallLogAdapter.getCount();
 
-        if ((position == getCount() - 1) && (mContactTileAdapter.getCount() > 0)) {
+        if ((position == getCount() - mWifiWizardAdapter.getCount() - 1)
+                && (mContactTileAdapter.getCount() > 0)) {
             return mShowAllContactsButton;
         }
 
@@ -276,6 +330,14 @@
 
     @Override
     public boolean isEnabled(int position) {
+        if (mWifiWizardAdapter.getCount() > 0) {
+            if (position < mWifiWizardAdapter.getCount()) {
+                return mWifiWizardAdapter.isEnabled(position);
+            } else {
+                position -= mWifiWizardAdapter.getCount();
+            }
+        }
+
         final int callLogAdapterCount = mCallLogAdapter.getCount();
         if (position < callLogAdapterCount) {
             return mCallLogAdapter.isEnabled(position);
diff --git a/src/com/android/dialer/list/WifiWizardAdapter.java b/src/com/android/dialer/list/WifiWizardAdapter.java
new file mode 100644
index 0000000..bac8c7a
--- /dev/null
+++ b/src/com/android/dialer/list/WifiWizardAdapter.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (C) 2013 Google Inc.
+ * Licensed to 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.list;
+
+import com.android.dialer.R;
+import android.content.Context;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.BaseAdapter;
+import android.widget.Button;
+
+public class WifiWizardAdapter extends BaseAdapter {
+
+    public interface WifiWizardModel {
+        public static final int WIFI_CALL_STATE_ALWAYS = 0;
+        public static final int WIFI_CALL_STATE_NEVER = 1;
+        public static final int WIFI_CALL_STATE_ASK = 2;
+
+        void setWifiCallState(int state);
+
+        int getWifiCallState();
+
+        boolean shouldDisplayWifiSelection();
+    }
+
+    private abstract class WifiWizardStep {
+        private final int mResourceId;
+        private View mView;
+        protected WifiWizardStep(int resourceId) {
+            mResourceId = resourceId;
+        }
+        public final View getView() {
+            if (mView == null) {
+                mView = inflate(mResourceId);
+            }
+            if (mView.getParent() != null && (mView.getParent() instanceof ViewGroup)) {
+                ((ViewGroup) mView.getParent()).removeView(mView);
+            }
+            configureView(mView);
+            return mView;
+        }
+        protected abstract void configureView(View view);
+    }
+
+    private WifiWizardStep mTeaserStep =
+            new WifiWizardStep(R.layout.wifi_call_enable_teaser) {
+                @Override
+                protected void configureView(View view) {
+                    view.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            mStep = mSettingsStep;
+                            notifyDataSetChanged();
+                        }
+                    });
+                }
+            };
+
+    private WifiWizardStep mSettingsStep =
+            new WifiWizardStep(R.layout.wifi_call_enable_settings) {
+                @Override
+                protected void configureView(View view) {
+                    view.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            mStep = mCompletionStep;
+                            notifyDataSetChanged();
+                        }
+                    });
+                }
+            };
+
+    private WifiWizardStep mCompletionStep =
+            new WifiWizardStep(R.layout.wifi_call_enable_completion) {
+                @Override
+                protected void configureView(View view) {
+                    view.setOnClickListener(new View.OnClickListener() {
+                        @Override
+                        public void onClick(View v) {
+                            mStep = mTeaserStep;
+                            notifyDataSetChanged();
+                        }
+                    });
+                }
+            };
+
+    private final WifiWizardModel mModel;
+    private final Context mContext;
+    private WifiWizardStep mStep = mTeaserStep;
+
+    public WifiWizardAdapter(Context context, WifiWizardModel model) {
+        this.mContext = context;
+        this.mModel = model;
+    }
+
+    @Override
+    public int getCount() {
+        return 1;
+    }
+
+    @Override
+    public Object getItem(int position) {
+        return this;
+    }
+
+    @Override
+    public long getItemId(int position) {
+        return 1L;
+    }
+
+    @Override
+    public View getView(int position, View convertView, ViewGroup parent) {
+        return mStep.getView();
+    }
+
+    private View inflate(int resource) {
+        return ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
+                .inflate(resource, null);
+    }
+}