diff --git a/.gitreview b/.gitreview
new file mode 100644
index 0000000..74ca2ff
--- /dev/null
+++ b/.gitreview
@@ -0,0 +1,5 @@
+[gerrit]
+host=review.blissroms.com
+port=29418
+project=platform_packages_apps_Dialer.git
+defaultbranch=n7.1-caf
diff --git a/Android.mk b/Android.mk
index 561174d..9dddb9e 100755
--- a/Android.mk
+++ b/Android.mk
@@ -25,10 +25,7 @@
     $(phone_common_dir)/res
 
 src_dirs += \
-    src-N \
-    $(incallui_dir)/src-N \
-    $(contacts_common_dir)/src-N \
-    $(phone_common_dir)/src-N
+    src-N
 
 LOCAL_SRC_FILES := $(call all-java-files-under, $(src_dirs))
 LOCAL_SRC_FILES += src/org/codeaurora/presenceserv/IPresenceService.aidl \
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 6af78af..af291ac 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -59,6 +59,7 @@
     <uses-permission android:name="com.android.launcher.permission.INSTALL_SHORTCUT"/>
     <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
     <uses-permission android:name="android.permission.BROADCAST_STICKY" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
     <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
@@ -68,6 +69,7 @@
      start requests, even if they happen immediately after the user
      presses home. -->
     <uses-permission android:name="android.permission.STOP_APP_SWITCHES" />
+
     <!-- For enrich call -->
     <uses-permission android:name="com.qualcomm.qti.internal.permission.ACCESS_ENRICHED_CALL" />
 
diff --git a/InCallUI/res/values/styles.xml b/InCallUI/res/values/styles.xml
index 6f3d3d7..ca6f660 100644
--- a/InCallUI/res/values/styles.xml
+++ b/InCallUI/res/values/styles.xml
@@ -94,6 +94,7 @@
 
     <style name="InCallActionBarStyle" parent="@android:style/Widget.Material.Light.ActionBar">
         <item name="android:background">@color/incall_action_bar_background_color</item>
+        <item name="android:backgroundStacked">@color/incall_banner_secondary_background_color</item>
         <item name="android:textColor">@color/incall_action_bar_text_color</item>
     </style>
 
diff --git a/InCallUI/src/com/android/incallui/Call.java b/InCallUI/src/com/android/incallui/Call.java
index feaf5ee..25826f7 100644
--- a/InCallUI/src/com/android/incallui/Call.java
+++ b/InCallUI/src/com/android/incallui/Call.java
@@ -385,6 +385,7 @@
     private int mState = State.INVALID;
     private DisconnectCause mDisconnectCause;
     private int mSessionModificationState;
+    private boolean mIsOutgoing = false;
     private final List<String> mChildCallIds = new ArrayList<>();
     private final VideoSettings mVideoSettings = new VideoSettings();
     private int mVideoState;
@@ -686,6 +687,9 @@
 
     public void setState(int state) {
         mState = state;
+        if (state == State.DIALING || state == State.CONNECTING) {
+            mIsOutgoing = true;
+        }
         if (mState == State.INCOMING) {
             mLogState.isIncoming = true;
         } else if (mState == State.DISCONNECTED) {
@@ -694,6 +698,10 @@
         }
     }
 
+    public boolean isOutgoing() {
+        return mIsOutgoing;
+    }
+
     public int getNumberPresentation() {
         return mTelecomCall == null ? null : mTelecomCall.getDetails().getHandlePresentation();
     }
diff --git a/InCallUI/src/com/android/incallui/CallCardFragment.java b/InCallUI/src/com/android/incallui/CallCardFragment.java
index 1c4890b..dc9c8eb 100644
--- a/InCallUI/src/com/android/incallui/CallCardFragment.java
+++ b/InCallUI/src/com/android/incallui/CallCardFragment.java
@@ -1498,6 +1498,9 @@
                         setViewStatePostAnimation(listener);
                         mIsAnimating = false;
                         InCallPresenter.getInstance().onShrinkAnimationComplete();
+                        if (animator != null) {
+                            animator.removeListener(this);
+                        }
                     }
                 });
                 animator.start();
diff --git a/InCallUI/src/com/android/incallui/CallList.java b/InCallUI/src/com/android/incallui/CallList.java
index 059345f..abc03fb 100644
--- a/InCallUI/src/com/android/incallui/CallList.java
+++ b/InCallUI/src/com/android/incallui/CallList.java
@@ -538,7 +538,8 @@
 
         boolean updated = false;
 
-        if (call.getState() == Call.State.DISCONNECTED) {
+        if (call.getState() == Call.State.DISCONNECTING
+                || call.getState() == Call.State.DISCONNECTED) {
             // update existing (but do not add!!) disconnected calls
             if (mCallById.containsKey(call.getId())) {
                 // For disconnected calls, we want to keep them alive for a few seconds so that the
@@ -567,8 +568,8 @@
     }
 
     private int getDelayForDisconnect(Call call) {
-        Preconditions.checkState(call.getState() == Call.State.DISCONNECTED);
-
+        Preconditions.checkState(call.getState() == Call.State.DISCONNECTED
+                || call.getState() == Call.State.DISCONNECTING);
 
         final int cause = call.getDisconnectCause().getCode();
         final int delay;
@@ -583,6 +584,7 @@
             case DisconnectCause.REJECTED:
             case DisconnectCause.MISSED:
             case DisconnectCause.CANCELED:
+            case DisconnectCause.UNKNOWN:
                 // no delay for missed/rejected incoming calls and canceled outgoing calls.
                 delay = 0;
                 break;
diff --git a/InCallUI/src/com/android/incallui/DialpadFragment.java b/InCallUI/src/com/android/incallui/DialpadFragment.java
index ad288bd..38e3d8f 100644
--- a/InCallUI/src/com/android/incallui/DialpadFragment.java
+++ b/InCallUI/src/com/android/incallui/DialpadFragment.java
@@ -455,6 +455,10 @@
 
     public void updateColors() {
         int textColor = InCallPresenter.getInstance().getThemeColors().mPrimaryColor;
+        // Disable dynamic digits color, for better theme compatibility
+        if (getContext().getResources().getBoolean(R.bool.config_dialpadDigitsStaticColor)) {
+            textColor = getContext().getResources().getColor(R.color.dialpad_digits_color);
+        }
 
         if (mCurrentTextColor == textColor) {
             return;
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 0bd3a5f..555f92c 100644
--- a/InCallUI/src/com/android/incallui/InCallPresenter.java
+++ b/InCallUI/src/com/android/incallui/InCallPresenter.java
@@ -114,6 +114,7 @@
     private AudioModeProvider mAudioModeProvider;
     private StatusBarNotifier mStatusBarNotifier;
     private ExternalCallNotifier mExternalCallNotifier;
+    private InCallVibrationHandler mInCallVibrationHandler;
     private ContactInfoCache mContactInfoCache;
     private Context mContext;
     private CallList mCallList;
@@ -327,6 +328,9 @@
 
         mContactInfoCache = contactInfoCache;
 
+        mInCallVibrationHandler = new InCallVibrationHandler(context);
+        addListener(mInCallVibrationHandler);
+
         mStatusBarNotifier = statusBarNotifier;
         mExternalCallNotifier = externalCallNotifier;
         addListener(mStatusBarNotifier);
@@ -1707,6 +1711,11 @@
             mStatusBarNotifier = null;
 
             InCallCsRedialHandler.getInstance().tearDown();
+ 
+            if (mInCallVibrationHandler != null) {
+                removeListener(mInCallVibrationHandler);
+            }
+            mInCallVibrationHandler = null;
 
             if (mCallList != null) {
                 mCallList.removeListener(this);
diff --git a/InCallUI/src/com/android/incallui/InCallVibrationHandler.java b/InCallUI/src/com/android/incallui/InCallVibrationHandler.java
new file mode 100644
index 0000000..20722a8
--- /dev/null
+++ b/InCallUI/src/com/android/incallui/InCallVibrationHandler.java
@@ -0,0 +1,140 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod 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.incallui;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.os.Handler;
+import android.os.Message;
+import android.os.Vibrator;
+import android.preference.PreferenceManager;
+import android.telecom.DisconnectCause;
+
+import com.android.incallui.InCallPresenter.InCallState;
+
+public class InCallVibrationHandler extends Handler implements
+        InCallPresenter.InCallStateListener {
+
+    private static final int MSG_VIBRATE_45_SEC = 1;
+
+    private static final String KEY_VIBRATE_CALL_WAITING = "incall_vibrate_call_waiting";
+    private static final String KEY_VIBRATE_OUTGOING = "incall_vibrate_outgoing";
+    private static final String KEY_VIBRATE_45SECS = "incall_vibrate_45secs";
+    private static final String KEY_VIBRATE_HANGUP = "incall_vibrate_hangup";
+
+    private SharedPreferences mPrefs;
+    private Vibrator mVibrator;
+    private Call mActiveCall;
+
+    public InCallVibrationHandler(Context context) {
+        mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
+        mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
+    }
+
+    @Override
+    public void handleMessage(Message msg) {
+        switch (msg.what) {
+            case MSG_VIBRATE_45_SEC:
+                vibrate(70, 0, 0);
+                sendEmptyMessageDelayed(MSG_VIBRATE_45_SEC, 60000);
+                break;
+        }
+    }
+
+    @Override
+    public void onStateChange(InCallState oldState, InCallState newState, CallList callList) {
+        Call activeCall = callList.getActiveCall();
+
+        if (activeCall != null && mActiveCall == null) {
+            Log.d(this, "Transition to active call " + activeCall);
+            if (activeCall.isOutgoing()) {
+                handleOutgoingCallVibration(activeCall);
+            }
+            mActiveCall = activeCall;
+        } else if (activeCall != null && callList.getIncomingCall() != null
+                && !callList.getIncomingCall().equals(activeCall)) {
+            Log.d(this, "New incoming call" + callList.getIncomingCall());
+            handleCallWaitingVibration(activeCall);
+        } else if (activeCall == null && mActiveCall != null) {
+            Log.d(this, "Transition from active call " + mActiveCall);
+            handleCallEnd(mActiveCall);
+            mActiveCall = null;
+        }
+    }
+
+    private void handleOutgoingCallVibration(Call call) {
+        long durationMillis = System.currentTimeMillis() - call.getConnectTimeMillis();
+        Log.d(this, "Start outgoing call: duration = " + durationMillis);
+
+        if (mPrefs.getBoolean(KEY_VIBRATE_OUTGOING, false) && durationMillis < 200) {
+            vibrate(100, 200, 0);
+        }
+        if (mPrefs.getBoolean(KEY_VIBRATE_45SECS, false)) {
+            start45SecondVibration(durationMillis);
+        }
+    }
+
+    private void handleCallWaitingVibration(Call call) {
+        Log.d(this, "Start call waiting vibration");
+        if (mPrefs.getBoolean(KEY_VIBRATE_CALL_WAITING, false)) {
+            vibrate(200, 300, 500);
+        }
+    }
+
+    private void handleCallEnd(Call call) {
+        long durationMillis = System.currentTimeMillis() - call.getConnectTimeMillis();
+        DisconnectCause cause = call.getDisconnectCause();
+        boolean localDisconnect =
+                // Disconnection not yet processed
+                call.getState() == Call.State.DISCONNECTING ||
+                // Disconnection already processed
+                (cause != null && cause.getCode() == DisconnectCause.LOCAL);
+
+        Log.d(this, "Ending active call: duration = " + durationMillis
+                + ", locally disconnected = " + localDisconnect);
+
+        if (mPrefs.getBoolean(KEY_VIBRATE_HANGUP, false) &&
+                !localDisconnect && durationMillis > 500) {
+            vibrate(50, 100, 50);
+        }
+        // Stop 45-second vibration
+        removeMessages(MSG_VIBRATE_45_SEC);
+    }
+
+    private void start45SecondVibration(long callDurationMillis) {
+        callDurationMillis = callDurationMillis % 60000;
+        Log.d(this, "vibrate start @" + callDurationMillis);
+        removeMessages(MSG_VIBRATE_45_SEC);
+
+        long timer;
+        if (callDurationMillis > 45000) {
+            // Schedule the alarm at the next minute + 45 secs
+            timer = 45000 + 60000 - callDurationMillis;
+        } else {
+            // Schedule the alarm at the first 45 second mark
+            timer = 45000 - callDurationMillis;
+        }
+        sendEmptyMessageDelayed(MSG_VIBRATE_45_SEC, timer);
+    }
+
+    private void vibrate(int v1, int p1, int v2) {
+        long[] pattern = new long[] {
+            0, v1, p1, v2
+        };
+        mVibrator.vibrate(pattern, -1);
+    }
+}
diff --git a/res/drawable-xhdpi/fab_blue.png b/res/drawable-xhdpi/fab_blue.png
index 300b07e..0051e87 100644
--- a/res/drawable-xhdpi/fab_blue.png
+++ b/res/drawable-xhdpi/fab_blue.png
Binary files differ
diff --git a/res/layout-land/dialpad_fragment.xml b/res/layout-land/dialpad_fragment.xml
index 0639899..0371396 100644
--- a/res/layout-land/dialpad_fragment.xml
+++ b/res/layout-land/dialpad_fragment.xml
@@ -29,7 +29,7 @@
             android:layout_width="0dp"
             android:layout_height="match_parent"
             android:layout_weight="4"
-            android:background="#00000000" />
+            android:background="@color/background_color_transparent" />
 
         <!-- Dialpad shadow -->
         <View
diff --git a/res/layout/dialpad_fragment.xml b/res/layout/dialpad_fragment.xml
index 5748f5d..4440e90 100644
--- a/res/layout/dialpad_fragment.xml
+++ b/res/layout/dialpad_fragment.xml
@@ -30,7 +30,7 @@
             android:layout_width="match_parent"
             android:layout_height="0dp"
             android:layout_weight="1"
-            android:background="#00000000" />
+            android:background="@color/background_color_transparent" />
         <!-- Dialpad shadow -->
         <View
             android:layout_width="match_parent"
diff --git a/res/layout/keyguard_preview.xml b/res/layout/keyguard_preview.xml
index 16243eb..3f6cd72 100644
--- a/res/layout/keyguard_preview.xml
+++ b/res/layout/keyguard_preview.xml
@@ -26,5 +26,5 @@
         android:layout_width="match_parent"
         android:layout_weight="1"
         android:layout_height="0dp"
-        android:background="#ffffff" />
+        android:background="@color/keyguard_preview_bg" />
 </LinearLayout>
diff --git a/res/layout/voicemail_promo_card.xml b/res/layout/voicemail_promo_card.xml
index ba4ac59..9dc7850 100644
--- a/res/layout/voicemail_promo_card.xml
+++ b/res/layout/voicemail_promo_card.xml
@@ -46,7 +46,7 @@
                     android:layout_height="wrap_content"
                     android:layout_marginBottom="@dimen/promo_card_title_padding"
                     android:layout_gravity="center_vertical"
-                    android:textColor="@color/background_dialer_white"
+                    android:textColor="@color/promo_card_header_text_color"
                     android:textSize="@dimen/call_log_primary_text_size"
                     android:textStyle="bold"
                     android:text="@string/visual_voicemail_title"
@@ -56,7 +56,7 @@
                     android:id="@+id/promo_card_details"
                     android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
-                    android:textColor="@color/background_dialer_white"
+                    android:textColor="@color/promo_card_details_text_color"
                     android:textSize="@dimen/call_log_detail_text_size"
                     android:text="@string/visual_voicemail_text"
                     android:lineSpacingExtra="@dimen/promo_card_line_spacing"
diff --git a/res/values/bliss_colors.xml b/res/values/bliss_colors.xml
new file mode 100644
index 0000000..94f3d5c
--- /dev/null
+++ b/res/values/bliss_colors.xml
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (c) 2016 Project Substratum
+    Copyright (c) 2016 BlissRoms Project
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+-->
+
+<resources>
+    <color name="background_color_transparent">#00000000</color>
+    <color name="call_log_primary_background_color">#000000</color>
+    <color name="call_log_secondary_background_color">#333333</color>
+    <color name="call_log_header_color">#33b5e5</color>
+    <color name="call_log_voicemail_status_background_color">#262626</color>
+    <color name="call_log_voicemail_status_text_color">#888888</color>
+    <color name="call_log_voicemail_status_action_text_color">#33b5e5</color>
+    <color name="call_log_primary_bg_color">#FFFFFF</color>
+    <color name="call_log_secondary_bg_color">#FFFFFF</color>
+    <color name="call_log_header_color_dark">#FFFFFF</color>
+    <color name="dialer_button_text_color">#fff</color>
+    <color name="dialpad_text_color">#FFFFFF</color>
+    <color name="keyguard_preview_bg">#ffffff</color>
+</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index b6632c1..7c58d77 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -33,8 +33,9 @@
   <bool name="config_regional_video_call_welcome_dialog">false</bool>
   <bool name="config_regional_pup_no_available_network">false</bool>
   <bool name="config_regional_call_data_usage_enable">false</bool>
+
   <!--not display SIP dial icon -->
-  <bool name="config_hide_SIP_dial_icon">false</bool>
+  <bool name="config_hide_SIP_dial_icon">true</bool>
 
   <integer name="speed_dial_emergency_number_assigned_key">9</integer>
 
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
new file mode 100644
index 0000000..d396e24
--- /dev/null
+++ b/res/values/custom_strings.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2013-2016 The CyanogenMod 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 xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+
+    <!-- In-call vibrate options -->
+    <string name="incall_vibration_category_title">In-call vibration</string>
+    <string name="incall_vibrate_outgoing_title">Vibrate on answer</string>
+    <string name="vibrate_call_waiting">Vibrate on call waiting</string>
+    <string name="incall_vibrate_hangup_title">Vibrate on hang up</string>
+    <string name="incall_vibrate_45_title">Vibrate every minute</string>
+    <string name="incall_vibrate_45_summary">Vibrates at 45s of every minute during outgoing calls</string>
+
+</resources>
diff --git a/res/values/projekt_colors.xml b/res/values/projekt_colors.xml
new file mode 100644
index 0000000..a894291
--- /dev/null
+++ b/res/values/projekt_colors.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+     Copyright (C) 2016 Projekt Substratum
+
+     Licensed under the Apache License, Version 2.0 (the "License");
+     you may not use this file except in compliance with the License.
+     You may obtain a copy of the License at
+
+          http://www.apache.org/licenses/LICENSE-2.0
+
+     Unless required by applicable law or agreed to in writing, software
+     distributed under the License is distributed on an "AS IS" BASIS,
+     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+     See the License for the specific language governing permissions and
+     limitations under the License.
+-->
+<resources>
+    <color name="promo_card_header_text_color">@color/background_dialer_white</color>
+    <color name="promo_card_details_text_color">@color/background_dialer_white</color>
+    <color name="dialpad_digits_color">@color/incall_background_color</color>
+</resources>
diff --git a/res/values/projekt_config.xml b/res/values/projekt_config.xml
new file mode 100644
index 0000000..1f61f12
--- /dev/null
+++ b/res/values/projekt_config.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+    Copyright (c) 2016 Project Substratum
+
+    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="config_dialpadDigitsStaticColor">false</bool>
+</resources>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ce088cd..533b28b 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -558,7 +558,7 @@
 
     <!-- Hint displayed in dialer search box when there is no query that is currently typed.
          [CHAR LIMIT=30] -->
-    <string name="dialer_hint_find_contact">Search contacts</string>
+    <string name="dialer_hint_find_contact">Search people &amp; places</string>
 
     <!-- Hint displayed in add blocked number search box when there is no query typed.
          [CHAR LIMIT=45] -->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index dbe3244..5642c1d 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -68,15 +68,25 @@
         <item name="list_item_text_offset_top">-2dp</item>
         <!-- CallLog -->
         <item name="call_log_primary_text_color">@color/dialtacts_primary_text_color</item>
-        <item name="call_log_primary_background_color">#000000</item>
+        <item name="call_log_primary_background_color">
+            @color/call_log_primary_background_color
+        </item>
         <item name="call_log_secondary_text_color">@color/dialtacts_secondary_text_color</item>
-        <item name="call_log_secondary_background_color">#333333</item>
-        <item name="call_log_header_color">#33b5e5</item>
+        <item name="call_log_secondary_background_color">
+            @color/call_log_secondary_background_color
+        </item>
+        <item name="call_log_header_color">@color/call_log_header_color</item>
         <!-- VoicemailStatus -->
         <item name="call_log_voicemail_status_height">48dip</item>
-        <item name="call_log_voicemail_status_background_color">#262626</item>
-        <item name="call_log_voicemail_status_text_color">#888888</item>
-        <item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
+        <item name="call_log_voicemail_status_background_color">
+            @color/call_log_voicemail_status_background_color
+        </item>
+        <item name="call_log_voicemail_status_text_color">
+            @color/call_log_voicemail_status_text_color
+        </item>
+        <item name="call_log_voicemail_status_action_text_color">
+            @color/call_log_voicemail_status_action_text_color
+        </item>
             <!-- Favorites -->
         <item name="favorites_padding_bottom">?android:attr/actionBarSize</item>
         <item name="android:colorPrimary">@color/dialer_theme_color</item>
@@ -92,7 +102,7 @@
     </style>
 
     <style name="DialerButtonTextStyle" parent="@android:style/TextAppearance.Material.Widget.Button">
-        <item name="android:textColor">#fff</item>
+        <item name="android:textColor">@color/dialer_button_text_color</item>
     </style>
 
     <!-- Action bar overflow menu icon. -->
@@ -108,7 +118,7 @@
     </style>
 
     <style name="DialpadTheme" parent="DialtactsTheme">
-        <item name="android:textColorPrimary">#FFFFFF</item>
+        <item name="android:textColorPrimary">@color/dialpad_text_color</item>
     </style>
 
     <style name="DialtactsThemeWithoutActionBarOverlay" parent="DialtactsTheme">
@@ -132,14 +142,20 @@
     <style name="CallDetailActivityTheme" parent="DialtactsThemeWithoutActionBarOverlay">
         <item name="android:windowBackground">@color/background_dialer_results</item>
         <!-- CallLog -->
-        <item name="call_log_primary_background_color">#FFFFFF</item>
-        <item name="call_log_secondary_background_color">#FFFFFF</item>
-        <item name="call_log_header_color">#FFFFFF</item>
+        <item name="call_log_primary_background_color">@color/call_log_primary_bg_color</item>
+        <item name="call_log_secondary_background_color">@color/call_log_secondary_bg_color</item>
+        <item name="call_log_header_color">@color/call_log_header_color_dark</item>
         <!-- VoicemailStatus -->
         <item name="call_log_voicemail_status_height">48dip</item>
-        <item name="call_log_voicemail_status_background_color">#262626</item>
-        <item name="call_log_voicemail_status_text_color">#888888</item>
-        <item name="call_log_voicemail_status_action_text_color">#33b5e5</item>
+        <item name="call_log_voicemail_status_background_color">
+            @color/call_log_voicemail_status_background_color
+        </item>
+        <item name="call_log_voicemail_status_text_color">
+            @color/call_log_voicemail_status_text_color
+        </item>
+        <item name="call_log_voicemail_status_action_text_color">
+            @color/call_log_voicemail_status_action_text_color
+        </item>
         <item name="android:actionOverflowButtonStyle">@style/DialtactsActionBarOverflowWhite</item>
     </style>
 
@@ -252,6 +268,7 @@
         <!-- Setting description. -->
         <item name="android:textColorSecondary">@color/settings_text_color_secondary</item>
         <item name="android:windowBackground">@color/setting_background_color</item>
+        <item name="android:colorControlActivated">@color/dialer_theme_color</item>
         <item name="android:colorAccent">@color/dialtacts_theme_color</item>
         <item name="android:textColorLink">@color/dialtacts_theme_color</item>
     </style>
diff --git a/res/xml/sound_settings.xml b/res/xml/sound_settings.xml
index 80fad62..9bc6e4b 100644
--- a/res/xml/sound_settings.xml
+++ b/res/xml/sound_settings.xml
@@ -25,13 +25,13 @@
         android:persistent="false"
         android:ringtoneType="ringtone" />
 
-    <CheckBoxPreference
+    <SwitchPreference
         android:key="@string/vibrate_on_preference_key"
         android:title="@string/vibrate_on_ring_title"
         android:persistent="false"
         android:defaultValue="false" />
 
-    <CheckBoxPreference
+    <SwitchPreference
         android:key="@string/play_dtmf_preference_key"
         android:title="@string/dtmf_tone_enable_title"
         android:persistent="false"
@@ -43,4 +43,27 @@
         android:entries="@array/dtmf_tone_length_entries"
         android:entryValues="@array/dtmf_tone_length_entry_values" />
 
+    <PreferenceCategory
+        android:key="dialer_general_incall_vibration_category_key"
+        android:title="@string/incall_vibration_category_title">
+
+        <SwitchPreference
+            android:key="incall_vibrate_outgoing"
+            android:title="@string/incall_vibrate_outgoing_title" />
+
+        <SwitchPreference
+            android:key="incall_vibrate_call_waiting"
+            android:title="@string/vibrate_call_waiting"/>
+
+        <SwitchPreference
+            android:key="incall_vibrate_hangup"
+            android:title="@string/incall_vibrate_hangup_title" />
+
+        <SwitchPreference
+            android:key="incall_vibrate_45secs"
+            android:title="@string/incall_vibrate_45_title"
+            android:summary="@string/incall_vibrate_45_summary" />
+
+    </PreferenceCategory>
+
 </PreferenceScreen>
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 8633ed8..68c51c6 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -739,7 +739,8 @@
                 mDialpadFragment.showDialConference(false);
             }
             if (mListsFragment.getCurrentTabIndex()
-                    == ListsFragment.TAB_INDEX_ALL_CONTACTS && !mInRegularSearch) {
+                    == ListsFragment.TAB_INDEX_ALL_CONTACTS && !mInRegularSearch &&
+                    !mInDialpadSearch) {
                 DialerUtils.startActivityWithErrorToast(
                         this,
                         IntentUtil.getNewContactIntent(),
@@ -1566,7 +1567,8 @@
         updateMissedCalls();
         int tabIndex = mListsFragment.getCurrentTabIndex();
         mPreviouslySelectedTabIndex = tabIndex;
-        if (tabIndex == ListsFragment.TAB_INDEX_ALL_CONTACTS) {
+        if (tabIndex == ListsFragment.TAB_INDEX_ALL_CONTACTS &&
+                !mInRegularSearch && !mInDialpadSearch) {
             setConferenceDialButtonVisibility(false);
             mFloatingActionButtonController.changeIcon(
                     getResources().getDrawable(R.drawable.ic_person_add_24dp),
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index c90d996..95def51 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -16,6 +16,9 @@
 
 package com.android.dialer.calllog;
 
+import android.animation.Animator;
+import android.animation.Animator.AnimatorListener;
+import android.animation.ValueAnimator;
 import android.app.Activity;
 import android.content.Context;
 import android.content.Intent;
@@ -685,23 +688,68 @@
         if (show) {
             // Inflate the view stub if necessary, and wire up the event handlers.
             inflateActionViewStub();
+            expandShowActions();
+
             if (mEnrichedHelper != null) {
                 mEnrichedHelper.showActions();
             }
 
-            actionsView.setVisibility(View.VISIBLE);
             actionsView.setAlpha(1.0f);
         } else {
             // When recycling a view, it is possible the actionsView ViewStub was previously
             // inflated so we should hide it in this case.
             if (actionsView != null) {
-                actionsView.setVisibility(View.GONE);
+                collapseShowActions();
             }
         }
 
         updatePrimaryActionButton(show);
     }
 
+    private void expandShowActions() {
+         //set Visible
+         actionsView.setVisibility(View.VISIBLE);
+         final int widthSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+         final int heightSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
+         actionsView.measure(widthSpec, heightSpec);
+         ValueAnimator mAnimator = slideAnimator(0, actionsView.getMeasuredHeight());
+         mAnimator.start();
+    }
+
+    private void collapseShowActions() {
+         int finalHeight = actionsView.getHeight();
+         ValueAnimator mAnimator = slideAnimator(finalHeight, 0);
+         mAnimator.addListener(new Animator.AnimatorListener() {
+              @Override
+              public void onAnimationRepeat(Animator animation) { }
+              @Override
+              public void onAnimationCancel(Animator animation) { }
+              @Override
+              public void onAnimationStart(Animator animation) { }
+              @Override
+              public void onAnimationEnd(Animator animator) {
+                  //Height=0, but it set visibility to GONE
+                  actionsView.setVisibility(View.GONE);
+              }
+         });
+         mAnimator.start();
+    }
+
+    private ValueAnimator slideAnimator(int start, int end) {
+        ValueAnimator animator = ValueAnimator.ofInt(start, end);
+        animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+             @Override
+             public void onAnimationUpdate(ValueAnimator valueAnimator) {
+                //Update Height
+                int value = (Integer) valueAnimator.getAnimatedValue();
+                ViewGroup.LayoutParams layoutParams = actionsView.getLayoutParams();
+                layoutParams.height = value;
+                actionsView.setLayoutParams(layoutParams);
+             }
+        });
+        return animator;
+    }
+
     public void showOrHideVoicemailTranscriptionView(boolean isExpanded) {
         if (callType != Calls.VOICEMAIL_TYPE) {
             return;
diff --git a/src/com/android/dialer/settings/SoundSettingsFragment.java b/src/com/android/dialer/settings/SoundSettingsFragment.java
index 3736512..cf9f68f 100644
--- a/src/com/android/dialer/settings/SoundSettingsFragment.java
+++ b/src/com/android/dialer/settings/SoundSettingsFragment.java
@@ -23,9 +23,10 @@
 import android.os.Handler;
 import android.os.Message;
 import android.os.Vibrator;
-import android.preference.CheckBoxPreference;
+import android.preference.SwitchPreference;
 import android.preference.ListPreference;
 import android.preference.Preference;
+import android.preference.PreferenceCategory;
 import android.preference.PreferenceFragment;
 import android.preference.PreferenceScreen;
 import android.provider.Settings;
@@ -57,9 +58,12 @@
 
     private static final int MSG_UPDATE_RINGTONE_SUMMARY = 1;
 
+    private static final String CATEGORY_INCALL_VIBRATION_KEY =
+            "dialer_general_incall_vibration_category_key";
+
     private Preference mRingtonePreference;
-    private CheckBoxPreference mVibrateWhenRinging;
-    private CheckBoxPreference mPlayDtmfTone;
+    private SwitchPreference mVibrateWhenRinging;
+    private SwitchPreference mPlayDtmfTone;
     private ListPreference mDtmfToneLength;
 
     private final Runnable mRingtoneLookupRunnable = new Runnable() {
@@ -94,9 +98,9 @@
         Context context = getActivity();
 
         mRingtonePreference = findPreference(context.getString(R.string.ringtone_preference_key));
-        mVibrateWhenRinging = (CheckBoxPreference) findPreference(
+        mVibrateWhenRinging = (SwitchPreference) findPreference(
                 context.getString(R.string.vibrate_on_preference_key));
-        mPlayDtmfTone = (CheckBoxPreference) findPreference(
+        mPlayDtmfTone = (SwitchPreference) findPreference(
                 context.getString(R.string.play_dtmf_preference_key));
         mDtmfToneLength = (ListPreference) findPreference(
                 context.getString(R.string.dtmf_tone_length_preference_key));
@@ -108,6 +112,10 @@
             mVibrateWhenRinging = null;
         }
 
+        if (!hasVibrator()) {
+            getPreferenceScreen().removePreference(findPreference(CATEGORY_INCALL_VIBRATION_KEY));
+        }
+
         mPlayDtmfTone.setOnPreferenceChangeListener(this);
         mPlayDtmfTone.setChecked(shouldPlayDtmfTone());
 
