Check for Data Usage intent before populating "Data Usage" summary.
On some devices, data usage is not available; thus, it is possible that ACTION_DATA_USAGE_SETTINGS has no matching activity. If no matching activity is found, we should not populate "data usage" in the summary field. Bug: 111398942 Test: Manual check. I see that data usage is no longer visible on devices without Data Usage activity. Test: make RunSettingsRoboTests Change-Id: I838206b76497c6550ef4826ad19e605cd32906ee
This commit is contained in:
@@ -15,12 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.android.settings.network;
|
package com.android.settings.network;
|
||||||
|
|
||||||
|
import static android.provider.Settings.ACTION_DATA_USAGE_SETTINGS;
|
||||||
import static com.android.settings.network.MobilePlanPreferenceController
|
import static com.android.settings.network.MobilePlanPreferenceController
|
||||||
.MANAGE_MOBILE_PLAN_DIALOG_ID;
|
.MANAGE_MOBILE_PLAN_DIALOG_ID;
|
||||||
|
|
||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.Dialog;
|
import android.app.Dialog;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
import android.icu.text.ListFormatter;
|
import android.icu.text.ListFormatter;
|
||||||
import android.provider.SearchIndexableResource;
|
import android.provider.SearchIndexableResource;
|
||||||
import android.text.BidiFormatter;
|
import android.text.BidiFormatter;
|
||||||
@@ -45,6 +48,7 @@ import com.android.settingslib.search.SearchIndexable;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.function.BooleanSupplier;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
@SearchIndexable
|
@SearchIndexable
|
||||||
@@ -158,24 +162,32 @@ public class NetworkDashboardFragment extends DashboardFragment implements
|
|||||||
private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
|
private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
|
||||||
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
|
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
|
||||||
private final TetherPreferenceController mTetherPreferenceController;
|
private final TetherPreferenceController mTetherPreferenceController;
|
||||||
|
private final BooleanSupplier mHasDataUsageActivity;
|
||||||
|
|
||||||
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
|
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
|
||||||
this(context, summaryLoader,
|
this(context, summaryLoader,
|
||||||
new WifiMasterSwitchPreferenceController(context, null),
|
new WifiMasterSwitchPreferenceController(context, null),
|
||||||
new MobileNetworkPreferenceController(context),
|
new MobileNetworkPreferenceController(context),
|
||||||
new TetherPreferenceController(context, null /* lifecycle */));
|
new TetherPreferenceController(context, null /* lifecycle */),
|
||||||
|
() -> {
|
||||||
|
final Intent intent = new Intent(ACTION_DATA_USAGE_SETTINGS);
|
||||||
|
final PackageManager pm = context.getPackageManager();
|
||||||
|
return intent.resolveActivity(pm) != null;
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
|
@VisibleForTesting(otherwise = VisibleForTesting.NONE)
|
||||||
SummaryProvider(Context context, SummaryLoader summaryLoader,
|
SummaryProvider(Context context, SummaryLoader summaryLoader,
|
||||||
WifiMasterSwitchPreferenceController wifiPreferenceController,
|
WifiMasterSwitchPreferenceController wifiPreferenceController,
|
||||||
MobileNetworkPreferenceController mobileNetworkPreferenceController,
|
MobileNetworkPreferenceController mobileNetworkPreferenceController,
|
||||||
TetherPreferenceController tetherPreferenceController) {
|
TetherPreferenceController tetherPreferenceController,
|
||||||
|
BooleanSupplier hasDataUsageActivity) {
|
||||||
mContext = context;
|
mContext = context;
|
||||||
mSummaryLoader = summaryLoader;
|
mSummaryLoader = summaryLoader;
|
||||||
mWifiPreferenceController = wifiPreferenceController;
|
mWifiPreferenceController = wifiPreferenceController;
|
||||||
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
|
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
|
||||||
mTetherPreferenceController = tetherPreferenceController;
|
mTetherPreferenceController = tetherPreferenceController;
|
||||||
|
mHasDataUsageActivity = hasDataUsageActivity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -198,7 +210,7 @@ public class NetworkDashboardFragment extends DashboardFragment implements
|
|||||||
if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
|
if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
|
||||||
summaries.add(mobileSummary);
|
summaries.add(mobileSummary);
|
||||||
}
|
}
|
||||||
if (!TextUtils.isEmpty(dataUsageSummary)) {
|
if (!TextUtils.isEmpty(dataUsageSummary) && mHasDataUsageActivity.getAsBoolean()) {
|
||||||
summaries.add(dataUsageSummary);
|
summaries.add(dataUsageSummary);
|
||||||
}
|
}
|
||||||
if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {
|
if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {
|
||||||
|
@@ -79,7 +79,7 @@ public class NetworkDashboardFragmentTest {
|
|||||||
final SummaryLoader.SummaryProvider provider =
|
final SummaryLoader.SummaryProvider provider =
|
||||||
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
|
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
|
||||||
wifiPreferenceController, mobileNetworkPreferenceController,
|
wifiPreferenceController, mobileNetworkPreferenceController,
|
||||||
tetherPreferenceController);
|
tetherPreferenceController, () -> true);
|
||||||
|
|
||||||
provider.setListening(false);
|
provider.setListening(false);
|
||||||
|
|
||||||
@@ -107,7 +107,7 @@ public class NetworkDashboardFragmentTest {
|
|||||||
final SummaryLoader.SummaryProvider provider =
|
final SummaryLoader.SummaryProvider provider =
|
||||||
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
|
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
|
||||||
wifiPreferenceController, mobileNetworkPreferenceController,
|
wifiPreferenceController, mobileNetworkPreferenceController,
|
||||||
tetherPreferenceController);
|
tetherPreferenceController, () -> true);
|
||||||
|
|
||||||
provider.setListening(false);
|
provider.setListening(false);
|
||||||
|
|
||||||
@@ -121,4 +121,34 @@ public class NetworkDashboardFragmentTest {
|
|||||||
|
|
||||||
verify(summaryLoader).setSummary(provider, "Wi\u2011Fi and data usage");
|
verify(summaryLoader).setSummary(provider, "Wi\u2011Fi and data usage");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void summaryProviderSetListening_noDataUsageActivity_shouldReturnNoDataUsageSummary() {
|
||||||
|
final WifiMasterSwitchPreferenceController wifiPreferenceController =
|
||||||
|
mock(WifiMasterSwitchPreferenceController.class);
|
||||||
|
final MobileNetworkPreferenceController mobileNetworkPreferenceController =
|
||||||
|
mock(MobileNetworkPreferenceController.class);
|
||||||
|
final TetherPreferenceController tetherPreferenceController =
|
||||||
|
mock(TetherPreferenceController.class);
|
||||||
|
|
||||||
|
final SummaryLoader summaryLoader = mock(SummaryLoader.class);
|
||||||
|
final SummaryLoader.SummaryProvider provider =
|
||||||
|
new NetworkDashboardFragment.SummaryProvider(mContext, summaryLoader,
|
||||||
|
wifiPreferenceController, mobileNetworkPreferenceController,
|
||||||
|
tetherPreferenceController, () -> false);
|
||||||
|
|
||||||
|
provider.setListening(false);
|
||||||
|
|
||||||
|
verifyZeroInteractions(summaryLoader);
|
||||||
|
|
||||||
|
when(wifiPreferenceController.isAvailable()).thenReturn(true);
|
||||||
|
when(mobileNetworkPreferenceController.isAvailable()).thenReturn(true);
|
||||||
|
when(tetherPreferenceController.isAvailable()).thenReturn(true);
|
||||||
|
|
||||||
|
provider.setListening(true);
|
||||||
|
|
||||||
|
verify(summaryLoader).setSummary(provider, "Wi\u2011Fi, mobile, and hotspot");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user