Show mobile data slice in Search even no SIM card

- return slice like in airplan mode when mobile data disabled in the getSlice
  of the MobileDataSlice
- replace CONDITIONALLY_UNAVAILABLE by DISABLED_DEPENDENT_SETTING in the
  getAvailabilityStatus of the MobileDataPreferenceController
- remove the duplicated mobile data item by update data_usage_cellular.xml

Fixes: 130650621
Test: robotest
Change-Id: I42c0983c27d4edb17fcdce7ca386023911254d2d
diff --git a/res/xml/data_usage_cellular.xml b/res/xml/data_usage_cellular.xml
index b50eaba..fe1a072 100644
--- a/res/xml/data_usage_cellular.xml
+++ b/res/xml/data_usage_cellular.xml
@@ -16,6 +16,7 @@
 
 <PreferenceScreen
     xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:settings="http://schemas.android.com/apk/res-auto"
     android:key="data_usage_cellular_screen">
 
     <com.android.settings.datausage.TemplatePreferenceCategory
@@ -24,7 +25,8 @@
 
         <com.android.settings.datausage.CellDataPreference
             android:key="data_usage_enable"
-            android:title="@string/data_usage_enable_mobile" />
+            android:title="@string/data_usage_enable_mobile"
+            settings:searchable="false" />
 
         <com.android.settings.datausage.DataUsagePreference
             android:key="cellular_data_usage"
diff --git a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
index 0a39bfd..2df16f5 100644
--- a/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
+++ b/src/com/android/settings/network/telephony/MobileDataPreferenceController.java
@@ -64,7 +64,7 @@
     public int getAvailabilityStatus(int subId) {
         return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
                 ? AVAILABLE
-                : CONDITIONALLY_UNAVAILABLE;
+                : DISABLED_DEPENDENT_SETTING;
     }
 
     @Override
diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java
index bf9fc04..e497a9e 100644
--- a/src/com/android/settings/network/telephony/MobileDataSlice.java
+++ b/src/com/android/settings/network/telephony/MobileDataSlice.java
@@ -73,11 +73,6 @@
 
     @Override
     public Slice getSlice() {
-        // Mobile data not available, thus return no Slice.
-        if (!isMobileDataAvailable()) {
-            return null;
-        }
-
         final IconCompat icon = IconCompat.createWithResource(mContext,
                 R.drawable.ic_network_cell);
         final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
@@ -85,20 +80,14 @@
 
         // Return a Slice without the mobile data toggle when airplane mode is on.
         if (isAirplaneModeEnabled()) {
-            final CharSequence summary = mContext.getText(R.string.mobile_data_ap_mode_disabled);
-            // Intent does nothing, but we have to pass an intent to the Row.
-            final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */,
-                    new Intent(), 0 /* flags */);
-            final SliceAction deadAction =
-                    SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title);
-            final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
-                    ListBuilder.INFINITY)
-                    .setAccentColor(color)
-                    .addRow(new ListBuilder.RowBuilder()
-                            .setTitle(title)
-                            .setSubtitle(summary)
-                            .setPrimaryAction(deadAction));
-            return listBuilder.build();
+            return buildUnavailableMobileDataSlice(title,
+                    mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color);
+        }
+
+        // Return a Slice without the mobile data toggle when mobile data disabled.
+        if (!isMobileDataAvailable()) {
+            return buildUnavailableMobileDataSlice(title,
+                    mContext.getText(R.string.sim_cellular_data_unavailable), icon, color);
         }
 
         final CharSequence summary = getSummary();
@@ -128,7 +117,7 @@
     @Override
     public void onNotifyChange(Intent intent) {
         final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
-                    isMobileDataEnabled());
+                isMobileDataEnabled());
 
         final int defaultSubId = getDefaultSubscriptionId(mSubscriptionManager);
         if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
@@ -212,6 +201,22 @@
         return mTelephonyManager.isDataEnabled();
     }
 
+    private Slice buildUnavailableMobileDataSlice(String title, CharSequence summary,
+            IconCompat icon, int color) {
+        final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */,
+                new Intent(), 0 /* flags */);
+        final SliceAction deadAction =
+                SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title);
+        final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
+                ListBuilder.INFINITY)
+                .setAccentColor(color)
+                .addRow(new ListBuilder.RowBuilder()
+                        .setTitle(title)
+                        .setSubtitle(summary)
+                        .setPrimaryAction(deadAction));
+        return listBuilder.build();
+    }
+
     /**
      * Listener for mobile data state changes.
      *
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java
index e853c47..30b5408 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataPreferenceControllerTest.java
@@ -16,7 +16,7 @@
 
 package com.android.settings.network.telephony;
 
-import static com.android.settings.core.BasePreferenceController.CONDITIONALLY_UNAVAILABLE;
+import static com.android.settings.core.BasePreferenceController.DISABLED_DEPENDENT_SETTING;
 
 import static com.google.common.truth.Truth.assertThat;
 
@@ -86,10 +86,10 @@
     }
 
     @Test
-    public void getAvailabilityStatus_invalidSubscription_returnUnavailable() {
+    public void getAvailabilityStatus_invalidSubscription_returnDisabledDependentSetting() {
         mController.init(mFragmentManager, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
 
-        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
+        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
     }
 
     @Test
diff --git a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
index e59fbaf..ae6f568 100644
--- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
+++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java
@@ -170,21 +170,47 @@
     }
 
     @Test
-    public void isMobileDataAvailable_noSubscriptions_returnsNull() {
+    public void isMobileDataAvailable_noSubscriptions_slicePrimaryActionIsEmpty() {
         doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
+        final Slice mobileData = mMobileDataSlice.getSlice();
 
-        final Slice slice = mMobileDataSlice.getSlice();
+        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
+        assertThat(metadata.getTitle())
+                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));
 
-        assertThat(slice).isNull();
+        assertThat(metadata.getSubtitle())
+                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));
+
+        final List<SliceAction> toggles = metadata.getToggles();
+        assertThat(toggles).hasSize(0);
+
+        final SliceAction primaryAction = metadata.getPrimaryAction();
+        final PendingIntent pendingIntent = primaryAction.getAction();
+        final Intent actionIntent = pendingIntent.getIntent();
+
+        assertThat(actionIntent).isNull();
     }
 
     @Test
-    public void isMobileDataAvailable_nullSubscriptions_returnsNull() {
+    public void isMobileDataAvailable_nullSubscriptions_slicePrimaryActionIsEmpty() {
         doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
+        final Slice mobileData = mMobileDataSlice.getSlice();
 
-        final Slice slice = mMobileDataSlice.getSlice();
+        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
+        assertThat(metadata.getTitle())
+                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));
 
-        assertThat(slice).isNull();
+        assertThat(metadata.getSubtitle())
+                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));
+
+        final List<SliceAction> toggles = metadata.getToggles();
+        assertThat(toggles).hasSize(0);
+
+        final SliceAction primaryAction = metadata.getPrimaryAction();
+        final PendingIntent pendingIntent = primaryAction.getAction();
+        final Intent actionIntent = pendingIntent.getIntent();
+
+        assertThat(actionIntent).isNull();
     }
 
     @Test