diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java index c14c01b3811..16455867086 100644 --- a/src/com/android/settings/datausage/AppDataUsage.java +++ b/src/com/android/settings/datausage/AppDataUsage.java @@ -34,6 +34,8 @@ import android.util.Log; 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.UidDetail; 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 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC String mPackageName; private CycleAdapter mCycleAdapter; + @Nullable private List mUsageData; @VisibleForTesting NetworkTemplate mTemplate; @@ -261,7 +265,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } @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 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } 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 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC @VisibleForTesting final LoaderManager.LoaderCallbacks> mUidDataCallbacks = - new LoaderManager.LoaderCallbacks>() { - @Override - public Loader> 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> 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> loader, - List 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> loader, + List 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> loader) { - } - }; + @Override + public void onLoaderReset(@NonNull Loader> loader) { + } + }; private final LoaderManager.LoaderCallbacks> mAppPrefCallbacks = - new LoaderManager.LoaderCallbacks>() { - @Override - public Loader> onCreateLoader(int i, Bundle bundle) { - return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager()); - } + new LoaderManager.LoaderCallbacks<>() { + @Override + @NonNull + public Loader> onCreateLoader(int i, Bundle bundle) { + return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager()); + } - @Override - public void onLoadFinished(Loader> loader, - ArraySet preferences) { - if (preferences != null && mAppList != null) { - for (Preference preference : preferences) { - mAppList.addPreference(preference); + @Override + public void onLoadFinished(@NonNull Loader> loader, + ArraySet preferences) { + if (preferences != null && mAppList != null) { + for (Preference preference : preferences) { + mAppList.addPreference(preference); + } } } - } - @Override - public void onLoaderReset(Loader> loader) { - } - }; + @Override + public void onLoaderReset(@NonNull Loader> 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 3c8c97034ac..5c527975acd 100644 --- a/src/com/android/settings/datausage/DataUsageList.java +++ b/src/com/android/settings/datausage/DataUsageList.java @@ -48,6 +48,8 @@ import android.widget.AdapterView.OnItemSelectedListener; 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 @@ public class DataUsageList extends DataUsageBaseFragment LoadingViewController mLoadingViewController; private ChartDataUsagePreference mChart; + + @Nullable private List mCycleData; + // Caches the cycles for startAppDataUsage usage, which need be cleared when resumed. private ArrayList mCycles; // Spinner will keep the selected cycle even after paused, this only keeps the displayed cycle, @@ -165,7 +170,7 @@ public class DataUsageList extends DataUsageBaseFragment } @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 @@ public class DataUsageList extends DataUsageBaseFragment } // generate cycle list based on policy and available history - mCycleAdapter.updateCycleList(mCycleData); + if (mCycleData != null) { + mCycleAdapter.updateCycleList(mCycleData); + } updateSelectedCycle(); } @@ -481,11 +488,9 @@ public class DataUsageList extends DataUsageBaseFragment } 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 @@ public class DataUsageList extends DataUsageBaseFragment 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 @@ public class DataUsageList extends DataUsageBaseFragment 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); } @@ -603,67 +603,70 @@ public class DataUsageList extends DataUsageBaseFragment @VisibleForTesting final LoaderCallbacks> mNetworkCycleDataCallbacks = - new LoaderCallbacks>() { - @Override - public Loader> onCreateLoader(int id, Bundle args) { - return NetworkCycleChartDataLoader.builder(getContext()) - .setNetworkTemplate(mTemplate) - .build(); - } + new LoaderCallbacks<>() { + @Override + @NonNull + public Loader> onCreateLoader(int id, Bundle args) { + return NetworkCycleChartDataLoader.builder(getContext()) + .setNetworkTemplate(mTemplate) + .build(); + } - @Override - public void onLoadFinished(Loader> loader, - List 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> loader, + List data) { + mLoadingViewController.showContent(false /* animate */); + mCycleData = data; + // calculate policy cycles based on available data + updatePolicy(); + mCycleSpinner.setVisibility(View.VISIBLE); + } - @Override - public void onLoaderReset(Loader> loader) { - mCycleData = null; - } - }; + @Override + public void onLoaderReset(@NonNull Loader> loader) { + mCycleData = null; + } + }; private final LoaderCallbacks mNetworkStatsDetailCallbacks = - new LoaderCallbacks() { - @Override - public Loader onCreateLoader(int id, Bundle args) { - return new NetworkStatsSummaryLoader.Builder(getContext()) - .setStartTime(mChart.getInspectStart()) - .setEndTime(mChart.getInspectEnd()) - .setNetworkTemplate(mTemplate) - .build(); - } - - @Override - public void onLoadFinished(Loader loader, NetworkStats data) { - final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy( - POLICY_REJECT_METERED_BACKGROUND); - bindStats(data, restrictedUids); - updateEmptyVisible(); - } - - @Override - public void onLoaderReset(Loader 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 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 loader, NetworkStats data) { + final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy( + POLICY_REJECT_METERED_BACKGROUND); + bindStats(data, restrictedUids); + updateEmptyVisible(); + } + + @Override + public void onLoaderReset(@NonNull Loader 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;