diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 1ffdba1..8cad8a4 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -130,7 +130,7 @@
                        android:value="true" />
         </activity>
 
-        <activity android:name=".network.telephony.MobileSettingsActivity"
+        <activity android:name=".network.telephony.MobileNetworkActivity"
                   android:label="@string/network_settings_title"
                   android:theme="@style/Theme.Settings.Home"
                   android:launchMode="singleTask">
diff --git a/res/layout/mobile_settings_container.xml b/res/layout/mobile_network_settings_container.xml
similarity index 100%
rename from res/layout/mobile_settings_container.xml
rename to res/layout/mobile_network_settings_container.xml
diff --git a/res/xml/network_setting_fragment.xml b/res/xml/mobile_network_settings.xml
similarity index 99%
rename from res/xml/network_setting_fragment.xml
rename to res/xml/mobile_network_settings.xml
index 459a269..0478664 100644
--- a/res/xml/network_setting_fragment.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -77,7 +77,7 @@
         settings:controller="com.android.settings.network.telephony.EuiccPreferenceController" />
 
     <PreferenceCategory
-        android:key="calling"
+        android:key="calling_category"
         android:title="@string/call_category">
 
         <PreferenceScreen
diff --git a/src/com/android/settings/network/MobileNetworkPreferenceController.java b/src/com/android/settings/network/MobileNetworkPreferenceController.java
index bf5ca00..3813435 100644
--- a/src/com/android/settings/network/MobileNetworkPreferenceController.java
+++ b/src/com/android/settings/network/MobileNetworkPreferenceController.java
@@ -36,7 +36,7 @@
 
 import com.android.settings.core.FeatureFlags;
 import com.android.settings.core.PreferenceControllerMixin;
-import com.android.settings.network.telephony.MobileSettingsActivity;
+import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.settingslib.RestrictedPreference;
 import com.android.settingslib.Utils;
@@ -147,7 +147,7 @@
     public boolean handlePreferenceTreeClick(Preference preference) {
         if (KEY_MOBILE_NETWORK_SETTINGS.equals(preference.getKey())) {
             if (FeatureFlagUtils.isEnabled(mContext, FeatureFlags.MOBILE_NETWORK_V2)) {
-                final Intent intent = new Intent(mContext, MobileSettingsActivity.class);
+                final Intent intent = new Intent(mContext, MobileNetworkActivity.class);
                 mContext.startActivity(intent);
             } else {
                 final Intent intent = new Intent(Intent.ACTION_MAIN);
diff --git a/src/com/android/settings/network/telephony/MobileSettingsActivity.java b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
similarity index 95%
rename from src/com/android/settings/network/telephony/MobileSettingsActivity.java
rename to src/com/android/settings/network/telephony/MobileNetworkActivity.java
index b2bceb9..9f3dfb2 100644
--- a/src/com/android/settings/network/telephony/MobileSettingsActivity.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkActivity.java
@@ -48,7 +48,7 @@
 import java.util.List;
 import java.util.Objects;
 
-public class MobileSettingsActivity extends SettingsBaseActivity {
+public class MobileNetworkActivity extends SettingsBaseActivity {
 
     private static final String TAG = "MobileSettingsActivity";
     @VisibleForTesting
@@ -79,7 +79,8 @@
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.mobile_settings_container);
+
+        setContentView(R.layout.mobile_network_settings_container);
         setActionBar(findViewById(R.id.mobile_action_bar));
         mPhoneChangeReceiver = new PhoneChangeReceiver();
         mSubscriptionManager = getSystemService(SubscriptionManager.class);
@@ -130,7 +131,7 @@
         updateBottomNavigationView();
 
         if (savedInstanceState == null) {
-            switchFragment(new MobileNetworkFragment(), getSubscriptionId());
+            switchFragment(new MobileNetworkSettings(), getSubscriptionId());
         }
     }
 
@@ -172,7 +173,7 @@
                         .setIcon(R.drawable.ic_settings_sim);
             }
             navigation.setOnNavigationItemSelectedListener(item -> {
-                switchFragment(new MobileNetworkFragment(), item.getItemId());
+                switchFragment(new MobileNetworkSettings(), item.getItemId());
                 return true;
             });
         }
@@ -211,7 +212,7 @@
             // When the radio changes (ex: CDMA->GSM), refresh the fragment.
             // This is very rare to happen.
             if (mCurSubscriptionId != SUB_ID_NULL) {
-                switchFragment(new MobileNetworkFragment(), mCurSubscriptionId,
+                switchFragment(new MobileNetworkSettings(), mCurSubscriptionId,
                         true /* forceUpdate */);
             }
         }
diff --git a/src/com/android/settings/network/telephony/MobileNetworkFragment.java b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
similarity index 97%
rename from src/com/android/settings/network/telephony/MobileNetworkFragment.java
rename to src/com/android/settings/network/telephony/MobileNetworkSettings.java
index e6db51c..ebc38e4 100644
--- a/src/com/android/settings/network/telephony/MobileNetworkFragment.java
+++ b/src/com/android/settings/network/telephony/MobileNetworkSettings.java
@@ -49,7 +49,7 @@
 import java.util.List;
 
 @SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
-public class MobileNetworkFragment extends RestrictedDashboardFragment {
+public class MobileNetworkSettings extends RestrictedDashboardFragment {
 
     private static final String LOG_TAG = "NetworkSettings";
     public static final int REQUEST_CODE_EXIT_ECM = 17;
@@ -69,7 +69,7 @@
     private UserManager mUserManager;
     private String mClickedPrefKey;
 
-    public MobileNetworkFragment() {
+    public MobileNetworkSettings() {
         super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
     }
 
@@ -107,6 +107,7 @@
     @Override
     public void onAttach(Context context) {
         super.onAttach(context);
+
         mSubId = getArguments().getInt(Settings.EXTRA_SUB_ID,
                 SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
@@ -162,7 +163,7 @@
 
     @Override
     protected int getPreferenceScreenResId() {
-        return R.xml.network_setting_fragment;
+        return R.xml.mobile_network_settings;
     }
 
     @Override
@@ -209,7 +210,7 @@
                     final ArrayList<SearchIndexableResource> result = new ArrayList<>();
 
                     final SearchIndexableResource sir = new SearchIndexableResource(context);
-                    sir.xmlResId = R.xml.network_setting_fragment;
+                    sir.xmlResId = R.xml.mobile_network_settings;
                     result.add(sir);
                     return result;
                 }
diff --git a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
index 09bf2d7..48fb710 100644
--- a/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
+++ b/src/com/android/settings/network/telephony/WifiCallingPreferenceController.java
@@ -46,6 +46,9 @@
 public class WifiCallingPreferenceController extends BasePreferenceController implements
         LifecycleObserver, OnStart, OnStop {
 
+    @VisibleForTesting
+    static final String KEY_PREFERENCE_CATEGORY = "calling_category";
+
     private TelephonyManager mTelephonyManager;
     @VisibleForTesting
     ImsManager mImsManager;
@@ -86,6 +89,13 @@
     public void displayPreference(PreferenceScreen screen) {
         super.displayPreference(screen);
         mPreference = screen.findPreference(getPreferenceKey());
+        if (!isAvailable()) {
+            // Set category as invisible
+            final Preference preferenceCateogry = screen.findPreference(KEY_PREFERENCE_CATEGORY);
+            if (preferenceCateogry != null) {
+                preferenceCateogry.setVisible(false);
+            }
+        }
     }
 
     @Override
diff --git a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
index d5c704a..6899054 100644
--- a/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/AutoSelectPreferenceController.java
@@ -31,7 +31,7 @@
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.core.TogglePreferenceController;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.MobileSettingsActivity;
+import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settings.network.telephony.NetworkSelectSettings;
 
 import java.util.ArrayList;
diff --git a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
index df5e151..23de056 100644
--- a/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
+++ b/src/com/android/settings/network/telephony/gsm/OpenNetworkSelectPagePreferenceController.java
@@ -32,7 +32,7 @@
 import com.android.settings.core.BasePreferenceController;
 import com.android.settings.core.SubSettingLauncher;
 import com.android.settings.network.telephony.MobileNetworkUtils;
-import com.android.settings.network.telephony.MobileSettingsActivity;
+import com.android.settings.network.telephony.MobileNetworkActivity;
 import com.android.settings.network.telephony.NetworkSelectSettings;
 
 /**
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
similarity index 76%
rename from tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java
rename to tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
index ea184fd..68634a8 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileSettingsActivityTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileNetworkActivityTest.java
@@ -16,7 +16,7 @@
 
 package com.android.settings.network.telephony;
 
-import static com.android.settings.network.telephony.MobileSettingsActivity.MOBILE_SETTINGS_TAG;
+import static com.android.settings.network.telephony.MobileNetworkActivity.MOBILE_SETTINGS_TAG;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -56,13 +56,13 @@
 import java.util.List;
 
 @RunWith(SettingsRobolectricTestRunner.class)
-public class MobileSettingsActivityTest {
+public class MobileNetworkActivityTest {
 
     private static final int CURRENT_SUB_ID = 3;
     private static final int PREV_SUB_ID = 1;
 
     private Context mContext;
-    private MobileSettingsActivity mMobileSettingsActivity;
+    private MobileNetworkActivity mMobileNetworkActivity;
     private List<SubscriptionInfo> mSubscriptionInfos;
     private Fragment mShowFragment;
     private Fragment mHideFragment;
@@ -85,19 +85,19 @@
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
 
-        mMobileSettingsActivity = spy(new MobileSettingsActivity());
+        mMobileNetworkActivity = spy(new MobileNetworkActivity());
         mSubscriptionInfos = new ArrayList<>();
         mShowFragment = new Fragment();
         mHideFragment = new Fragment();
-        mMobileSettingsActivity.mSubscriptionInfos = mSubscriptionInfos;
-        mMobileSettingsActivity.mSubscriptionManager = mSubscriptionManager;
+        mMobileNetworkActivity.mSubscriptionInfos = mSubscriptionInfos;
+        mMobileNetworkActivity.mSubscriptionManager = mSubscriptionManager;
         when(mSubscriptionInfo.getSubscriptionId()).thenReturn(PREV_SUB_ID);
         when(mSubscriptionInfo2.getSubscriptionId()).thenReturn(CURRENT_SUB_ID);
 
-        doReturn(mSubscriptionManager).when(mMobileSettingsActivity).getSystemService(
+        doReturn(mSubscriptionManager).when(mMobileNetworkActivity).getSystemService(
                 SubscriptionManager.class);
-        doReturn(mBottomNavigationView).when(mMobileSettingsActivity).findViewById(R.id.bottom_nav);
-        doReturn(mFragmentManager).when(mMobileSettingsActivity).getSupportFragmentManager();
+        doReturn(mBottomNavigationView).when(mMobileNetworkActivity).findViewById(R.id.bottom_nav);
+        doReturn(mFragmentManager).when(mMobileNetworkActivity).getSupportFragmentManager();
         doReturn(mFragmentTransaction).when(mFragmentManager).beginTransaction();
         doReturn(mHideFragment).when(mFragmentManager).findFragmentByTag(
                 MOBILE_SETTINGS_TAG + PREV_SUB_ID);
@@ -110,7 +110,7 @@
         mSubscriptionInfos.add(mSubscriptionInfo);
         doReturn(mSubscriptionInfos).when(mSubscriptionManager).getActiveSubscriptionInfoList();
 
-        mMobileSettingsActivity.updateBottomNavigationView();
+        mMobileNetworkActivity.updateBottomNavigationView();
 
         verify(mBottomNavigationView).setVisibility(View.GONE);
     }
@@ -123,16 +123,16 @@
         doReturn(mSubscriptionInfos).when(mSubscriptionManager).getActiveSubscriptionInfoList();
         doReturn(menu).when(mBottomNavigationView).getMenu();
 
-        mMobileSettingsActivity.updateBottomNavigationView();
+        mMobileNetworkActivity.updateBottomNavigationView();
 
         assertThat(menu.size()).isEqualTo(2);
     }
 
     @Test
     public void switchFragment_newFragment_replaceIt() {
-        mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID;
+        mMobileNetworkActivity.mCurSubscriptionId = PREV_SUB_ID;
 
-        mMobileSettingsActivity.switchFragment(mShowFragment, CURRENT_SUB_ID);
+        mMobileNetworkActivity.switchFragment(mShowFragment, CURRENT_SUB_ID);
 
         verify(mFragmentTransaction).replace(R.id.main_content, mShowFragment,
                 MOBILE_SETTINGS_TAG + CURRENT_SUB_ID);
@@ -142,29 +142,29 @@
     public void getSubscriptionId_hasIntent_getIdFromIntent() {
         final Intent intent = new Intent();
         intent.putExtra(Settings.EXTRA_SUB_ID, CURRENT_SUB_ID);
-        doReturn(intent).when(mMobileSettingsActivity).getIntent();
+        doReturn(intent).when(mMobileNetworkActivity).getIntent();
         doReturn(true).when(mSubscriptionManager).isActiveSubscriptionId(CURRENT_SUB_ID);
 
-        assertThat(mMobileSettingsActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
+        assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(CURRENT_SUB_ID);
     }
 
     @Test
     public void getSubscriptionId_noIntent_firstIdInList() {
-        doReturn(null).when(mMobileSettingsActivity).getIntent();
+        doReturn(null).when(mMobileNetworkActivity).getIntent();
         mSubscriptionInfos.add(mSubscriptionInfo);
         mSubscriptionInfos.add(mSubscriptionInfo2);
 
-        assertThat(mMobileSettingsActivity.getSubscriptionId()).isEqualTo(PREV_SUB_ID);
+        assertThat(mMobileNetworkActivity.getSubscriptionId()).isEqualTo(PREV_SUB_ID);
     }
 
     @Test
     public void onSaveInstanceState_saveCurrentSubId() {
-        mMobileSettingsActivity = Robolectric.buildActivity(
-                MobileSettingsActivity.class).get();
-        mMobileSettingsActivity.mCurSubscriptionId = PREV_SUB_ID;
+        mMobileNetworkActivity = Robolectric.buildActivity(
+                MobileNetworkActivity.class).get();
+        mMobileNetworkActivity.mCurSubscriptionId = PREV_SUB_ID;
         final Bundle bundle = new Bundle();
 
-        mMobileSettingsActivity.saveInstanceState(bundle);
+        mMobileNetworkActivity.saveInstanceState(bundle);
 
         assertThat(bundle.getInt(Settings.EXTRA_SUB_ID)).isEqualTo(
                 PREV_SUB_ID);
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 35297bd..a209b00 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/WifiCallingPreferenceControllerTest.java
@@ -19,14 +19,16 @@
 import static com.google.common.truth.Truth.assertThat;
 
 import static org.mockito.ArgumentMatchers.anyBoolean;
-import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
 
 import android.content.Context;
-import android.telecom.PhoneAccountHandle;
+import android.telephony.SubscriptionManager;
 import android.telephony.TelephonyManager;
 
 import androidx.preference.Preference;
+import androidx.preference.PreferenceCategory;
+import androidx.preference.PreferenceScreen;
 
 import com.android.ims.ImsConfig;
 import com.android.ims.ImsManager;
@@ -47,9 +49,12 @@
     private TelephonyManager mTelephonyManager;
     @Mock
     private ImsManager mImsManager;
+    @Mock
+    private PreferenceScreen mPreferenceScreen;
 
     private WifiCallingPreferenceController mController;
     private Preference mPreference;
+    private PreferenceCategory mPreferenceCategory;
     private Context mContext;
 
     @Before
@@ -57,22 +62,29 @@
         MockitoAnnotations.initMocks(this);
 
         mContext = spy(RuntimeEnvironment.application);
-        doReturn(mTelephonyManager).when(mContext).getSystemService(Context.TELEPHONY_SERVICE);
-        doReturn(mTelephonyManager).when(mTelephonyManager).createForSubscriptionId(SUB_ID);
+        when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
+        when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+        when(mTelephonyManager.createForSubscriptionId(SUB_ID)).thenReturn(mTelephonyManager);
 
         mPreference = new Preference(mContext);
         mController = new WifiCallingPreferenceController(mContext, "wifi_calling");
         mController.init(SUB_ID);
         mController.mImsManager = mImsManager;
         mPreference.setKey(mController.getPreferenceKey());
+
+        mPreferenceCategory = new PreferenceCategory(mContext);
+        when(mPreferenceScreen.findPreference(
+                WifiCallingPreferenceController.KEY_PREFERENCE_CATEGORY)).thenReturn(
+                mPreferenceCategory);
+
     }
 
     @Test
     public void updateState_noSimCallManager_setCorrectSummary() {
         mController.mSimCallManager = null;
-        doReturn(true).when(mImsManager).isWfcEnabledByUser();
-        doReturn(ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY).when(mImsManager).getWfcMode(
-                anyBoolean());
+        when(mImsManager.isWfcEnabledByUser()).thenReturn(true);
+        when(mImsManager.getWfcMode(anyBoolean())).thenReturn(
+                ImsConfig.WfcModeFeatureValueConstants.WIFI_ONLY);
 
         mController.updateState(mPreference);
 
@@ -82,11 +94,21 @@
 
     @Test
     public void updateState_notCallIdle_disable() {
-        doReturn(TelephonyManager.CALL_STATE_RINGING).when(mTelephonyManager).getCallState(SUB_ID);
+        when(mTelephonyManager.getCallState(SUB_ID)).thenReturn(
+                TelephonyManager.CALL_STATE_RINGING);
 
         mController.updateState(mPreference);
 
         assertThat(mPreference.isEnabled()).isFalse();
     }
 
+    @Test
+    public void displayPreference_notAvailable_setCategoryInvisible() {
+        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
+
+        mController.displayPreference(mPreferenceScreen);
+
+        assertThat(mPreferenceCategory.isVisible()).isFalse();
+    }
+
 }
