diff --git a/res/values/strings.xml b/res/values/strings.xml index 3673af4fc9b..bd67b1c4c8e 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -10684,6 +10684,9 @@ Volume + + Unavailable during airplane mode + Force desktop mode diff --git a/src/com/android/settings/network/telephony/MobileDataSlice.java b/src/com/android/settings/network/telephony/MobileDataSlice.java index 6efd8c3aed6..5a5d6a2467b 100644 --- a/src/com/android/settings/network/telephony/MobileDataSlice.java +++ b/src/com/android/settings/network/telephony/MobileDataSlice.java @@ -74,8 +74,27 @@ public class MobileDataSlice implements CustomSliceable { final IconCompat icon = IconCompat.createWithResource(mContext, R.drawable.ic_network_cell); final String title = mContext.getText(R.string.mobile_data_settings_title).toString(); - final CharSequence summary = getSummary(); @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext); + + // 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(); + } + + final CharSequence summary = getSummary(); final PendingIntent toggleAction = getBroadcastIntent(mContext); final PendingIntent primaryAction = getPrimaryAction(); final SliceAction primarySliceAction = SliceAction.createDeeplink(primaryAction, icon, @@ -101,11 +120,6 @@ public class MobileDataSlice implements CustomSliceable { @Override public void onNotifyChange(Intent intent) { - // Don't make a change if we are in Airplane Mode. - if (isAirplaneModeEnabled()) { - return; - } - final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, isMobileDataEnabled()); 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 c497cf82665..e488d0c7fb2 100644 --- a/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java +++ b/tests/robotests/src/com/android/settings/network/telephony/MobileDataSliceTest.java @@ -24,6 +24,7 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.provider.Settings; @@ -162,4 +163,27 @@ public class MobileDataSliceTest { assertThat(isMobileDataEnabled).isEqualTo(seed); } + + @Test + public void airplaneModeEnabled_slicePrimaryActionIsEmpty() { + doReturn(true).when(mMobileDataSlice).isAirplaneModeEnabled(); + doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID); + 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.mobile_data_ap_mode_disabled)); + + final List 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(); + } }