Merge tag 'LA.UM.5.6.r1-02900-89xx.0' of https://source.codeaurora.org/quic/la/platform/packages/apps/Dialer into HEAD

"LA.UM.5.6.r1-02900-89xx.0"
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 2cb292a..d2863fb 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 7bbd37f..02d8723 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" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
 
     <application
         android:name="DialerApplication"
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/InCallActivity.java b/InCallUI/src/com/android/incallui/InCallActivity.java
index 4598d3c..81c19a4 100644
--- a/InCallUI/src/com/android/incallui/InCallActivity.java
+++ b/InCallUI/src/com/android/incallui/InCallActivity.java
@@ -342,6 +342,13 @@
         InCallPresenter.getInstance().updatePrimaryCallState();
     }
 
+    @Override
+    public void onMultiWindowModeChanged(boolean isInMultiWindowMode) {
+        super.onMultiWindowModeChanged(isInMultiWindowMode);
+        Log.i(this, "recreate()...");
+        recreate();
+    }
+
     // onPause is guaranteed to be called when the InCallActivity goes
     // in the background.
     @Override
diff --git a/InCallUI/src/com/android/incallui/InCallPresenter.java b/InCallUI/src/com/android/incallui/InCallPresenter.java
index 1e0a8f7..1bc3b4f 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);
@@ -1705,6 +1709,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/drawable/vilte.xml b/res/drawable/vilte.xml
new file mode 100644
index 0000000..7eb7fa2
--- /dev/null
+++ b/res/drawable/vilte.xml
@@ -0,0 +1,41 @@
+<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="36dp"
+    android:height="36dp"
+    android:viewportHeight="42.0"
+    android:viewportWidth="42.0">
+    <path
+        android:fillColor="#404040"
+        android:pathData="M25.6,20.4c-0.8,0 -1.5,-0.1 -2.3,-0.4c-0.2,-0.1 -0.5,0 -0.6,0.1l-1.4,1.4c-1.8,-0.9 -3.2,-2.3 -4.1,-4.1l1.4,-1.4c0.2,-0.2 0.2,-0.4 0.2,-0.6c-0.2,-0.7 -0.4,-1.5 -0.4,-2.2c0,-0.3 -0.3,-0.6 -0.6,-0.6l0,0h-2.2c-0.3,0 -0.6,0.3 -0.6,0.6c0,5.8 4.7,10.6 10.6,10.6c0.3,0 0.6,-0.3 0.6,-0.6v0v-2.2C26.2,20.7 26,20.4 25.6,20.4C25.6,20.4 25.6,20.4 25.6,20.4zM25.6,14.7v-1c0,-0.2 -0.1,-0.3 -0.3,-0.3l0,0h-3.4c-0.2,0 -0.3,0.1 -0.3,0.3v0v2.9c0,0.2 0.1,0.3 0.3,0.3h0h3.4c0.2,0 0.3,-0.1 0.3,-0.3v0v-1l1.1,1.2v-3.3L25.6,14.7z" />
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9,18c0,-6.6 5.4,-12 12,-12s12,5.4 12,12c0,3.4 -1.4,6.6 -3.9,8.9h1.4c4.9,-5.2 4.6,-13.5 -0.6,-18.4S16.4,3.9 11.5,9.1c-4.7,5 -4.7,12.8 0,17.7h1.4C10.4,24.6 9,21.4 9,18z" />
+    <path
+        android:fillColor="#FD6F43"
+        android:pathData="M35,26.8H7c-1.1,0 -2,0.9 -2,2V35c0,1.1 0.9,2 2,2h28c1.1,0 2,-0.9 2,-2v-6.2C37,27.7 36.1,26.8 35,26.8zM13,35.3h-1.4l-2.3,-6.5h1.5l1.5,4.9l1.5,-4.9h1.5L13,35.3zM17.2,35.3h-1.3v-4.8h1.3L17.2,35.3zM17.2,29.5c0,0.1 -0.1,0.2 -0.1,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.2,0.1 -0.4,0.1 -0.6,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.1,-0.2c0,-0.1 0,-0.2 0,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1c0.1,0.1 0.1,0.1 0.1,0.2C17.3,29.1 17.3,29.3 17.2,29.5L17.2,29.5zM22.6,35.3h-4.2v-6.5h1.4v5.4h2.9L22.6,35.3zM27.4,29.9h-2v5.4h-1.3v-5.4h-2v-1.1h5.4L27.4,29.9zM32.6,29.9h-3v1.6h2.6v1h-2.6v1.7h3v1.1h-4.3v-6.5h4.4L32.6,29.9z" />
+</vector>
diff --git a/res/drawable/viwifi.xml b/res/drawable/viwifi.xml
new file mode 100644
index 0000000..c74ec76
--- /dev/null
+++ b/res/drawable/viwifi.xml
@@ -0,0 +1,41 @@
+<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="36dp"
+    android:height="36dp"
+    android:viewportHeight="42.0"
+    android:viewportWidth="42.0">
+    <path
+        android:fillColor="#404040"
+        android:pathData="M25.8,20.4c-0.8,0 -1.5,-0.1 -2.3,-0.4c-0.2,-0.1 -0.5,0 -0.6,0.1l-1.4,1.4c-1.8,-0.9 -3.2,-2.3 -4.1,-4.1l1.4,-1.4c0.2,-0.2 0.2,-0.4 0.2,-0.6c-0.2,-0.7 -0.4,-1.5 -0.4,-2.2c0,-0.3 -0.3,-0.6 -0.6,-0.6l0,0h-2.2c-0.3,0 -0.6,0.3 -0.6,0.6c0,5.8 4.7,10.6 10.6,10.6c0.3,0 0.6,-0.3 0.6,-0.6v0v-2.2C26.4,20.7 26.2,20.4 25.8,20.4C25.8,20.4 25.8,20.4 25.8,20.4zM25.8,14.7v-1c0,-0.2 -0.1,-0.3 -0.3,-0.3l0,0H22c-0.2,0 -0.3,0.1 -0.3,0.3v0v2.9c0,0.2 0.1,0.3 0.3,0.3h0h3.4c0.2,0 0.3,-0.1 0.3,-0.3v0v-1l1.1,1.2v-3.3L25.8,14.7z" />
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9.2,18c0,-6.6 5.4,-12 12,-12s12,5.4 12,12c0,3.4 -1.4,6.6 -3.9,8.9h1.4c4.9,-5.2 4.6,-13.5 -0.6,-18.4S16.6,3.9 11.7,9.1c-4.7,5 -4.7,12.8 0,17.7h1.4C10.6,24.6 9.2,21.4 9.2,18z" />
+    <path
+        android:fillColor="#FD6F43"
+        android:pathData="M35.2,26.8h-28c-1.1,0 -2,0.9 -2,2V35c0,1.1 0.9,2 2,2h28c1.1,0 2,-0.9 2,-2v-6.2C37.2,27.7 36.3,26.8 35.2,26.8zM11.9,35.3h-1.4l-2.3,-6.5h1.5l1.5,4.9l1.5,-4.9h1.5L11.9,35.3zM16.1,35.3h-1.3v-4.8h1.3L16.1,35.3zM16.1,29.5c0,0.1 -0.1,0.2 -0.1,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.2,0.1 -0.4,0.1 -0.6,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.1,-0.2c0,-0.1 0,-0.2 0,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1c0.1,0.1 0.1,0.1 0.2,0.2C16.2,29.1 16.2,29.3 16.1,29.5L16.1,29.5zM23.1,35.3h-1.3l-1.1,-4.4l-1.1,4.4h-1.4l-1.5,-6.5h1.4l0.9,4.6l1.1,-4.6h1.1l1.1,4.6l0.9,-4.6h1.4L23.1,35.3zM26.6,35.3h-1.3v-4.8h1.3L26.6,35.3zM26.6,29.5c0,0.1 -0.1,0.2 -0.1,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.1,0 -0.2,0 -0.3,0c-0.1,0 -0.2,0 -0.3,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.1,-0.2c0,-0.1 0,-0.2 0,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1C26.6,28.9 26.7,29.2 26.6,29.5L26.6,29.5zM32,29.9h-2.8v1.7h2.6v1.1h-2.6v2.7h-1.4v-6.5h4.3L32,29.9zM34.1,35.3h-1.2v-4.8h1.3L34.1,35.3zM34.1,29.5c0,0.1 -0.1,0.2 -0.2,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.2,0.1 -0.4,0.1 -0.6,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.2,-0.2c0,-0.1 0,-0.2 0,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1c0.1,0.1 0.1,0.1 0.2,0.2C34.2,29.1 34.2,29.3 34.1,29.5L34.1,29.5z" />
+</vector>
diff --git a/res/drawable/volte.xml b/res/drawable/volte.xml
new file mode 100644
index 0000000..eb811bf
--- /dev/null
+++ b/res/drawable/volte.xml
@@ -0,0 +1,41 @@
+<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="36dp"
+    android:height="36dp"
+    android:viewportHeight="42.0"
+    android:viewportWidth="42.0">
+    <path
+        android:fillColor="#404040"
+        android:pathData="M26.6,20.4c-0.8,0 -1.5,-0.1 -2.3,-0.4c-0.2,-0.1 -0.5,0 -0.6,0.1l-1.4,1.4c-1.8,-0.9 -3.2,-2.3 -4.1,-4.1l1.4,-1.4c0.2,-0.2 0.2,-0.4 0.2,-0.6c-0.2,-0.7 -0.4,-1.5 -0.4,-2.2c0,-0.3 -0.3,-0.6 -0.6,-0.6l0,0h-2.2c-0.3,0 -0.6,0.3 -0.6,0.6c0,0 0,0 0,0c0,5.8 4.7,10.6 10.6,10.6c0.3,0 0.6,-0.3 0.6,-0.6v0v-2.2C27.2,20.7 27,20.4 26.6,20.4C26.6,20.4 26.6,20.4 26.6,20.4z" />
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M8.8,18c0,-6.6 5.4,-12 12,-12s12,5.4 12,12c0,3.4 -1.4,6.6 -3.9,8.9h1.4c4.9,-5.2 4.6,-13.5 -0.6,-18.4S16.2,3.9 11.3,9.1c-4.7,5 -4.7,12.8 0,17.7h1.4C10.2,24.6 8.8,21.4 8.8,18z" />
+    <path
+        android:fillColor="#FD6F43"
+        android:pathData="M17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4zM17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4zM17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4zM17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4zM34.8,26.9h-28c-1.1,0 -2,0.9 -2,2v6.2c0,1.1 0.9,2 2,2h28c1.1,0 2,-0.9 2,-2v-6.2C36.8,27.8 35.9,26.9 34.8,26.9zM11.4,35.4H9.9l-2.3,-6.5h1.5l1.5,4.9l1.5,-4.9h1.5L11.4,35.4zM18.4,33.1c0,0.3 0,0.7 -0.2,1c-0.2,0.6 -0.6,1 -1.2,1.3c-0.3,0.1 -0.7,0.2 -1,0.2c-0.3,0 -0.7,-0.1 -1,-0.2c-0.3,-0.1 -0.5,-0.3 -0.7,-0.5c-0.2,-0.2 -0.4,-0.5 -0.4,-0.8c-0.1,-0.3 -0.2,-0.7 -0.2,-1V33c0,-0.3 0,-0.7 0.2,-1c0.1,-0.3 0.2,-0.6 0.4,-0.8c0.2,-0.2 0.5,-0.4 0.7,-0.5c0.6,-0.2 1.4,-0.2 2,0c0.3,0.1 0.5,0.3 0.7,0.5c0.2,0.2 0.4,0.5 0.5,0.8C18.3,32.3 18.4,32.7 18.4,33.1L18.4,33.1zM23.5,35.4h-4.2v-6.5h1.4v5.4h2.9L23.5,35.4zM28.4,30h-2v5.4H25V30h-2v-1.1h5.4L28.4,30zM33.5,30h-3v1.5h2.6v1h-2.6v1.8h3v1.1h-4.4v-6.4h4.4V30zM16.9,32c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33c0,-0.2 0,-0.4 0,-0.5C17,32.3 17,32.1 16.9,32zM17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4L17.1,32.4zM17.1,32.4c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.2,-0.3 -0.5,-0.4 -0.8,-0.4c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.6c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.4,0.3 1,0.1 1.2,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0,-0.4 0,-0.6V33C17.1,32.8 17.1,32.6 17.1,32.4L17.1,32.4z" />
+</vector>
diff --git a/res/drawable/volte_video.xml b/res/drawable/volte_video.xml
deleted file mode 100644
index 0008559..0000000
--- a/res/drawable/volte_video.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="13dp"
-    android:height="11dp"
-    android:autoMirrored="true"
-    android:viewportHeight="11.0"
-    android:viewportWidth="13.0">
-    <path
-        android:fillColor="#FFFFFF"
-        android:pathData="M6.627,8.712c-0.404,0 -0.992,-0.063 -1.357,-0.185c-0.113,-0.039 -0.244,-0.01 -0.332,0.076L4.221,9.322C3.3,8.85 2.544,7.968 2.076,7.047l0.716,-0.718c0.091,-0.09 0.117,-0.218 0.081,-0.332c-0.12,-0.364 -0.186,-0.755 -0.186,-1.162c0,-0.181 -0.146,-0.326 -0.326,-0.326H1.223c-0.18,0 -0.326,0.146 -0.326,0.326c0,3.058 2.615,5.665 5.672,5.665c0.179,0 0.324,-0.146 0.324,-0.326V9.037C6.895,8.859 6.807,8.712 6.627,8.712zM10.857,0.5H4.212c-0.453,0 -0.683,0.379 -0.683,0.814v6.33c0,0.192 0.05,0.306 0.132,0.465C3.84,8.259 3.928,8.343 4.425,8.343l0.483,-0.483c0.188,-0.186 0.477,-0.254 0.725,-0.17C5.95,7.794 6.286,7.848 6.629,7.848c0.391,0 0.708,0.551 0.708,0.94v0.022h3.595c0.221,0 0.596,-0.19 0.596,-0.554V1.246C11.527,0.893 11.25,0.5 10.857,0.5zM4.561,7.166V1.514h5.972l0.001,5.652H4.561zM7.555,4.229c0.598,0 1.078,-0.48 1.078,-1.078c0,-0.599 -0.48,-1.137 -1.078,-1.137c-0.599,0 -1.08,0.538 -1.08,1.137C6.475,3.748 6.955,4.229 7.555,4.229zM8.178,4.877c-0.121,0 -1.02,-0.027 -1.186,-0.027c-0.506,0 -1.746,0.789 -1.746,0.899v0.76L9.87,6.492V5.746C9.869,5.624 8.504,4.877 8.178,4.877z" />
-</vector>
diff --git a/res/drawable/volte_voice.xml b/res/drawable/volte_voice.xml
deleted file mode 100644
index 1ce76fb..0000000
--- a/res/drawable/volte_voice.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="13dp"
-    android:height="11dp"
-    android:autoMirrored="true"
-    android:viewportHeight="11.0"
-    android:viewportWidth="13.0">
-    <path
-        android:fillColor="#FFFFFF"
-        android:pathData="M8.336,7.479c-0.574,0 -1.091,-0.093 -1.609,-0.264C6.564,7.158 6.379,7.199 6.254,7.326l-1.02,1.021C3.922,7.674 2.848,6.604 2.178,5.291L3.198,4.27c0.129,-0.13 0.167,-0.311 0.116,-0.475C3.143,3.276 3.05,2.586 3.05,2.006c0,-0.256 -0.209,-0.465 -0.464,-0.465H0.964C0.709,1.541 0.5,1.75 0.5,2.006c0,4.353 3.482,8.017 7.836,8.017c0.255,0 0.464,-0.21 0.464,-0.465V7.942C8.8,7.687 8.591,7.479 8.336,7.479zM5.453,4.054l0.689,-2.511H5.604l-0.402,1.82l-0.4,-1.82H4.266L4.95,4.054H5.453zM6.426,3.854c0.063,0.077 0.139,0.135 0.227,0.174c0.09,0.039 0.188,0.06 0.3,0.06c0.108,0 0.208,-0.021 0.296,-0.06c0.089,-0.039 0.165,-0.098 0.227,-0.174c0.063,-0.076 0.11,-0.171 0.145,-0.284c0.033,-0.113 0.05,-0.242 0.05,-0.389V3.059c0,-0.146 -0.019,-0.275 -0.052,-0.389C7.584,2.558 7.536,2.463 7.473,2.386C7.41,2.31 7.336,2.25 7.246,2.211c-0.088,-0.041 -0.188,-0.06 -0.298,-0.06c-0.109,0 -0.208,0.021 -0.296,0.06S6.488,2.31 6.426,2.386C6.364,2.463 6.316,2.558 6.282,2.67C6.248,2.783 6.23,2.912 6.23,3.059v0.123c0,0.146 0.018,0.277 0.052,0.389C6.316,3.684 6.364,3.777 6.426,3.854zM6.697,3.06c0,-0.17 0.021,-0.297 0.066,-0.378C6.809,2.6 6.87,2.558 6.949,2.558c0.082,0 0.145,0.042 0.189,0.124S7.205,2.89 7.205,3.06v0.123c0,0.173 -0.021,0.3 -0.063,0.38c-0.043,0.08 -0.106,0.12 -0.191,0.12c-0.08,0 -0.143,-0.041 -0.188,-0.12c-0.046,-0.08 -0.068,-0.207 -0.068,-0.38V3.06H6.697zM8.479,1.541H7.997v2.512h1.329v-0.42H8.48L8.479,1.541L8.479,1.541zM9.178,1.965h0.58v2.089h0.484V1.965h0.59V1.543H9.177L9.178,1.965L9.178,1.965zM11.609,3.633V2.967h0.75V2.558h-0.75V1.965h0.886V1.543h-1.368v2.511h1.372V3.633H11.609L11.609,3.633z" />
-</vector>
diff --git a/res/drawable/vowifi.xml b/res/drawable/vowifi.xml
new file mode 100644
index 0000000..579af8c
--- /dev/null
+++ b/res/drawable/vowifi.xml
@@ -0,0 +1,41 @@
+<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of The Linux Foundation nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
+WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
+ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
+BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
+BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
+WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
+OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
+IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+    android:width="36dp"
+    android:height="36dp"
+    android:viewportHeight="42.0"
+    android:viewportWidth="42.0">
+    <path
+        android:fillColor="#404040"
+        android:pathData="M26.8,20.4c-0.8,0 -1.5,-0.1 -2.3,-0.4c-0.2,-0.1 -0.5,0 -0.6,0.1l-1.4,1.4c-1.8,-0.9 -3.2,-2.3 -4.1,-4.1l1.4,-1.4c0.2,-0.2 0.2,-0.4 0.2,-0.6c-0.2,-0.7 -0.4,-1.5 -0.4,-2.2c0,-0.3 -0.3,-0.6 -0.6,-0.6l0,0h-2.2c-0.3,0 -0.6,0.3 -0.6,0.6c0,0 0,0 0,0c0,5.8 4.7,10.6 10.6,10.6c0.3,0 0.6,-0.3 0.6,-0.6v0v-2.2C27.4,20.7 27.2,20.4 26.8,20.4C26.8,20.4 26.8,20.4 26.8,20.4z" />
+    <path
+        android:fillColor="#FF000000"
+        android:pathData="M9,18c0,-6.6 5.4,-12 12,-12s12,5.4 12,12c0,3.4 -1.4,6.6 -3.9,8.9h1.4c4.9,-5.2 4.6,-13.5 -0.6,-18.4S16.4,3.9 11.5,9.1c-4.7,5 -4.7,12.8 0,17.7h1.4C10.4,24.6 9,21.4 9,18z" />
+    <path
+        android:fillColor="#FD6F43"
+        android:pathData="M16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM35,26.8H7c-1.1,0 -2,0.9 -2,2V35c0,1.1 0.9,2 2,2h28c1.1,0 2,-0.9 2,-2v-6.2C37,27.7 36.1,26.8 35,26.8zM10.4,35.3H9l-2.3,-6.5h1.5l1.5,4.9l1.5,-4.9h1.5L10.4,35.3zM17.4,32.9c0,0.3 0,0.7 -0.1,1c-0.1,0.3 -0.2,0.6 -0.5,0.8c-0.2,0.2 -0.4,0.4 -0.7,0.5c-0.6,0.3 -1.4,0.3 -2,0c-0.3,-0.1 -0.5,-0.3 -0.7,-0.5c-0.2,-0.2 -0.3,-0.5 -0.4,-0.8c-0.1,-0.3 -0.2,-0.7 -0.2,-1v-0.1c0,-0.3 0,-0.7 0.2,-1c0.1,-0.3 0.2,-0.6 0.4,-0.8c0.2,-0.2 0.5,-0.4 0.7,-0.5c0.3,-0.1 0.7,-0.2 1,-0.2c0.3,0 0.7,0.1 1,0.2c0.3,0.1 0.5,0.3 0.7,0.5c0.2,0.2 0.4,0.5 0.5,0.8C17.4,32.1 17.4,32.5 17.4,32.9L17.4,32.9zM24.2,35.3h-1.3l-1.1,-4.4l-1.1,4.4h-1.4l-1.5,-6.5h1.4l0.9,4.6l1.1,-4.6h1.1l1.1,4.6l0.9,-4.6h1.4L24.2,35.3zM27.7,35.3h-1.3v-4.8h1.3L27.7,35.3zM27.7,29.4c0,0.1 -0.1,0.2 -0.1,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.2,0.1 -0.4,0.1 -0.6,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.1,-0.2c0,-0.1 -0.1,-0.2 0,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1c0.1,0.1 0.1,0.1 0.1,0.2c0,0.1 0,0.2 0,0.3C27.7,29.3 27.8,29.3 27.7,29.4L27.7,29.4zM33.1,29.8h-2.9v1.7h2.6v1.1h-2.6v2.7h-1.4v-6.5h4.3L33.1,29.8zM35.2,35.3H34v-4.8h1.3L35.2,35.3zM35.2,29.4c0,0.1 -0.1,0.1 -0.2,0.2c-0.1,0.1 -0.1,0.1 -0.2,0.1c-0.1,0 -0.2,0 -0.3,0c-0.1,0 -0.2,0 -0.3,0c-0.1,0 -0.2,-0.1 -0.2,-0.1c-0.1,-0.1 -0.1,-0.1 -0.1,-0.2c0,-0.1 -0.1,-0.2 -0.1,-0.3c0,-0.2 0.1,-0.4 0.2,-0.5c0.1,-0.1 0.3,-0.2 0.5,-0.2c0.1,0 0.2,0 0.3,0c0.1,0 0.2,0.1 0.2,0.1c0.1,0.1 0.1,0.1 0.2,0.2c0,0.1 0,0.2 0,0.3C35.3,29.3 35.3,29.3 35.2,29.4L35.2,29.4zM15.9,31.8c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1c0,-0.2 0,-0.4 -0.1,-0.5C16.1,32.1 16,31.9 15.9,31.8zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2zM16.1,32.2c0,-0.2 -0.1,-0.3 -0.2,-0.5c-0.1,-0.1 -0.2,-0.2 -0.3,-0.3c-0.1,-0.1 -0.3,-0.1 -0.5,-0.1c-0.2,0 -0.3,0 -0.5,0.1c-0.1,0.1 -0.2,0.2 -0.3,0.3c-0.1,0.1 -0.1,0.3 -0.2,0.5c0,0.2 0,0.4 0,0.5v0.1c0,0.2 0,0.4 0,0.5c0,0.2 0.1,0.3 0.2,0.5c0.1,0.1 0.2,0.2 0.3,0.3c0.1,0.1 0.3,0.1 0.5,0.1c0.2,0 0.3,0 0.5,-0.1c0.1,-0.1 0.2,-0.2 0.3,-0.3c0.1,-0.1 0.1,-0.3 0.2,-0.5c0,-0.2 0.1,-0.4 0.1,-0.5v-0.1C16.2,32.6 16.1,32.4 16.1,32.2z" />
+</vector>
diff --git a/res/drawable/wifi_calling.xml b/res/drawable/wifi_calling.xml
deleted file mode 100644
index 87849c5..0000000
--- a/res/drawable/wifi_calling.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<!--Copyright (c) 2016, The Linux Foundation. All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are
-met:
-    * Redistributions of source code must retain the above copyright
-      notice, this list of conditions and the following disclaimer.
-    * Redistributions in binary form must reproduce the above
-      copyright notice, this list of conditions and the following
-      disclaimer in the documentation and/or other materials provided
-      with the distribution.
-    * Neither the name of The Linux Foundation nor the names of its
-      contributors may be used to endorse or promote products derived
-      from this software without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
-ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -->
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
-    android:width="13dp"
-    android:height="11dp"
-    android:autoMirrored="true"
-    android:viewportHeight="11.0"
-    android:viewportWidth="13.75">
-    <path
-        android:fillColor="#FFFFFF"
-        android:pathData="M8.608,7.242c-0.598,0 -1.223,-0.095 -1.762,-0.272C6.679,6.912 6.485,6.955 6.354,7.084L5.294,8.146C3.931,7.447 2.813,6.332 2.118,4.97l1.061,-1.062C3.313,3.774 3.352,3.586 3.3,3.416C3.122,2.877 3.024,2.299 3.024,1.697c0,-0.266 -0.217,-0.482 -0.48,-0.482H0.856c-0.266,0 -0.48,0.217 -0.48,0.482c0,4.525 3.707,8.193 8.233,8.193c0.265,0 0.481,-0.217 0.481,-0.482V7.727C9.089,7.459 8.874,7.242 8.608,7.242zM5.136,3.783l0.705,-2.574H5.29L4.878,3.076L4.466,1.209H3.919L4.62,3.783H5.136zM6.134,3.58c0.063,0.078 0.142,0.139 0.232,0.179c0.09,0.04 0.191,0.06 0.305,0.06s0.215,-0.02 0.305,-0.06c0.091,-0.04 0.168,-0.101 0.232,-0.179C7.271,3.5 7.319,3.404 7.354,3.289C7.389,3.174 7.405,3.041 7.405,2.89V2.765c0,-0.149 -0.018,-0.282 -0.052,-0.397C7.318,2.252 7.27,2.154 7.206,2.076c-0.063,-0.08 -0.143,-0.14 -0.232,-0.181C6.882,1.854 6.78,1.834 6.667,1.834c-0.111,0 -0.213,0.021 -0.304,0.062c-0.09,0.041 -0.167,0.101 -0.231,0.181C6.069,2.154 6.02,2.252 5.984,2.367C5.95,2.483 5.933,2.615 5.933,2.765V2.89c0,0.151 0.018,0.284 0.052,0.399C6.02,3.404 6.069,3.502 6.134,3.58zM6.411,2.766c0,-0.174 0.021,-0.305 0.067,-0.389s0.108,-0.125 0.188,-0.125c0.084,0 0.149,0.041 0.195,0.125c0.047,0.084 0.068,0.215 0.068,0.389v0.125c0,0.178 -0.021,0.309 -0.064,0.391C6.822,3.363 6.757,3.404 6.671,3.404c-0.082,0 -0.146,-0.041 -0.192,-0.123S6.409,3.068 6.409,2.891V2.766H6.411zM9.333,2.828L9.046,1.211H8.63L8.344,2.826L8.112,1.211H7.62l0.438,2.574h0.497l0.283,-1.518l0.285,1.518H9.62l0.437,-2.574h-0.49L9.333,2.828zM10.764,1.185c-0.022,-0.022 -0.05,-0.042 -0.081,-0.054C10.65,1.117 10.614,1.11 10.575,1.11s-0.074,0.007 -0.105,0.021c-0.031,0.013 -0.061,0.031 -0.081,0.054c-0.022,0.024 -0.041,0.052 -0.054,0.084s-0.019,0.067 -0.019,0.106s0.006,0.076 0.019,0.107c0.013,0.032 0.029,0.061 0.054,0.085c0.021,0.023 0.049,0.042 0.081,0.056c0.031,0.013 0.066,0.02 0.105,0.02s0.075,-0.006 0.107,-0.02c0.031,-0.014 0.059,-0.032 0.081,-0.056c0.022,-0.024 0.04,-0.053 0.052,-0.085c0.014,-0.033 0.02,-0.068 0.02,-0.107s-0.006,-0.074 -0.02,-0.106C10.804,1.236 10.786,1.209 10.764,1.185zM10.339,3.783h0.478V1.871h-0.478V3.783zM11.226,3.783h0.493v-1.05h0.769V2.303h-0.769v-0.66h0.862V1.209h-1.355V3.783zM13.356,1.269c-0.013,-0.033 -0.029,-0.062 -0.053,-0.084c-0.021,-0.022 -0.049,-0.042 -0.081,-0.054C13.19,1.117 13.155,1.11 13.116,1.11S13.04,1.117 13.01,1.131c-0.031,0.013 -0.06,0.031 -0.081,0.054c-0.021,0.024 -0.04,0.052 -0.053,0.084c-0.013,0.033 -0.019,0.067 -0.019,0.106s0.006,0.076 0.019,0.107c0.013,0.032 0.029,0.061 0.053,0.085c0.021,0.023 0.05,0.042 0.081,0.056c0.032,0.013 0.067,0.02 0.106,0.02s0.075,-0.006 0.106,-0.02c0.032,-0.014 0.06,-0.032 0.081,-0.056c0.021,-0.024 0.04,-0.053 0.053,-0.085c0.012,-0.033 0.018,-0.068 0.018,-0.107S13.368,1.302 13.356,1.269zM12.878,3.783h0.479V1.871h-0.479V3.783z" />
-</vector>
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/qtistrings.xml b/res/values/qtistrings.xml
index a11e5e5..73fbf5c 100644
--- a/res/values/qtistrings.xml
+++ b/res/values/qtistrings.xml
@@ -32,4 +32,7 @@
     <!-- OEM Key strings -->
     <string name="oem_key_code_action"></string>
     <string name="oem_code"></string>
+
+    <!-- Call Settings -->
+    <string name="call_settings_lbl">Call Settings</string>
 </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 2ae567f..08cb8cb 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -696,7 +696,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(),
@@ -1485,7 +1486,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/CallDetailHistoryAdapter.java b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
index bbd632c..08689ad 100644
--- a/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
+++ b/src/com/android/dialer/calllog/CallDetailHistoryAdapter.java
@@ -121,13 +121,13 @@
         callTypeIconView.clear();
         callTypeIconView.add(callType);
         /**
-         * Ims icon(VoLTE/VoWifi) or CarrierOne video icon will be shown if carrierOne is supported
+         * Ims icon(VoLTE/VoWiFi/ViLTE/ViWiFi) will be shown if carrierOne is supported
          * otherwise, default video icon will be shown if it is a video call.
          */
         if (QtiImsExtUtils.isCarrierOneSupported()) {
-             callTypeIconView.addImsOrVideoIcon(callType, isVideoCall);
+            callTypeIconView.addImsIcon(callType, isVideoCall);
         } else {
-             callTypeIconView.setShowVideo(isVideoCall);
+            callTypeIconView.setShowVideo(isVideoCall);
         }
         callTypeTextView.setText(mCallTypeHelper.getCallTypeText(callType, isVideoCall));
         // Set the date.
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 6a447a6..74850c5 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -587,6 +587,8 @@
         // Stash away the Ids of the calls so that we can support deleting a row in the call log.
         views.callIds = getCallIds(c, count);
         views.isBusiness = mContactInfoHelper.isBusiness(info.sourceType);
+        views.isVideoCall = (c.getInt(CallLogQuery.FEATURES) & CallLog.Calls.FEATURES_VIDEO) ==
+                CallLog.Calls.FEATURES_VIDEO;
         views.numberType = (String) Phone.getTypeLabel(mContext.getResources(), details.numberType,
                 details.numberLabel);
         // Default case: an item in the call log.
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index d63531b..7fa4757 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;
@@ -35,6 +38,7 @@
 import android.view.ContextMenu;
 import android.view.MenuItem;
 import android.view.View;
+import android.view.ViewGroup;
 import android.view.ViewStub;
 import android.widget.ImageButton;
 import android.widget.ImageView;
@@ -60,6 +64,7 @@
 import com.android.dialer.logging.Logger;
 import com.android.dialer.logging.ScreenEvent;
 import com.android.dialer.service.ExtendedBlockingButtonRenderer;
+import com.android.dialer.util.AppCompatConstants;
 import com.android.dialer.util.DialerUtils;
 import com.android.dialer.util.PhoneNumberUtil;
 import com.android.dialer.util.PresenceHelper;
@@ -200,6 +205,11 @@
     public boolean isBusiness;
 
     /**
+     * Whether this row is for a video call or not.
+     */
+    public boolean isVideoCall = false;
+
+    /**
      * The contact info for the contact displayed in this list item.
      */
     public ContactInfo info;
@@ -425,8 +435,6 @@
             videoCallButtonView = actionsView.findViewById(R.id.video_call_action);
             videoCallButtonView.setOnClickListener(this);
 
-            videoCallIconView = (ImageView) actionsView.findViewById(R.id.videoCallIcon);
-
             createNewContactButtonView = actionsView.findViewById(R.id.create_new_contact_action);
             createNewContactButtonView.setOnClickListener(this);
 
@@ -479,7 +487,23 @@
                 primaryActionButtonView.setContentDescription(TextUtils.expandTemplate(
                         mContext.getString(R.string.description_call_action),
                         nameOrNumber));
-                primaryActionButtonView.setImageResource(R.drawable.ic_call_24dp);
+
+                if (QtiImsExtUtils.isCarrierOneSupported()) {
+                    final Drawable imsDrawable = getLteOrWifiDrawable(callType, isVideoCall);
+                    if (imsDrawable != null) {
+                        primaryActionButtonView.setImageDrawable(imsDrawable);
+                        primaryActionButtonView.setColorFilter(mContext.getResources().getColor(
+                                android.R.color.white),
+                                PorterDuff.Mode.MULTIPLY);
+                    } else {
+                        primaryActionButtonView.setImageResource(R.drawable.ic_call_24dp);
+                        primaryActionButtonView.setColorFilter(mContext.getResources().getColor(
+                                R.color.call_log_list_item_primary_action_icon_tint),
+                                PorterDuff.Mode.MULTIPLY);
+                    }
+                } else {
+                    primaryActionButtonView.setImageResource(R.drawable.ic_call_24dp);
+                }
                 primaryActionButtonView.setVisibility(View.VISIBLE);
             } else {
                 primaryActionButtonView.setTag(null);
@@ -489,6 +513,35 @@
     }
 
     /**
+     * Returns drawable for Carrier One if it is LTE or WiFi type call.
+     *  @param callType The type of call for the current call log entry.
+     *  @param isVideoCall Whether current call log entry is video call.
+     */
+    private Drawable getLteOrWifiDrawable(int callType, boolean isVideoCall) {
+        Resources resources = mContext.getResources();
+        switch(callType) {
+            case AppCompatConstants.INCOMING_IMS_TYPE:
+            case AppCompatConstants.OUTGOING_IMS_TYPE:
+            case AppCompatConstants.MISSED_IMS_TYPE:
+                if (isVideoCall) {
+                    return resources.getDrawable(R.drawable.vilte);
+                } else {
+                    return resources.getDrawable(R.drawable.volte);
+                }
+            case AppCompatConstants.INCOMING_WIFI_TYPE:
+            case AppCompatConstants.OUTGOING_WIFI_TYPE:
+            case AppCompatConstants.MISSED_WIFI_TYPE:
+                if (isVideoCall) {
+                    return resources.getDrawable(R.drawable.viwifi);
+                } else {
+                    return resources.getDrawable(R.drawable.vowifi);
+                }
+            default:
+                return null;
+        }
+    }
+
+    /**
      * Binds text titles, click handlers and intents to the voicemail, details and callback action
      * buttons.
      */
@@ -523,12 +576,6 @@
         if (mCallLogCache.isVideoEnabled() && canPlaceCallToNumber && showVideoCallBtn) {
             videoCallButtonView.setTag(IntentProvider.getReturnVideoCallIntentProvider(number));
             videoCallButtonView.setVisibility(View.VISIBLE);
-            if (QtiImsExtUtils.isCarrierOneSupported()) {
-                Drawable drawable =  mContext.getResources().getDrawable(R.drawable.volte_video);
-                drawable.setColorFilter(mContext.getResources().getColor(
-                    R.color.dialtacts_secondary_text_color), PorterDuff.Mode.MULTIPLY);
-                videoCallIconView.setImageDrawable(drawable);
-            }
         } else {
             videoCallButtonView.setVisibility(View.GONE);
         }
@@ -626,20 +673,63 @@
         if (show) {
             // Inflate the view stub if necessary, and wire up the event handlers.
             inflateActionViewStub();
-
-            actionsView.setVisibility(View.VISIBLE);
+            expandShowActions();
             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/calllog/CallTypeIconsView.java b/src/com/android/dialer/calllog/CallTypeIconsView.java
index 56bd605..7c0034c 100644
--- a/src/com/android/dialer/calllog/CallTypeIconsView.java
+++ b/src/com/android/dialer/calllog/CallTypeIconsView.java
@@ -79,38 +79,40 @@
         invalidate();
     }
 
-    public void addImsOrVideoIcon(int callType, boolean showVideo) {
+    public void addImsIcon(int callType, boolean showVideo) {
         mShowVideo = showVideo;
-        if (showVideo) {
-            mWidth += sResources.videoCall.getIntrinsicWidth();
-            mHeight = Math.max(mHeight, sResources.videoCall.getIntrinsicHeight());
+        final Drawable drawable = getLteOrWifiDrawable(callType, showVideo);
+        if (drawable != null) {
+            // calculating drawable's width and adding it to total width for correct position
+            // of icon.
+            // calculating height by max of drawable height and other icons' height.
+            mWidth += drawable.getIntrinsicWidth();
+            mHeight = Math.max(mHeight, drawable.getIntrinsicHeight());
             invalidate();
-        } else {
-            final Drawable drawable = getImsOrWifiDrawable(callType);
-            if (drawable != null) {
-                // calculating drawable's width and adding it to total width for correct position
-                // of icon.
-                // calculating height by max of drawable height and other icons' height.
-                mWidth += drawable.getIntrinsicWidth();
-                mHeight = Math.max(mHeight, drawable.getIntrinsicHeight());
-                invalidate();
-            }
         }
     }
 
-    private Drawable getImsOrWifiDrawable(int callType) {
-       switch(callType) {
-         case AppCompatConstants.INCOMING_IMS_TYPE:
-         case AppCompatConstants.OUTGOING_IMS_TYPE:
-         case AppCompatConstants.MISSED_IMS_TYPE:
-              return sResources.imsCall;
-         case AppCompatConstants.INCOMING_WIFI_TYPE:
-         case AppCompatConstants.OUTGOING_WIFI_TYPE:
-         case AppCompatConstants.MISSED_WIFI_TYPE:
-              return sResources.wifiCall;
-         default:
-              return null;
-       }
+    private Drawable getLteOrWifiDrawable(int callType, boolean showVideo) {
+        switch(callType) {
+            case AppCompatConstants.INCOMING_IMS_TYPE:
+            case AppCompatConstants.OUTGOING_IMS_TYPE:
+            case AppCompatConstants.MISSED_IMS_TYPE:
+                if (showVideo) {
+                    return sResources.vilteCall;
+                } else {
+                    return sResources.volteCall;
+                }
+            case AppCompatConstants.INCOMING_WIFI_TYPE:
+            case AppCompatConstants.OUTGOING_WIFI_TYPE:
+            case AppCompatConstants.MISSED_WIFI_TYPE:
+                if (showVideo) {
+                    return sResources.viwifiCall;
+                } else {
+                    return sResources.vowifiCall;
+                }
+            default:
+                return null;
+        }
     }
 
     /**
@@ -196,7 +198,7 @@
         }
 
         // If showing the video call icon, draw it scaled appropriately.
-        if (mShowVideo) {
+        if (!mIsCarrierOneSupported && mShowVideo) {
             final Drawable drawable = sResources.videoCall;
             final int right = left + drawable.getIntrinsicWidth();
             drawable.setBounds(left, 0, right, drawable.getIntrinsicHeight());
@@ -205,7 +207,7 @@
         }
 
         for (Integer callType : mCallTypes) {
-            final Drawable drawableIms = getImsOrWifiDrawable(callType);
+            final Drawable drawableIms = getLteOrWifiDrawable(callType, mShowVideo);
             if (drawableIms != null) {
                 final int right = left + drawableIms.getIntrinsicWidth();
                 drawableIms.setBounds(left, 0, right, drawableIms.getIntrinsicHeight());
@@ -240,14 +242,25 @@
         public final int iconMargin;
 
         /**
-         * Drawable repesenting a wifi call.
+         * Drawable repesenting a VoWiFi call.
          */
-        public final Drawable wifiCall;
+        public final Drawable vowifiCall;
 
         /**
-         * Drawable repesenting a IMS call.
+         * Drawable repesenting a ViWiFi call.
          */
-        public final Drawable imsCall;
+        public final Drawable viwifiCall;
+
+        /**
+         * Drawable repesenting a VoLTE call.
+         */
+        public final Drawable volteCall;
+
+        /**
+         * Drawable repesenting a ViLTE call.
+         */
+        public final Drawable vilteCall;
+
         /**
          * Configures the call icon drawables.
          * A single white call arrow which points down and left is used as a basis for all of the
@@ -275,26 +288,19 @@
             blocked = getScaledBitmap(context, R.drawable.ic_block_24dp);
             blocked.setColorFilter(r.getColor(R.color.blocked_call), PorterDuff.Mode.MULTIPLY);
 
-            if (mIsCarrierOneSupported) {
-                videoCall = r.getDrawable(R.drawable.volte_video).mutate();
-            } else {
             // Get the video call icon, scaled to match the height of the call arrows.
             // We want the video call icon to be the same height as the call arrows, while keeping
             // the same width aspect ratio.
                 videoCall = getScaledBitmap(context, R.drawable.ic_videocam_24dp);
-            }
             videoCall.setColorFilter(r.getColor(R.color.dialtacts_secondary_text_color),
                     PorterDuff.Mode.MULTIPLY);
 
             iconMargin = r.getDimensionPixelSize(R.dimen.call_log_icon_margin);
 
-            wifiCall = r.getDrawable(R.drawable.wifi_calling).mutate();
-            wifiCall.setColorFilter(r.getColor(R.color.dialtacts_secondary_text_color),
-                    PorterDuff.Mode.MULTIPLY);
-
-            imsCall = r.getDrawable(R.drawable.volte_voice).mutate();
-            imsCall.setColorFilter(r.getColor(R.color.dialtacts_secondary_text_color),
-                    PorterDuff.Mode.MULTIPLY);
+            viwifiCall = r.getDrawable(R.drawable.viwifi);
+            vowifiCall = r.getDrawable(R.drawable.vowifi);
+            volteCall = r.getDrawable(R.drawable.volte);
+            vilteCall = r.getDrawable(R.drawable.vilte);
         }
 
         // Gets the icon, scaled to the height of the call type icons. This helps display all the
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index 303c73a..3c6c66c 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -39,10 +39,12 @@
 
 import java.util.List;
 
+import org.codeaurora.ims.utils.QtiImsExtUtils;
+
 public class DialerSettingsActivity extends AppCompatPreferenceActivity {
     protected SharedPreferences mPreferences;
     private boolean migrationStatusOnBuildHeaders;
-
+    private final String ACTION_LAUNCH_CALL_SETTINGS = "org.codeaurora.CALL_SETTINGS";
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -85,13 +87,15 @@
             target.add(quickResponseSettingsHeader);
         }
 
-        Header speedDialSettingsHeader = new Header();
-        Intent speedDialSettingsIntent = new Intent(this, SpeedDialListActivity.class);
-        speedDialSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        if (!QtiImsExtUtils.isCarrierOneSupported()) {
+            Header speedDialSettingsHeader = new Header();
+            Intent speedDialSettingsIntent = new Intent(this, SpeedDialListActivity.class);
+            speedDialSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
-        speedDialSettingsHeader.titleRes = R.string.speed_dial_settings;
-        speedDialSettingsHeader.intent = speedDialSettingsIntent;
-        target.add(speedDialSettingsHeader);
+            speedDialSettingsHeader.titleRes = R.string.speed_dial_settings;
+            speedDialSettingsHeader.intent = speedDialSettingsIntent;
+            target.add(speedDialSettingsHeader);
+        }
 
         TelephonyManager telephonyManager =
                 (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE);
@@ -101,25 +105,38 @@
         // primary user and there are multiple SIMs. In N+, "Calling accounts" is shown whenever
         // "Call Settings" is not shown.
         boolean isPrimaryUser = isPrimaryUser();
-        if (isPrimaryUser
-                && TelephonyManagerCompat.getPhoneCount(telephonyManager) <= 1) {
-            Header callSettingsHeader = new Header();
-            Intent callSettingsIntent = new Intent(TelecomManager.ACTION_SHOW_CALL_SETTINGS);
-            callSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
-            callSettingsHeader.titleRes = R.string.call_settings_label;
-            callSettingsHeader.intent = callSettingsIntent;
-            target.add(callSettingsHeader);
-        } else if (BuildCompat.isAtLeastN() || isPrimaryUser) {
-            Header phoneAccountSettingsHeader = new Header();
-            Intent phoneAccountSettingsIntent =
-                    new Intent(TelecomManager.ACTION_CHANGE_PHONE_ACCOUNTS);
-            phoneAccountSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+        if (QtiImsExtUtils.isCarrierOneSupported()) {
+            if (isPrimaryUser) {
+                Header callSettingsHeader =  new Header();
+                Intent callSettingsIntent = new Intent(ACTION_LAUNCH_CALL_SETTINGS);
+                callSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
-            phoneAccountSettingsHeader.titleRes = R.string.phone_account_settings_label;
-            phoneAccountSettingsHeader.intent = phoneAccountSettingsIntent;
-            target.add(phoneAccountSettingsHeader);
-        }
+                callSettingsHeader.titleRes = R.string.call_settings_lbl;
+                callSettingsHeader.intent = callSettingsIntent;
+                target.add(callSettingsHeader);
+           }
+        } else {
+            if (isPrimaryUser
+                    && TelephonyManagerCompat.getPhoneCount(telephonyManager) <= 1) {
+                Header callSettingsHeader = new Header();
+                Intent callSettingsIntent = new Intent(TelecomManager.ACTION_SHOW_CALL_SETTINGS);
+                callSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+                callSettingsHeader.titleRes = R.string.call_settings_label;
+                callSettingsHeader.intent = callSettingsIntent;
+                target.add(callSettingsHeader);
+            } else if (BuildCompat.isAtLeastN() || isPrimaryUser) {
+                Header phoneAccountSettingsHeader = new Header();
+                Intent phoneAccountSettingsIntent =
+                        new Intent(TelecomManager.ACTION_CHANGE_PHONE_ACCOUNTS);
+                phoneAccountSettingsIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
+
+                phoneAccountSettingsHeader.titleRes = R.string.phone_account_settings_label;
+                phoneAccountSettingsHeader.intent = phoneAccountSettingsIntent;
+                target.add(phoneAccountSettingsHeader);
+            }
+       }
         if (FilteredNumberCompat.canCurrentUserOpenBlockSettings(this)) {
             Header blockedCallsHeader = new Header();
             blockedCallsHeader.titleRes = R.string.manage_blocked_numbers_label;
diff --git a/src/com/android/dialer/settings/SoundSettingsFragment.java b/src/com/android/dialer/settings/SoundSettingsFragment.java
index 59f8798..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;
@@ -38,6 +39,8 @@
 import com.android.dialer.compat.SettingsCompat;
 import com.android.phone.common.util.SettingsUtil;
 
+import org.codeaurora.ims.utils.QtiImsExtUtils;
+
 public class SoundSettingsFragment extends PreferenceFragment
         implements Preference.OnPreferenceChangeListener {
 
@@ -55,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() {
@@ -92,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));
@@ -106,6 +112,10 @@
             mVibrateWhenRinging = null;
         }
 
+        if (!hasVibrator()) {
+            getPreferenceScreen().removePreference(findPreference(CATEGORY_INCALL_VIBRATION_KEY));
+        }
+
         mPlayDtmfTone.setOnPreferenceChangeListener(this);
         mPlayDtmfTone.setChecked(shouldPlayDtmfTone());
 
@@ -140,8 +150,16 @@
             mVibrateWhenRinging.setChecked(shouldVibrateWhenRinging());
         }
 
+        if (QtiImsExtUtils.isCarrierOneSupported()) {
+            getPreferenceScreen().removePreference(mRingtonePreference);
+            mRingtonePreference = null;
+        }
+
+
         // Lookup the ringtone name asynchronously.
-        new Thread(mRingtoneLookupRunnable).start();
+        if (mRingtonePreference != null) {
+           new Thread(mRingtoneLookupRunnable).start();
+        }
     }
 
     /**
@@ -197,12 +215,14 @@
      * Updates the summary text on the ringtone preference with the name of the ringtone.
      */
     private void updateRingtonePreferenceSummary() {
-        SettingsUtil.updateRingtoneName(
-                getActivity(),
-                mRingtoneLookupComplete,
-                RingtoneManager.TYPE_RINGTONE,
-                mRingtonePreference.getKey(),
-                MSG_UPDATE_RINGTONE_SUMMARY);
+        if (mRingtonePreference != null) {
+            SettingsUtil.updateRingtoneName(
+                    getActivity(),
+                    mRingtoneLookupComplete,
+                    RingtoneManager.TYPE_RINGTONE,
+                    mRingtonePreference.getKey(),
+                    MSG_UPDATE_RINGTONE_SUMMARY);
+       }
     }
 
     /**
diff --git a/src/com/android/dialer/util/AppCompatConstants.java b/src/com/android/dialer/util/AppCompatConstants.java
index dd6c024..773684a 100644
--- a/src/com/android/dialer/util/AppCompatConstants.java
+++ b/src/com/android/dialer/util/AppCompatConstants.java
@@ -27,9 +27,9 @@
     public static final int CALLS_REJECTED_TYPE = 5;
     // Added to android.provider.CallLog.Calls in N+.
     public static final int CALLS_BLOCKED_TYPE = 6;
-    public static final int INCOMING_IMS_TYPE = 8;
-    public static final int OUTGOING_IMS_TYPE = 9;
-    public static final int MISSED_IMS_TYPE = 10;
+    public static final int INCOMING_IMS_TYPE = Calls.INCOMING_IMS_TYPE;
+    public static final int OUTGOING_IMS_TYPE = Calls.OUTGOING_IMS_TYPE;
+    public static final int MISSED_IMS_TYPE = Calls.MISSED_IMS_TYPE;
     public static final int INCOMING_WIFI_TYPE = Calls.INCOMING_WIFI_TYPE;
     public static final int OUTGOING_WIFI_TYPE = Calls.OUTGOING_WIFI_TYPE;
     public static final int MISSED_WIFI_TYPE = Calls.MISSED_WIFI_TYPE;