Add VOLTE icon

Extracted from CAF and adapted to AOSP by @xyyx
Added switch to statusbar icon blacklist by @xyyx
modified back to caf base by @xlxfoxxlx

Original commits:
https://github.com/codeaurora-unofficial/platform-frameworks-base/commit/8c968e8d64abca36987d90d95e6dd1cc951c0e0a
https://github.com/AOSPA/android_frameworks_base/commit/4dabbbe7df5f51f517c13da98809c22b34175964

Change-Id: Ie85b73fa9f5818aeb237742340fd45e6e7affefd
diff --git a/packages/SystemUI/res/values/bliss_strings.xml b/packages/SystemUI/res/values/bliss_strings.xml
index 927975f..310a945 100644
--- a/packages/SystemUI/res/values/bliss_strings.xml
+++ b/packages/SystemUI/res/values/bliss_strings.xml
@@ -234,4 +234,7 @@
     <!-- data saver icon switch -->
     <string name="status_bar_datasaver">Data saver</string>
 
+    <!-- VOLTE icon switch -->
+    <string name="status_bar_volte">VoLTE</string>
+
 </resources>
diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml
index caff6eb..1813053 100644
--- a/packages/SystemUI/res/xml/tuner_prefs.xml
+++ b/packages/SystemUI/res/xml/tuner_prefs.xml
@@ -71,6 +71,10 @@
         android:title="@string/quick_settings_cellular_detail_title" />
 
     <com.android.systemui.tuner.StatusBarSwitch
+        android:key="volte"
+        android:title="@string/status_bar_volte" />
+
+    <com.android.systemui.tuner.StatusBarSwitch
         android:key="airplane"
         android:title="@string/status_bar_airplane" />
 
diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
index 9314bec..0c5d9d8 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/CellularTile.java
@@ -221,7 +221,7 @@
         public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
                 int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
                 int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon,
-                String typeContentDescription, String description, boolean isWide, int subId) {
+                String typeContentDescription, String description, boolean isWide, int subId, boolean isMobileIms) {
             if (qsIcon == null) {
                 // Not data sim, don't display.
                 return;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
index c36d2da..d7bd6bd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/SignalClusterView.java
@@ -64,6 +64,7 @@
     private static final String SLOT_WIFI = "wifi";
     private static final String SLOT_ETHERNET = "ethernet";
     private static final String SLOT_VPN = "vpn";
+    private static final String SLOT_VOLTE = "volte";
 
     NetworkControllerImpl mNC;
     SecurityController mSC;
@@ -115,6 +116,7 @@
     private boolean mBlockWifi;
     private boolean mBlockEthernet;
     private boolean mBlockVpn;
+    private boolean mBlockVolte;
 
     private TelephonyManager mTelephonyManager;
 
@@ -157,14 +159,16 @@
         boolean blockWifi = blockList.contains(SLOT_WIFI);
         boolean blockEthernet = blockList.contains(SLOT_ETHERNET);
         boolean blockVpn = blockList.contains(SLOT_VPN);
+        boolean blockVolte = blockList.contains(SLOT_VOLTE);
 
         if (blockAirplane != mBlockAirplane || blockMobile != mBlockMobile
-                || blockEthernet != mBlockEthernet || blockWifi != mBlockWifi || blockVpn != mBlockVpn) {
+                || blockEthernet != mBlockEthernet || blockWifi != mBlockWifi || blockVpn != mBlockVpn || blockVolte != mBlockVolte) {
             mBlockAirplane = blockAirplane;
             mBlockMobile = blockMobile;
             mBlockEthernet = blockEthernet;
             mBlockWifi = blockWifi;
             mBlockVpn = blockVpn;
+            mBlockVolte = blockVolte;
             // Re-register to get new callbacks.
             mNC.removeSignalCallback(this);
             mNC.addSignalCallback(this);
@@ -301,7 +305,7 @@
     public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
             int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
             int mobileActivityId, int stackedDataId, int stackedVoiceId,
-            String typeContentDescription, String description, boolean isWide, int subId) {
+            String typeContentDescription, String description, boolean isWide, int subId, boolean isMobileIms) {
         PhoneState state = getState(subId);
         if (state == null) {
             return;
@@ -316,6 +320,7 @@
         state.mMobileActivityId = mobileActivityId;
         state.mStackedDataId = stackedDataId;
         state.mStackedVoiceId = stackedVoiceId;
+        mMobileIms = isMobileIms;
 
         apply();
     }
@@ -336,7 +341,7 @@
         mMobileIms = isMobileIms;
         this.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType, activityIn,
                 activityOut, dataActivityId, mobileActivityId, stackedDataId,
-                stackedVoiceId, typeContentDescription, description, isWide, subId);
+                stackedVoiceId, typeContentDescription, description, isWide, subId, isMobileIms);
     }
 
     @Override
@@ -626,7 +631,7 @@
             mImsOverWifiImageView.setVisibility(View.GONE);
         }
 
-        if (mMobileIms){
+        if (mMobileIms && !mBlockVolte){
             mMobileImsImageView.setVisibility(View.VISIBLE);
         } else {
             mMobileImsImageView.setVisibility(View.GONE);
@@ -682,6 +687,7 @@
 
     private void applyIconTint() {
         setTint(mVpn, StatusBarIconController.getTint(mTintArea, mVpn, mIconTint));
+        setTint(mMobileImsImageView, StatusBarIconController.getTint(mTintArea, mMobileImsImageView, mIconTint));
         setTint(mAirplane, StatusBarIconController.getTint(mTintArea, mAirplane, mIconTint));
         applyDarkIntensity(
                 StatusBarIconController.getDarkIntensity(mTintArea, mNoSims, mDarkIntensity),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
index c0f7984..2cc75e7 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java
@@ -128,7 +128,7 @@
             final boolean activityOut, final int dataActivityId, final int mobileActivityId,
             final int stackedDataIcon, final int stackedVoiceIcon,
             final String typeContentDescription, final String description, final boolean isWide,
-            final int subId) {
+            final int subId, final boolean isMobileIms) {
         post(new Runnable() {
             @Override
             public void run() {
@@ -136,7 +136,7 @@
                     signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType,
                             activityIn, activityOut, dataActivityId, mobileActivityId,
                             stackedDataIcon, stackedVoiceIcon,
-                            typeContentDescription, description, isWide, subId);
+                            typeContentDescription, description, isWide, subId, isMobileIms);
                 }
             }
         });
@@ -165,7 +165,7 @@
                         signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType,
                                 qsType, activityIn, activityOut, dataActivityId,
                                 mobileActivityId, stackedDataIcon, stackedVoiceIcon,
-                                typeContentDescription, description, isWide, subId);
+                                typeContentDescription, description, isWide, subId, isMobileIms);
                     }
                 }
             }
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
index b9bea0b..6bd5338 100755
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java
@@ -52,7 +52,6 @@
 import java.util.Objects;
 import java.util.List;
 
-
 public class MobileSignalController extends SignalController<
         MobileSignalController.MobileState, MobileSignalController.MobileIconGroup> {
     private final TelephonyManager mPhone;
@@ -388,7 +387,7 @@
                     activityIn, activityOut, dataActivityId, mobileActivityId,
                     icons.mStackedDataIcon, icons.mStackedVoiceIcon,
                     dataContentDescription, description, icons.mIsWide,
-                    mSubscriptionInfo.getSubscriptionId());
+                    mSubscriptionInfo.getSubscriptionId(), isMobileIms());
         }
         mCallbackHandler.post(new Runnable() {
             @Override
@@ -435,9 +434,6 @@
     }
 
     private boolean isMobileIms() {
-        if (mStyle != STATUS_BAR_STYLE_EXTENDED) {
-            return false;
-        }
 
         List<SubscriptionInfo> subInfos = SubscriptionManager.from(mContext)
                         .getActiveSubscriptionInfoList();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
index 89c3b7e..e0e6cd1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java
@@ -49,7 +49,7 @@
                 int qsType, boolean activityIn, boolean activityOut, int dataActivityId,
                 int mobileActivityId, int stackedDataIcon, int stackedVoiceIcon,
                 String typeContentDescription, String description,
-                boolean isWide, int subId) {}
+                boolean isWide, int subId, boolean isMobileIms) {}
         default void setSubs(List<SubscriptionInfo> subs) {}
         default void setNoSims(boolean show) {}
 
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
index 511ad2b..58cc6ee 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SignalCallbackAdapter.java
@@ -38,7 +38,7 @@
     public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
             int qsType, boolean activityIn, boolean activityOut, int dataActivity,
             int mobileActivity, int stackedDataIcon, int stackedVoiceIcon,
-            String typeContentDescription, String description, boolean isWide, int subId) {
+            String typeContentDescription, String description, boolean isWide, int subId, boolean isMobileIms) {
     }
 
     @Override