Merge "[Terms of Address] Create a feature flag for it" into main
diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java
index c14c01b..1645586 100644
--- a/src/com/android/settings/datausage/AppDataUsage.java
+++ b/src/com/android/settings/datausage/AppDataUsage.java
@@ -34,6 +34,8 @@
import android.view.View;
import android.widget.AdapterView;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.loader.app.LoaderManager;
import androidx.loader.content.Loader;
@@ -57,6 +59,7 @@
import com.android.settingslib.net.UidDetailProvider;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.List;
public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceChangeListener,
@@ -97,6 +100,7 @@
String mPackageName;
private CycleAdapter mCycleAdapter;
+ @Nullable
private List<NetworkCycleDataForUid> mUsageData;
@VisibleForTesting
NetworkTemplate mTemplate;
@@ -261,7 +265,7 @@
}
@Override
- public boolean onPreferenceChange(Preference preference, Object newValue) {
+ public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
if (preference == mRestrictBackground) {
mDataSaverBackend.setIsDenylisted(mAppItem.key, mPackageName, !(Boolean) newValue);
updatePrefs();
@@ -361,9 +365,7 @@
}
String[] packages = mPackageManager.getPackagesForUid(uid);
if (packages != null) {
- for (int i = 0; i < packages.length; i++) {
- mPackages.add(packages[i]);
- }
+ Collections.addAll(mPackages, packages);
}
}
@@ -448,73 +450,75 @@
@VisibleForTesting
final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks =
- new LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>() {
- @Override
- public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) {
- final NetworkCycleDataForUidLoader.Builder builder
- = NetworkCycleDataForUidLoader.builder(mContext);
- builder.setRetrieveDetail(true)
- .setNetworkTemplate(mTemplate);
- for (int i = 0; i < mAppItem.uids.size(); i++) {
- builder.addUid(mAppItem.uids.keyAt(i));
+ new LoaderManager.LoaderCallbacks<>() {
+ @Override
+ @NonNull
+ public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) {
+ final NetworkCycleDataForUidLoader.Builder<?> builder =
+ NetworkCycleDataForUidLoader.builder(mContext);
+ builder.setRetrieveDetail(true)
+ .setNetworkTemplate(mTemplate);
+ for (int i = 0; i < mAppItem.uids.size(); i++) {
+ builder.addUid(mAppItem.uids.keyAt(i));
+ }
+ if (mCycles != null) {
+ builder.setCycles(mCycles);
+ }
+ return builder.build();
}
- if (mCycles != null) {
- builder.setCycles(mCycles);
- }
- return builder.build();
- }
- @Override
- public void onLoadFinished(Loader<List<NetworkCycleDataForUid>> loader,
- List<NetworkCycleDataForUid> data) {
- mUsageData = data;
- mCycleAdapter.updateCycleList(data);
- if (mSelectedCycle > 0L) {
- final int numCycles = data.size();
- int position = 0;
- for (int i = 0; i < numCycles; i++) {
- final NetworkCycleDataForUid cycleData = data.get(i);
- if (cycleData.getEndTime() == mSelectedCycle) {
- position = i;
- break;
+ @Override
+ public void onLoadFinished(@NonNull Loader<List<NetworkCycleDataForUid>> loader,
+ List<NetworkCycleDataForUid> data) {
+ mUsageData = data;
+ mCycleAdapter.updateCycleList(data);
+ if (mSelectedCycle > 0L) {
+ final int numCycles = data.size();
+ int position = 0;
+ for (int i = 0; i < numCycles; i++) {
+ final NetworkCycleDataForUid cycleData = data.get(i);
+ if (cycleData.getEndTime() == mSelectedCycle) {
+ position = i;
+ break;
+ }
}
+ if (position > 0) {
+ mCycle.setSelection(position);
+ }
+ bindData(position);
+ } else {
+ bindData(0 /* position */);
}
- if (position > 0) {
- mCycle.setSelection(position);
- }
- bindData(position);
- } else {
- bindData(0 /* position */);
+ mIsLoading = false;
}
- mIsLoading = false;
- }
- @Override
- public void onLoaderReset(Loader<List<NetworkCycleDataForUid>> loader) {
- }
- };
+ @Override
+ public void onLoaderReset(@NonNull Loader<List<NetworkCycleDataForUid>> loader) {
+ }
+ };
private final LoaderManager.LoaderCallbacks<ArraySet<Preference>> mAppPrefCallbacks =
- new LoaderManager.LoaderCallbacks<ArraySet<Preference>>() {
- @Override
- public Loader<ArraySet<Preference>> onCreateLoader(int i, Bundle bundle) {
- return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager());
- }
+ new LoaderManager.LoaderCallbacks<>() {
+ @Override
+ @NonNull
+ public Loader<ArraySet<Preference>> onCreateLoader(int i, Bundle bundle) {
+ return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager());
+ }
- @Override
- public void onLoadFinished(Loader<ArraySet<Preference>> loader,
- ArraySet<Preference> preferences) {
- if (preferences != null && mAppList != null) {
- for (Preference preference : preferences) {
- mAppList.addPreference(preference);
+ @Override
+ public void onLoadFinished(@NonNull Loader<ArraySet<Preference>> loader,
+ ArraySet<Preference> preferences) {
+ if (preferences != null && mAppList != null) {
+ for (Preference preference : preferences) {
+ mAppList.addPreference(preference);
+ }
}
}
- }
- @Override
- public void onLoaderReset(Loader<ArraySet<Preference>> loader) {
- }
- };
+ @Override
+ public void onLoaderReset(@NonNull Loader<ArraySet<Preference>> loader) {
+ }
+ };
@Override
public void onDataSaverChanged(boolean isDataSaving) {
diff --git a/src/com/android/settings/datausage/DataUsageList.java b/src/com/android/settings/datausage/DataUsageList.java
index ee2a1ad..5c52797 100644
--- a/src/com/android/settings/datausage/DataUsageList.java
+++ b/src/com/android/settings/datausage/DataUsageList.java
@@ -48,6 +48,8 @@
import android.widget.ImageView;
import android.widget.Spinner;
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.lifecycle.Lifecycle;
import androidx.loader.app.LoaderManager.LoaderCallbacks;
@@ -118,7 +120,10 @@
LoadingViewController mLoadingViewController;
private ChartDataUsagePreference mChart;
+
+ @Nullable
private List<NetworkCycleChartData> mCycleData;
+
// Caches the cycles for startAppDataUsage usage, which need be cleared when resumed.
private ArrayList<Long> mCycles;
// Spinner will keep the selected cycle even after paused, this only keeps the displayed cycle,
@@ -165,7 +170,7 @@
}
@Override
- public void onViewCreated(View v, Bundle savedInstanceState) {
+ public void onViewCreated(@NonNull View v, Bundle savedInstanceState) {
super.onViewCreated(v, savedInstanceState);
mHeader = setPinnedHeaderView(R.layout.apps_filter_spinner);
@@ -355,7 +360,9 @@
}
// generate cycle list based on policy and available history
- mCycleAdapter.updateCycleList(mCycleData);
+ if (mCycleData != null) {
+ mCycleAdapter.updateCycleList(mCycleData);
+ }
updateSelectedCycle();
}
@@ -481,11 +488,9 @@
}
stats.close();
- final int restrictedUidsMax = restrictedUids.length;
- for (int i = 0; i < restrictedUidsMax; ++i) {
- final int uid = restrictedUids[i];
+ for (final int uid : restrictedUids) {
// Only splice in restricted state for current user or managed users
- if (!profiles.contains(new UserHandle(UserHandle.getUserId(uid)))) {
+ if (!profiles.contains(UserHandle.getUserHandleForUid(uid))) {
continue;
}
@@ -505,14 +510,13 @@
R.array.datausage_hiding_carrier_service_package_names));
// When there is no specified SubscriptionInfo, Wi-Fi data usage will be displayed.
// In this case, the carrier service package also needs to be hidden.
- boolean shouldHidePackageName = mSubscriptionInfoEntity != null
- ? Arrays.stream(getContext().getResources().getIntArray(
+ boolean shouldHidePackageName = mSubscriptionInfoEntity == null
+ || Arrays.stream(getContext().getResources().getIntArray(
R.array.datausage_hiding_carrier_service_carrier_id))
- .anyMatch(carrierId -> (carrierId == mSubscriptionInfoEntity.carrierId))
- : true;
+ .anyMatch(carrierId -> (carrierId == mSubscriptionInfoEntity.carrierId));
- for (int i = 0; i < items.size(); i++) {
- UidDetail detail = mUidDetailProvider.getUidDetail(items.get(i).key, true);
+ for (var item : items) {
+ UidDetail detail = mUidDetailProvider.getUidDetail(item.key, true);
// Do not show carrier service package in data usage list if it should be hidden for
// the carrier.
if (detail != null && shouldHidePackageName && packageNames.contains(
@@ -520,17 +524,13 @@
continue;
}
- final int percentTotal = largest != 0 ? (int) (items.get(i).total * 100 / largest) : 0;
+ final int percentTotal = largest != 0 ? (int) (item.total * 100 / largest) : 0;
final AppDataUsagePreference preference = new AppDataUsagePreference(getContext(),
- items.get(i), percentTotal, mUidDetailProvider);
- preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
- @Override
- public boolean onPreferenceClick(Preference preference) {
- AppDataUsagePreference pref = (AppDataUsagePreference) preference;
- AppItem item = pref.getItem();
- startAppDataUsage(item);
- return true;
- }
+ item, percentTotal, mUidDetailProvider);
+ preference.setOnPreferenceClickListener(p -> {
+ AppDataUsagePreference pref = (AppDataUsagePreference) p;
+ startAppDataUsage(pref.getItem());
+ return true;
});
mApps.addPreference(preference);
}
@@ -538,6 +538,9 @@
@VisibleForTesting
void startAppDataUsage(AppItem item) {
+ if (mCycleData == null) {
+ return;
+ }
final Bundle args = new Bundle();
args.putParcelable(AppDataUsage.ARG_APP_ITEM, item);
args.putParcelable(AppDataUsage.ARG_NETWORK_TEMPLATE, mTemplate);
@@ -600,67 +603,70 @@
@VisibleForTesting
final LoaderCallbacks<List<NetworkCycleChartData>> mNetworkCycleDataCallbacks =
- new LoaderCallbacks<List<NetworkCycleChartData>>() {
- @Override
- public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) {
- return NetworkCycleChartDataLoader.builder(getContext())
- .setNetworkTemplate(mTemplate)
- .build();
- }
+ new LoaderCallbacks<>() {
+ @Override
+ @NonNull
+ public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) {
+ return NetworkCycleChartDataLoader.builder(getContext())
+ .setNetworkTemplate(mTemplate)
+ .build();
+ }
- @Override
- public void onLoadFinished(Loader<List<NetworkCycleChartData>> loader,
- List<NetworkCycleChartData> data) {
- mLoadingViewController.showContent(false /* animate */);
- mCycleData = data;
- // calculate policy cycles based on available data
- updatePolicy();
- mCycleSpinner.setVisibility(View.VISIBLE);
- }
+ @Override
+ public void onLoadFinished(@NonNull Loader<List<NetworkCycleChartData>> loader,
+ List<NetworkCycleChartData> data) {
+ mLoadingViewController.showContent(false /* animate */);
+ mCycleData = data;
+ // calculate policy cycles based on available data
+ updatePolicy();
+ mCycleSpinner.setVisibility(View.VISIBLE);
+ }
- @Override
- public void onLoaderReset(Loader<List<NetworkCycleChartData>> loader) {
- mCycleData = null;
- }
- };
+ @Override
+ public void onLoaderReset(@NonNull Loader<List<NetworkCycleChartData>> loader) {
+ mCycleData = null;
+ }
+ };
private final LoaderCallbacks<NetworkStats> mNetworkStatsDetailCallbacks =
- new LoaderCallbacks<NetworkStats>() {
- @Override
- public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
- return new NetworkStatsSummaryLoader.Builder(getContext())
- .setStartTime(mChart.getInspectStart())
- .setEndTime(mChart.getInspectEnd())
- .setNetworkTemplate(mTemplate)
- .build();
- }
-
- @Override
- public void onLoadFinished(Loader<NetworkStats> loader, NetworkStats data) {
- final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy(
- POLICY_REJECT_METERED_BACKGROUND);
- bindStats(data, restrictedUids);
- updateEmptyVisible();
- }
-
- @Override
- public void onLoaderReset(Loader<NetworkStats> loader) {
- bindStats(null, new int[0]);
- updateEmptyVisible();
- }
-
- private void updateEmptyVisible() {
- if ((mApps.getPreferenceCount() != 0) !=
- (getPreferenceScreen().getPreferenceCount() != 0)) {
- if (mApps.getPreferenceCount() != 0) {
- getPreferenceScreen().addPreference(mUsageAmount);
- getPreferenceScreen().addPreference(mApps);
- } else {
- getPreferenceScreen().removeAll();
+ new LoaderCallbacks<>() {
+ @Override
+ @NonNull
+ public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
+ return new NetworkStatsSummaryLoader.Builder(getContext())
+ .setStartTime(mChart.getInspectStart())
+ .setEndTime(mChart.getInspectEnd())
+ .setNetworkTemplate(mTemplate)
+ .build();
}
- }
- }
- };
+
+ @Override
+ public void onLoadFinished(
+ @NonNull Loader<NetworkStats> loader, NetworkStats data) {
+ final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy(
+ POLICY_REJECT_METERED_BACKGROUND);
+ bindStats(data, restrictedUids);
+ updateEmptyVisible();
+ }
+
+ @Override
+ public void onLoaderReset(@NonNull Loader<NetworkStats> loader) {
+ bindStats(null, new int[0]);
+ updateEmptyVisible();
+ }
+
+ private void updateEmptyVisible() {
+ if ((mApps.getPreferenceCount() != 0)
+ != (getPreferenceScreen().getPreferenceCount() != 0)) {
+ if (mApps.getPreferenceCount() != 0) {
+ getPreferenceScreen().addPreference(mUsageAmount);
+ getPreferenceScreen().addPreference(mApps);
+ } else {
+ getPreferenceScreen().removeAll();
+ }
+ }
+ }
+ };
private static boolean isGuestUser(Context context) {
if (context == null) return false;