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:
Ben Lin
2018-09-05 00:57:41 -07:00
parent 7f050853c1
commit 3210396de9
2 changed files with 47 additions and 5 deletions

View File

@@ -15,12 +15,15 @@
*/
package com.android.settings.network;
import static android.provider.Settings.ACTION_DATA_USAGE_SETTINGS;
import static com.android.settings.network.MobilePlanPreferenceController
.MANAGE_MOBILE_PLAN_DIALOG_ID;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.icu.text.ListFormatter;
import android.provider.SearchIndexableResource;
import android.text.BidiFormatter;
@@ -45,6 +48,7 @@ import com.android.settingslib.search.SearchIndexable;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.function.BooleanSupplier;
import java.util.List;
@SearchIndexable
@@ -158,24 +162,32 @@ public class NetworkDashboardFragment extends DashboardFragment implements
private final WifiMasterSwitchPreferenceController mWifiPreferenceController;
private final MobileNetworkPreferenceController mMobileNetworkPreferenceController;
private final TetherPreferenceController mTetherPreferenceController;
private final BooleanSupplier mHasDataUsageActivity;
public SummaryProvider(Context context, SummaryLoader summaryLoader) {
this(context, summaryLoader,
new WifiMasterSwitchPreferenceController(context, null),
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)
SummaryProvider(Context context, SummaryLoader summaryLoader,
WifiMasterSwitchPreferenceController wifiPreferenceController,
MobileNetworkPreferenceController mobileNetworkPreferenceController,
TetherPreferenceController tetherPreferenceController) {
TetherPreferenceController tetherPreferenceController,
BooleanSupplier hasDataUsageActivity) {
mContext = context;
mSummaryLoader = summaryLoader;
mWifiPreferenceController = wifiPreferenceController;
mMobileNetworkPreferenceController = mobileNetworkPreferenceController;
mTetherPreferenceController = tetherPreferenceController;
mHasDataUsageActivity = hasDataUsageActivity;
}
@@ -198,7 +210,7 @@ public class NetworkDashboardFragment extends DashboardFragment implements
if (mMobileNetworkPreferenceController.isAvailable() && !TextUtils.isEmpty(mobileSummary)) {
summaries.add(mobileSummary);
}
if (!TextUtils.isEmpty(dataUsageSummary)) {
if (!TextUtils.isEmpty(dataUsageSummary) && mHasDataUsageActivity.getAsBoolean()) {
summaries.add(dataUsageSummary);
}
if (mTetherPreferenceController.isAvailable() && !TextUtils.isEmpty(hotspotSummary)) {