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:
@@ -78,16 +78,14 @@ public class MobileDataSlice implements CustomSliceable {
|
|||||||
final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
|
final String title = mContext.getText(R.string.mobile_data_settings_title).toString();
|
||||||
@ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
|
@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()) {
|
if (isAirplaneModeEnabled()) {
|
||||||
return buildUnavailableMobileDataSlice(title,
|
return null;
|
||||||
mContext.getText(R.string.mobile_data_ap_mode_disabled), icon, color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return a Slice without the mobile data toggle when mobile data disabled.
|
// Return null until we can show a disabled-action Slice.
|
||||||
if (!isMobileDataAvailable()) {
|
if (!isMobileDataAvailable()) {
|
||||||
return buildUnavailableMobileDataSlice(title,
|
return null;
|
||||||
mContext.getText(R.string.sim_cellular_data_unavailable), icon, color);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
final CharSequence summary = getSummary();
|
final CharSequence summary = getSummary();
|
||||||
@@ -201,22 +199,6 @@ 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.
|
||||||
*
|
*
|
||||||
|
@@ -174,21 +174,7 @@ public class MobileDataSliceTest {
|
|||||||
doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
|
doReturn(new ArrayList<>()).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
|
||||||
final Slice mobileData = mMobileDataSlice.getSlice();
|
final Slice mobileData = mMobileDataSlice.getSlice();
|
||||||
|
|
||||||
final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
|
assertThat(mobileData).isNull();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -196,21 +182,7 @@ public class MobileDataSliceTest {
|
|||||||
doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
|
doReturn(null).when(mSubscriptionManager).getSelectableSubscriptionInfoList();
|
||||||
final Slice mobileData = mMobileDataSlice.getSlice();
|
final Slice mobileData = mMobileDataSlice.getSlice();
|
||||||
|
|
||||||
final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
|
assertThat(mobileData).isNull();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@@ -219,20 +191,6 @@ public class MobileDataSliceTest {
|
|||||||
doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID);
|
doReturn(mSubscriptionInfo).when(mSubscriptionManager).getActiveSubscriptionInfo(SUB_ID);
|
||||||
final Slice mobileData = mMobileDataSlice.getSlice();
|
final Slice mobileData = mMobileDataSlice.getSlice();
|
||||||
|
|
||||||
final SliceMetadata metadata = SliceMetadata.from(mContext, mobileData);
|
assertThat(mobileData).isNull();
|
||||||
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();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user