Merge "Show mobile data slice in Search even no SIM card" into qt-dev

This commit is contained in:
TreeHugger Robot
2019-04-30 11:05:37 +00:00
committed by Android (Google) Code Review
5 changed files with 64 additions and 31 deletions

View File

@@ -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"

View File

@@ -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

View File

@@ -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();
@@ -128,7 +117,7 @@ public class MobileDataSlice implements CustomSliceable {
@Override @Override
public void onNotifyChange(Intent intent) { public void onNotifyChange(Intent intent) {
final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE, final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
isMobileDataEnabled()); isMobileDataEnabled());
final int defaultSubId = getDefaultSubscriptionId(mSubscriptionManager); final int defaultSubId = getDefaultSubscriptionId(mSubscriptionManager);
if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
@@ -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.
* *

View File

@@ -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

View File

@@ -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 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 @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 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 @Test