Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 238928de authored by Sunny Shao's avatar Sunny Shao
Browse files

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
parent 703e6aa0
Loading
Loading
Loading
Loading
+3 −1
Original line number Original line Diff line number Diff line
@@ -16,6 +16,7 @@


<PreferenceScreen
<PreferenceScreen
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:settings="http://schemas.android.com/apk/res-auto"
    android:key="data_usage_cellular_screen">
    android:key="data_usage_cellular_screen">


    <com.android.settings.datausage.TemplatePreferenceCategory
    <com.android.settings.datausage.TemplatePreferenceCategory
@@ -24,7 +25,8 @@


        <com.android.settings.datausage.CellDataPreference
        <com.android.settings.datausage.CellDataPreference
            android:key="data_usage_enable"
            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
        <com.android.settings.datausage.DataUsagePreference
            android:key="cellular_data_usage"
            android:key="cellular_data_usage"
+1 −1
Original line number Original line Diff line number Diff line
@@ -64,7 +64,7 @@ public class MobileDataPreferenceController extends TelephonyTogglePreferenceCon
    public int getAvailabilityStatus(int subId) {
    public int getAvailabilityStatus(int subId) {
        return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
        return subId != SubscriptionManager.INVALID_SUBSCRIPTION_ID
                ? AVAILABLE
                ? AVAILABLE
                : CONDITIONALLY_UNAVAILABLE;
                : DISABLED_DEPENDENT_SETTING;
    }
    }


    @Override
    @Override
+25 −20
Original line number Original line Diff line number Diff line
@@ -73,11 +73,6 @@ public class MobileDataSlice implements CustomSliceable {


    @Override
    @Override
    public Slice getSlice() {
    public Slice getSlice() {
        // Mobile data not available, thus return no Slice.
        if (!isMobileDataAvailable()) {
            return null;
        }

        final IconCompat icon = IconCompat.createWithResource(mContext,
        final IconCompat icon = IconCompat.createWithResource(mContext,
                R.drawable.ic_network_cell);
                R.drawable.ic_network_cell);
        final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
        final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
@@ -85,20 +80,14 @@ public class MobileDataSlice implements CustomSliceable {


        // Return a Slice without the mobile data toggle when airplane mode is on.
        // Return a Slice without the mobile data toggle when airplane mode is on.
        if (isAirplaneModeEnabled()) {
        if (isAirplaneModeEnabled()) {
            final CharSequence summary = mContext.getText(R.string.mobile_data_ap_mode_disabled);
            return buildUnavailableMobileDataSlice(title,
            // Intent does nothing, but we have to pass an intent to the Row.
                    mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color);
            final PendingIntent intent = PendingIntent.getActivity(mContext, 0 /* requestCode */,
        }
                    new Intent(), 0 /* flags */);

            final SliceAction deadAction =
        // Return a Slice without the mobile data toggle when mobile data disabled.
                    SliceAction.create(intent, icon, ListBuilder.ICON_IMAGE, title);
        if (!isMobileDataAvailable()) {
            final ListBuilder listBuilder = new ListBuilder(mContext, getUri(),
            return buildUnavailableMobileDataSlice(title,
                    ListBuilder.INFINITY)
                    mContext.getText(R.string.sim_cellular_data_unavailable), icon, color);
                    .setAccentColor(color)
                    .addRow(new ListBuilder.RowBuilder()
                            .setTitle(title)
                            .setSubtitle(summary)
                            .setPrimaryAction(deadAction));
            return listBuilder.build();
        }
        }


        final CharSequence summary = getSummary();
        final CharSequence summary = getSummary();
@@ -212,6 +201,22 @@ public class MobileDataSlice implements CustomSliceable {
        return mTelephonyManager.isDataEnabled();
        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.
     * Listener for mobile data state changes.
     *
     *
+3 −3
Original line number Original line Diff line number Diff line
@@ -16,7 +16,7 @@


package com.android.settings.network.telephony;
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;
import static com.google.common.truth.Truth.assertThat;


@@ -86,10 +86,10 @@ public class MobileDataPreferenceControllerTest {
    }
    }


    @Test
    @Test
    public void getAvailabilityStatus_invalidSubscription_returnUnavailable() {
    public void getAvailabilityStatus_invalidSubscription_returnDisabledDependentSetting() {
        mController.init(mFragmentManager, SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        mController.init(mFragmentManager, SubscriptionManager.INVALID_SUBSCRIPTION_ID);


        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(DISABLED_DEPENDENT_SETTING);
    }
    }


    @Test
    @Test
+32 −6
Original line number Original line Diff line number Diff line
@@ -170,21 +170,47 @@ public class MobileDataSliceTest {
    }
    }


    @Test
    @Test
    public void isMobileDataAvailable_noSubscriptions_returnsNull() {
    public void isMobileDataAvailable_noSubscriptions_slicePrimaryActionIsEmpty() {
        doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
        doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
        final Slice mobileData = mMobileDataSlice.getSlice();

        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
        assertThat(metadata.getTitle())
                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));

        assertThat(metadata.getSubtitle())
                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));


        final Slice slice = mMobileDataSlice.getSlice();
        final List<SliceAction> toggles = metadata.getToggles();
        assertThat(toggles).hasSize(0);


        assertThat(slice).isNull();
        final SliceAction primaryAction = metadata.getPrimaryAction();
        final PendingIntent pendingIntent = primaryAction.getAction();
        final Intent actionIntent = pendingIntent.getIntent();

        assertThat(actionIntent).isNull();
    }
    }


    @Test
    @Test
    public void isMobileDataAvailable_nullSubscriptions_returnsNull() {
    public void isMobileDataAvailable_nullSubscriptions_slicePrimaryActionIsEmpty() {
        doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
        doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
        final Slice mobileData = mMobileDataSlice.getSlice();

        final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
        assertThat(metadata.getTitle())
                .isEqualTo(mContext.getString(R.string.mobile_data_settings_title));

        assertThat(metadata.getSubtitle())
                .isEqualTo(mContext.getString(R.string.sim_cellular_data_unavailable));


        final Slice slice = mMobileDataSlice.getSlice();
        final List<SliceAction> toggles = metadata.getToggles();
        assertThat(toggles).hasSize(0);


        assertThat(slice).isNull();
        final SliceAction primaryAction = metadata.getPrimaryAction();
        final PendingIntent pendingIntent = primaryAction.getAction();
        final Intent actionIntent = pendingIntent.getIntent();

        assertThat(actionIntent).isNull();
    }
    }


    @Test
    @Test