Add some null annotation for data usage code
Also do some clean up. Bug: 296357959 Test: manual - on DataUsageList page Change-Id: Id7548e1d58d946810c844b9559bb00d65306f441
This commit is contained in:
@@ -34,6 +34,8 @@ import android.util.Log;
|
|||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.AdapterView;
|
import android.widget.AdapterView;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.loader.app.LoaderManager;
|
import androidx.loader.app.LoaderManager;
|
||||||
import androidx.loader.content.Loader;
|
import androidx.loader.content.Loader;
|
||||||
@@ -57,6 +59,7 @@ import com.android.settingslib.net.UidDetail;
|
|||||||
import com.android.settingslib.net.UidDetailProvider;
|
import com.android.settingslib.net.UidDetailProvider;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceChangeListener,
|
public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceChangeListener,
|
||||||
@@ -97,6 +100,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
String mPackageName;
|
String mPackageName;
|
||||||
private CycleAdapter mCycleAdapter;
|
private CycleAdapter mCycleAdapter;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private List<NetworkCycleDataForUid> mUsageData;
|
private List<NetworkCycleDataForUid> mUsageData;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
NetworkTemplate mTemplate;
|
NetworkTemplate mTemplate;
|
||||||
@@ -261,7 +265,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
public boolean onPreferenceChange(@NonNull Preference preference, Object newValue) {
|
||||||
if (preference == mRestrictBackground) {
|
if (preference == mRestrictBackground) {
|
||||||
mDataSaverBackend.setIsDenylisted(mAppItem.key, mPackageName, !(Boolean) newValue);
|
mDataSaverBackend.setIsDenylisted(mAppItem.key, mPackageName, !(Boolean) newValue);
|
||||||
updatePrefs();
|
updatePrefs();
|
||||||
@@ -361,9 +365,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
}
|
}
|
||||||
String[] packages = mPackageManager.getPackagesForUid(uid);
|
String[] packages = mPackageManager.getPackagesForUid(uid);
|
||||||
if (packages != null) {
|
if (packages != null) {
|
||||||
for (int i = 0; i < packages.length; i++) {
|
Collections.addAll(mPackages, packages);
|
||||||
mPackages.add(packages[i]);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -448,11 +450,12 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks =
|
final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks =
|
||||||
new LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>() {
|
new LoaderManager.LoaderCallbacks<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@NonNull
|
||||||
public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) {
|
public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) {
|
||||||
final NetworkCycleDataForUidLoader.Builder builder
|
final NetworkCycleDataForUidLoader.Builder<?> builder =
|
||||||
= NetworkCycleDataForUidLoader.builder(mContext);
|
NetworkCycleDataForUidLoader.builder(mContext);
|
||||||
builder.setRetrieveDetail(true)
|
builder.setRetrieveDetail(true)
|
||||||
.setNetworkTemplate(mTemplate);
|
.setNetworkTemplate(mTemplate);
|
||||||
for (int i = 0; i < mAppItem.uids.size(); i++) {
|
for (int i = 0; i < mAppItem.uids.size(); i++) {
|
||||||
@@ -465,7 +468,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<List<NetworkCycleDataForUid>> loader,
|
public void onLoadFinished(@NonNull Loader<List<NetworkCycleDataForUid>> loader,
|
||||||
List<NetworkCycleDataForUid> data) {
|
List<NetworkCycleDataForUid> data) {
|
||||||
mUsageData = data;
|
mUsageData = data;
|
||||||
mCycleAdapter.updateCycleList(data);
|
mCycleAdapter.updateCycleList(data);
|
||||||
@@ -490,19 +493,20 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<List<NetworkCycleDataForUid>> loader) {
|
public void onLoaderReset(@NonNull Loader<List<NetworkCycleDataForUid>> loader) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final LoaderManager.LoaderCallbacks<ArraySet<Preference>> mAppPrefCallbacks =
|
private final LoaderManager.LoaderCallbacks<ArraySet<Preference>> mAppPrefCallbacks =
|
||||||
new LoaderManager.LoaderCallbacks<ArraySet<Preference>>() {
|
new LoaderManager.LoaderCallbacks<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@NonNull
|
||||||
public Loader<ArraySet<Preference>> onCreateLoader(int i, Bundle bundle) {
|
public Loader<ArraySet<Preference>> onCreateLoader(int i, Bundle bundle) {
|
||||||
return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager());
|
return new AppPrefLoader(getPrefContext(), mPackages, getPackageManager());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<ArraySet<Preference>> loader,
|
public void onLoadFinished(@NonNull Loader<ArraySet<Preference>> loader,
|
||||||
ArraySet<Preference> preferences) {
|
ArraySet<Preference> preferences) {
|
||||||
if (preferences != null && mAppList != null) {
|
if (preferences != null && mAppList != null) {
|
||||||
for (Preference preference : preferences) {
|
for (Preference preference : preferences) {
|
||||||
@@ -512,7 +516,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<ArraySet<Preference>> loader) {
|
public void onLoaderReset(@NonNull Loader<ArraySet<Preference>> loader) {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@@ -48,6 +48,8 @@ import android.widget.AdapterView.OnItemSelectedListener;
|
|||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.Spinner;
|
import android.widget.Spinner;
|
||||||
|
|
||||||
|
import androidx.annotation.NonNull;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
import androidx.annotation.VisibleForTesting;
|
import androidx.annotation.VisibleForTesting;
|
||||||
import androidx.lifecycle.Lifecycle;
|
import androidx.lifecycle.Lifecycle;
|
||||||
import androidx.loader.app.LoaderManager.LoaderCallbacks;
|
import androidx.loader.app.LoaderManager.LoaderCallbacks;
|
||||||
@@ -118,7 +120,10 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
LoadingViewController mLoadingViewController;
|
LoadingViewController mLoadingViewController;
|
||||||
|
|
||||||
private ChartDataUsagePreference mChart;
|
private ChartDataUsagePreference mChart;
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private List<NetworkCycleChartData> mCycleData;
|
private List<NetworkCycleChartData> mCycleData;
|
||||||
|
|
||||||
// Caches the cycles for startAppDataUsage usage, which need be cleared when resumed.
|
// Caches the cycles for startAppDataUsage usage, which need be cleared when resumed.
|
||||||
private ArrayList<Long> mCycles;
|
private ArrayList<Long> mCycles;
|
||||||
// Spinner will keep the selected cycle even after paused, this only keeps the displayed cycle,
|
// 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
|
@Override
|
||||||
public void onViewCreated(View v, Bundle savedInstanceState) {
|
public void onViewCreated(@NonNull View v, Bundle savedInstanceState) {
|
||||||
super.onViewCreated(v, savedInstanceState);
|
super.onViewCreated(v, savedInstanceState);
|
||||||
|
|
||||||
mHeader = setPinnedHeaderView(R.layout.apps_filter_spinner);
|
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
|
// generate cycle list based on policy and available history
|
||||||
|
if (mCycleData != null) {
|
||||||
mCycleAdapter.updateCycleList(mCycleData);
|
mCycleAdapter.updateCycleList(mCycleData);
|
||||||
|
}
|
||||||
updateSelectedCycle();
|
updateSelectedCycle();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -481,11 +488,9 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
}
|
}
|
||||||
stats.close();
|
stats.close();
|
||||||
|
|
||||||
final int restrictedUidsMax = restrictedUids.length;
|
for (final int uid : restrictedUids) {
|
||||||
for (int i = 0; i < restrictedUidsMax; ++i) {
|
|
||||||
final int uid = restrictedUids[i];
|
|
||||||
// Only splice in restricted state for current user or managed users
|
// 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;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -505,14 +510,13 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
R.array.datausage_hiding_carrier_service_package_names));
|
R.array.datausage_hiding_carrier_service_package_names));
|
||||||
// When there is no specified SubscriptionInfo, Wi-Fi data usage will be displayed.
|
// 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.
|
// In this case, the carrier service package also needs to be hidden.
|
||||||
boolean shouldHidePackageName = mSubscriptionInfoEntity != null
|
boolean shouldHidePackageName = mSubscriptionInfoEntity == null
|
||||||
? Arrays.stream(getContext().getResources().getIntArray(
|
|| Arrays.stream(getContext().getResources().getIntArray(
|
||||||
R.array.datausage_hiding_carrier_service_carrier_id))
|
R.array.datausage_hiding_carrier_service_carrier_id))
|
||||||
.anyMatch(carrierId -> (carrierId == mSubscriptionInfoEntity.carrierId))
|
.anyMatch(carrierId -> (carrierId == mSubscriptionInfoEntity.carrierId));
|
||||||
: true;
|
|
||||||
|
|
||||||
for (int i = 0; i < items.size(); i++) {
|
for (var item : items) {
|
||||||
UidDetail detail = mUidDetailProvider.getUidDetail(items.get(i).key, true);
|
UidDetail detail = mUidDetailProvider.getUidDetail(item.key, true);
|
||||||
// Do not show carrier service package in data usage list if it should be hidden for
|
// Do not show carrier service package in data usage list if it should be hidden for
|
||||||
// the carrier.
|
// the carrier.
|
||||||
if (detail != null && shouldHidePackageName && packageNames.contains(
|
if (detail != null && shouldHidePackageName && packageNames.contains(
|
||||||
@@ -520,17 +524,13 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
continue;
|
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(),
|
final AppDataUsagePreference preference = new AppDataUsagePreference(getContext(),
|
||||||
items.get(i), percentTotal, mUidDetailProvider);
|
item, percentTotal, mUidDetailProvider);
|
||||||
preference.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
preference.setOnPreferenceClickListener(p -> {
|
||||||
@Override
|
AppDataUsagePreference pref = (AppDataUsagePreference) p;
|
||||||
public boolean onPreferenceClick(Preference preference) {
|
startAppDataUsage(pref.getItem());
|
||||||
AppDataUsagePreference pref = (AppDataUsagePreference) preference;
|
|
||||||
AppItem item = pref.getItem();
|
|
||||||
startAppDataUsage(item);
|
|
||||||
return true;
|
return true;
|
||||||
}
|
|
||||||
});
|
});
|
||||||
mApps.addPreference(preference);
|
mApps.addPreference(preference);
|
||||||
}
|
}
|
||||||
@@ -603,8 +603,9 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
final LoaderCallbacks<List<NetworkCycleChartData>> mNetworkCycleDataCallbacks =
|
final LoaderCallbacks<List<NetworkCycleChartData>> mNetworkCycleDataCallbacks =
|
||||||
new LoaderCallbacks<List<NetworkCycleChartData>>() {
|
new LoaderCallbacks<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@NonNull
|
||||||
public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) {
|
public Loader<List<NetworkCycleChartData>> onCreateLoader(int id, Bundle args) {
|
||||||
return NetworkCycleChartDataLoader.builder(getContext())
|
return NetworkCycleChartDataLoader.builder(getContext())
|
||||||
.setNetworkTemplate(mTemplate)
|
.setNetworkTemplate(mTemplate)
|
||||||
@@ -612,7 +613,7 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<List<NetworkCycleChartData>> loader,
|
public void onLoadFinished(@NonNull Loader<List<NetworkCycleChartData>> loader,
|
||||||
List<NetworkCycleChartData> data) {
|
List<NetworkCycleChartData> data) {
|
||||||
mLoadingViewController.showContent(false /* animate */);
|
mLoadingViewController.showContent(false /* animate */);
|
||||||
mCycleData = data;
|
mCycleData = data;
|
||||||
@@ -622,14 +623,15 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<List<NetworkCycleChartData>> loader) {
|
public void onLoaderReset(@NonNull Loader<List<NetworkCycleChartData>> loader) {
|
||||||
mCycleData = null;
|
mCycleData = null;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
private final LoaderCallbacks<NetworkStats> mNetworkStatsDetailCallbacks =
|
private final LoaderCallbacks<NetworkStats> mNetworkStatsDetailCallbacks =
|
||||||
new LoaderCallbacks<NetworkStats>() {
|
new LoaderCallbacks<>() {
|
||||||
@Override
|
@Override
|
||||||
|
@NonNull
|
||||||
public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
|
public Loader<NetworkStats> onCreateLoader(int id, Bundle args) {
|
||||||
return new NetworkStatsSummaryLoader.Builder(getContext())
|
return new NetworkStatsSummaryLoader.Builder(getContext())
|
||||||
.setStartTime(mChart.getInspectStart())
|
.setStartTime(mChart.getInspectStart())
|
||||||
@@ -639,7 +641,8 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoadFinished(Loader<NetworkStats> loader, NetworkStats data) {
|
public void onLoadFinished(
|
||||||
|
@NonNull Loader<NetworkStats> loader, NetworkStats data) {
|
||||||
final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy(
|
final int[] restrictedUids = services.mPolicyManager.getUidsWithPolicy(
|
||||||
POLICY_REJECT_METERED_BACKGROUND);
|
POLICY_REJECT_METERED_BACKGROUND);
|
||||||
bindStats(data, restrictedUids);
|
bindStats(data, restrictedUids);
|
||||||
@@ -647,14 +650,14 @@ public class DataUsageList extends DataUsageBaseFragment
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onLoaderReset(Loader<NetworkStats> loader) {
|
public void onLoaderReset(@NonNull Loader<NetworkStats> loader) {
|
||||||
bindStats(null, new int[0]);
|
bindStats(null, new int[0]);
|
||||||
updateEmptyVisible();
|
updateEmptyVisible();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateEmptyVisible() {
|
private void updateEmptyVisible() {
|
||||||
if ((mApps.getPreferenceCount() != 0) !=
|
if ((mApps.getPreferenceCount() != 0)
|
||||||
(getPreferenceScreen().getPreferenceCount() != 0)) {
|
!= (getPreferenceScreen().getPreferenceCount() != 0)) {
|
||||||
if (mApps.getPreferenceCount() != 0) {
|
if (mApps.getPreferenceCount() != 0) {
|
||||||
getPreferenceScreen().addPreference(mUsageAmount);
|
getPreferenceScreen().addPreference(mUsageAmount);
|
||||||
getPreferenceScreen().addPreference(mApps);
|
getPreferenceScreen().addPreference(mApps);
|
||||||
|
Reference in New Issue
Block a user