MobileData slice should be null if not-actionable

In cases where MobileData should not be changed:
- Airplane mode
- No data subscriptions

we will return a null slice, rather than a slice with a no-op intent
attached as a primary action. The problem with the no-op intent is that
Slices assumes all actions are by definition, actionable, and the the
TalkBack description announces that the item is clickable, which it
really isn't.

We will in the future investigate disabled actions on Slices, but this
is the short-term fix.

Fixes: 132924748
Test: Robolectric
Test: Panel tester app
Change-Id: I1d62af32fe2dd985f0b52ea4188651e76f9c90ec
This commit is contained in:
Matthew Fritze
2019-06-12 15:00:55 -07:00
parent 102d43b5c1
commit 63bc6a1090
2 changed files with 7 additions and 67 deletions

View File

@@ -78,16 +78,14 @@ public class MobileDataSlice implements CustomSliceable {
final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
@ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
// Return a Slice without the mobile data toggle when airplane mode is on.
// Return null until we can show a disabled-action Slice, blaming Airplane mode.
if (isAirplaneModeEnabled()) {
return buildUnavailableMobileDataSlice(title,
mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color);
return null;
}
// Return a Slice without the mobile data toggle when mobile data disabled.
// Return null until we can show a disabled-action Slice.
if (!isMobileDataAvailable()) {
return buildUnavailableMobileDataSlice(title,
mContext.getText(R.string.sim_cellular_data_unavailable), icon, color);
return null;
}
final CharSequence summary = getSummary();
@@ -201,22 +199,6 @@ public class MobileDataSlice implements CustomSliceable {
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.
*

View File

@@ -174,21 +174,7 @@ public class MobileDataSliceTest {
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 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();
assertThat(mobileData).isNull();
}
@Test
@@ -196,21 +182,7 @@ public class MobileDataSliceTest {
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 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();
assertThat(mobileData).isNull();
}
@Test
@@ -219,20 +191,6 @@ public class MobileDataSliceTest {
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<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();
assertThat(mobileData).isNull();
}
}