Merge changes Ibec13fbe,If89c67c0

* changes:
  Fix ViLTE is not available when WiFi Calling is disabled
  Check the missing useHomeWfMode case
diff --git a/res/xml/mobile_network_settings_v2.xml b/res/xml/mobile_network_settings_v2.xml
index 506b354..74c0dc0 100644
--- a/res/xml/mobile_network_settings_v2.xml
+++ b/res/xml/mobile_network_settings_v2.xml
@@ -124,7 +124,8 @@
 
         <PreferenceCategory
             android:key="calling_category"
-            android:title="@string/call_category">
+            android:title="@string/call_category"
+            settings:controller="com.android.settings.network.telephony.CallingPreferenceCategoryController">
 
             <PreferenceScreen
                 android:key="wifi_calling_key"
diff --git a/src/com/android/settings/network/telephony/CallingPreferenceCategoryController.java b/src/com/android/settings/network/telephony/CallingPreferenceCategoryController.java
new file mode 100644
index 0000000..f836415
--- /dev/null
+++ b/src/com/android/settings/network/telephony/CallingPreferenceCategoryController.java
@@ -0,0 +1,31 @@
+/*
+ * Copyright (C) 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.network.telephony;
+
+import android.content.Context;
+
+import com.android.settings.widget.PreferenceCategoryController;
+
+/**
+ * Preference controller for "Calling" category
+ */
+public class CallingPreferenceCategoryController extends PreferenceCategoryController {
+
+    public CallingPreferenceCategoryController(Context context, String key) {
+        super(context, key);
+    }
+}
diff --git a/src/com/android/settings/network/telephony/MobileNetworkSettings.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
index 8d83ef2..f1e0819 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkSettings.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -155,7 +155,8 @@
         if (!FeatureFlagPersistent.isEnabled(getContext(), FeatureFlags.NETWORK_INTERNET_V2)) {
             use(EuiccPreferenceController.class).init(mSubId);
         }
-        use(WifiCallingPreferenceController.class).init(mSubId);
+        final WifiCallingPreferenceController wifiCallingPreferenceController =
+                use(WifiCallingPreferenceController.class).init(mSubId);
 
         final OpenNetworkSelectPagePreferenceController openNetworkSelectPagePreferenceController =
                 use(OpenNetworkSelectPagePreferenceController.class).init(mSubId);
@@ -173,6 +174,8 @@
 
         final VideoCallingPreferenceController videoCallingPreferenceController =
                 use(VideoCallingPreferenceController.class).init(mSubId);
+        use(CallingPreferenceCategoryController.class).setChildren(
+                Arrays.asList(wifiCallingPreferenceController, videoCallingPreferenceController));
         use(Enhanced4gLtePreferenceController.class).init(mSubId)
                 .addListener(videoCallingPreferenceController);
     }
diff --git a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
index 1c78863..5b1ad4a 100644
--- a/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/VideoCallingPreferenceController.java
@@ -63,7 +63,6 @@
     @Override
     public int getAvailabilityStatus(int subId) {
         return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
-                && MobileNetworkUtils.isWifiCallingEnabled(mContext, subId)
                 && isVideoCallEnabled(subId)
                 ? AVAILABLE
                 : CONDITIONALLY_UNAVAILABLE;
diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
index 5998483..8f8d0d0 100644
--- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
@@ -49,9 +49,6 @@
 public class WifiCallingPreferenceController extends TelephonyBasePreferenceController implements
         LifecycleObserver, OnStart, OnStop {
 
-    @VisibleForTesting
-    static final String KEY_PREFERENCE_CATEGORY = "calling_category";
-
     private TelephonyManager mTelephonyManager;
     @VisibleForTesting
     CarrierConfigManager mCarrierConfigManager;
@@ -95,13 +92,6 @@
         if (intent != null) {
             intent.putExtra(Settings.EXTRA_SUB_ID, mSubId);
         }
-        if (!isAvailable()) {
-            // Set category as invisible
-            final Preference preferenceCateogry = screen.findPreference(KEY_PREFERENCE_CATEGORY);
-            if (preferenceCateogry != null) {
-                preferenceCateogry.setVisible(false);
-            }
-        }
     }
 
     @Override
@@ -158,12 +148,14 @@
                 mTelephonyManager.getCallState(mSubId) == TelephonyManager.CALL_STATE_IDLE);
     }
 
-    public void init(int subId) {
+    public WifiCallingPreferenceController init(int subId) {
         mSubId = subId;
         mTelephonyManager = TelephonyManager.from(mContext).createForSubscriptionId(mSubId);
         mImsManager = ImsManager.getInstance(mContext, SubscriptionManager.getPhoneId(mSubId));
         mSimCallManager = mContext.getSystemService(TelecomManager.class)
                 .getSimCallManagerForSubscription(mSubId);
+
+        return this;
     }
 
     private class PhoneCallStateListener extends PhoneStateListener {
diff --git a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
index d904ab3..3ada519 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/VideoCallingPreferenceControllerTest.java
@@ -27,6 +27,7 @@
 import android.telephony.TelephonyManager;
 import android.telephony.ims.feature.ImsFeature;
 
+import androidx.preference.PreferenceScreen;
 import androidx.preference.SwitchPreference;
 
 import com.android.ims.ImsManager;
@@ -49,6 +50,8 @@
     private ImsManager mImsManager;
     @Mock
     private CarrierConfigManager mCarrierConfigManager;
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
 
     private VideoCallingPreferenceController mController;
     private PersistableBundle mCarrierConfig;
@@ -125,4 +128,15 @@
         assertThat(mPreference.isEnabled()).isTrue();
         assertThat(mPreference.isChecked()).isTrue();
     }
+
+
+    @Test
+    public void displayPreference_notAvailable_setPreferenceInvisible() {
+        doReturn(false).when(mImsManager).isVtEnabledByPlatform();
+
+        mController.displayPreference(mPreferenceScreen);
+
+        assertThat(mPreferenceScreen.isVisible()).isFalse();
+    }
+
 }
diff --git a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
index f795d61..1048acd 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
@@ -64,7 +64,6 @@
 
     private WifiCallingPreferenceController mController;
     private Preference mPreference;
-    private PreferenceCategory mPreferenceCategory;
     private Context mContext;
     private PersistableBundle mCarrierConfig;
 
@@ -87,10 +86,6 @@
         mCarrierConfig = new PersistableBundle();
         when(mCarrierConfigManager.getConfigForSubId(SUB_ID)).thenReturn(mCarrierConfig);
 
-        mPreferenceCategory = new PreferenceCategory(mContext);
-        when(mPreferenceScreen.findPreference(
-                WifiCallingPreferenceController.KEY_PREFERENCE_CATEGORY)).thenReturn(
-                mPreferenceCategory);
         when(mPreferenceScreen.findPreference(mController.getPreferenceKey())).thenReturn(
                 mPreference);
     }
@@ -127,7 +122,7 @@
     }
 
     @Test
-    public void updateState_nonRoaming_wfcCellularPreferred() {
+    public void updateState_wfcNonRoamingByConfig() {
         assertNull(mController.mSimCallManager);
         mCarrierConfig.putBoolean(
                 CarrierConfigManager.KEY_USE_WFC_HOME_NETWORK_MODE_IN_ROAMING_NETWORK_BOOL, true);
@@ -147,7 +142,7 @@
     }
 
     @Test
-    public void updateState_roaming_wfcWifiPreferred() {
+    public void updateState_wfcRoamingByConfig() {
         assertNull(mController.mSimCallManager);
         // useWfcHomeModeForRoaming is false by default. In order to check wfc in roaming mode. We
         // need the device roaming, and not using home mode in roaming network.
@@ -164,12 +159,12 @@
     }
 
     @Test
-    public void displayPreference_notAvailable_setCategoryInvisible() {
+    public void displayPreference_notAvailable_setPreferenceInvisible() {
         mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
         mController.displayPreference(mPreferenceScreen);
 
-        assertThat(mPreferenceCategory.isVisible()).isFalse();
+        assertThat(mPreferenceScreen.isVisible()).isFalse();
     }
 
     @Test