Loading src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +1 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { final NetworkTemplate template = getTemplate(mContext); return NetworkCycleDataForUidLoader.builder(mContext) .setUid(mParent.getAppEntry().info.uid) .addUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) .setSubscriberId(template.getSubscriberId()) Loading src/com/android/settings/datausage/AppDataUsage.java +24 −16 Original line number Diff line number Diff line Loading @@ -94,10 +94,12 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private SpinnerPreference mCycle; private RestrictedSwitchPreference mUnrestrictedData; private DataSaverBackend mDataSaverBackend; private Context mContext; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mContext = getContext(); mPackageManager = getPackageManager(); final Bundle args = getArguments(); Loading @@ -105,9 +107,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mTemplate = (args != null) ? (NetworkTemplate) args.getParcelable(ARG_NETWORK_TEMPLATE) : null; if (mTemplate == null) { Context context = getContext(); mTemplate = DataUsageUtils.getDefaultTemplate(context, DataUsageUtils.getDefaultSubscriptionId(context)); mTemplate = DataUsageUtils.getDefaultTemplate(mContext, DataUsageUtils.getDefaultSubscriptionId(mContext)); } if (mAppItem == null) { int uid = (args != null) ? args.getInt(AppInfoBase.ARG_PACKAGE_UID, -1) Loading @@ -131,7 +132,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mBackgroundUsage = findPreference(KEY_BACKGROUND_USAGE); mCycle = (SpinnerPreference) findPreference(KEY_CYCLE); mCycleAdapter = new CycleAdapter(getContext(), mCycle, mCycleListener); mCycleAdapter = new CycleAdapter(mContext, mCycle, mCycleListener); if (mAppItem.key > 0) { if (mPackages.size() != 0) { Loading @@ -155,7 +156,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC KEY_UNRESTRICTED_DATA); mUnrestrictedData.setOnPreferenceChangeListener(this); } mDataSaverBackend = new DataSaverBackend(getContext()); mDataSaverBackend = new DataSaverBackend(mContext); mAppSettings = findPreference(KEY_APP_SETTINGS); mAppSettingsIntent = new Intent(Intent.ACTION_MANAGE_NETWORK_USAGE); Loading Loading @@ -256,7 +257,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private void updatePrefs(boolean restrictBackground, boolean unrestrictData) { final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted( getContext(), mPackageName, UserHandle.getUserId(mAppItem.key)); mContext, mPackageName, UserHandle.getUserId(mAppItem.key)); if (mRestrictBackground != null) { mRestrictBackground.setChecked(!restrictBackground); mRestrictBackground.setDisabledByAdmin(admin); Loading Loading @@ -294,11 +295,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC foregroundBytes = data.getForegroudUsage(); } final long totalBytes = backgroundBytes + foregroundBytes; final Context context = getContext(); mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(context, totalBytes)); mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, totalBytes)); mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, foregroundBytes)); mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, backgroundBytes)); } private boolean getAppRestrictBackground() { Loading Loading @@ -364,16 +364,24 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } }; private final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks = @VisibleForTesting final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks = new LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>() { @Override public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { return NetworkCycleDataForUidLoader.builder(getContext()) .setUid(mAppItem.key) .setRetrieveDetail(true) final NetworkCycleDataForUidLoader.Builder builder = NetworkCycleDataForUidLoader.builder(mContext); builder.setRetrieveDetail(true) .setNetworkTemplate(mTemplate) .setSubscriberId(mTemplate.getSubscriberId()) .build(); .setSubscriberId(mTemplate.getSubscriberId()); if (mAppItem.category == AppItem.CATEGORY_USER) { for (int i = 0; i < mAppItem.uids.size(); i++) { builder.addUid(mAppItem.uids.keyAt(i)); } } else { builder.addUid(mAppItem.key); } return builder.build(); } @Override Loading tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +56 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.datausage; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; Loading @@ -31,7 +33,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; import android.net.NetworkPolicyManager; import android.net.NetworkTemplate; import android.os.Bundle; import android.text.format.DateUtils; import android.util.ArraySet; import android.view.View; Loading @@ -47,6 +51,7 @@ import com.android.settingslib.AppItem; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.net.NetworkCycleDataForUid; import com.android.settingslib.net.NetworkCycleDataForUidLoader; import org.junit.After; import org.junit.Before; Loading Loading @@ -188,7 +193,7 @@ public class AppDataUsageTest { ReflectionHelpers.setField(mFragment, "mBackgroundUsage", preference); ReflectionHelpers.setField(mFragment, "mForegroundUsage", preference); ReflectionHelpers.setField(mFragment, "mTotalUsage", preference); doReturn(RuntimeEnvironment.application).when(mFragment).getContext(); ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application); mFragment.bindData(0 /* position */); Loading @@ -199,7 +204,7 @@ public class AppDataUsageTest { public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() { mFragment = spy(new AppDataUsage()); final Context context = RuntimeEnvironment.application; doReturn(context).when(mFragment).getContext(); ReflectionHelpers.setField(mFragment, "mContext", context); final long backgroundBytes = 1234L; final long foregroundBytes = 5678L; final List<NetworkCycleDataForUid> appUsage = new ArrayList<>(); Loading @@ -223,4 +228,53 @@ public class AppDataUsageTest { verify(backgroundPref).setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); verify(foregroundPref).setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); } @Test public void onCreateLoader_categoryApp_shouldQueryDataUsageUsingAppKey() { mFragment = new AppDataUsage(); final Context context = RuntimeEnvironment.application; final int testUid = 123123; final AppItem appItem = new AppItem(testUid); appItem.category = AppItem.CATEGORY_APP; ReflectionHelpers.setField(mFragment, "mContext", context); ReflectionHelpers.setField(mFragment, "mAppItem", appItem); ReflectionHelpers.setField(mFragment, "mTemplate", NetworkTemplate.buildTemplateWifiWildcard()); final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); final List<Integer> uids = loader.getUids(); assertThat(uids).hasSize(1); assertThat(uids.get(0)).isEqualTo(testUid); } @Test public void onCreateLoader_categoryUser_shouldQueryDataUsageUsingAssociatedUids() { mFragment = new AppDataUsage(); final Context context = RuntimeEnvironment.application; final int testUserId = 11; final AppItem appItem = new AppItem(testUserId); appItem.category = AppItem.CATEGORY_USER; appItem.addUid(123); appItem.addUid(456); appItem.addUid(789); ReflectionHelpers.setField(mFragment, "mContext", context); ReflectionHelpers.setField(mFragment, "mAppItem", appItem); ReflectionHelpers.setField(mFragment, "mTemplate", NetworkTemplate.buildTemplateWifiWildcard()); final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); final List<Integer> uids = loader.getUids(); assertThat(uids).hasSize(3); assertThat(uids.get(0)).isEqualTo(123); assertThat(uids.get(1)).isEqualTo(456); assertThat(uids.get(2)).isEqualTo(789); } } Loading
src/com/android/settings/applications/appinfo/AppDataUsagePreferenceController.java +1 −1 Original line number Diff line number Diff line Loading @@ -89,7 +89,7 @@ public class AppDataUsagePreferenceController extends AppInfoPreferenceControlle public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { final NetworkTemplate template = getTemplate(mContext); return NetworkCycleDataForUidLoader.builder(mContext) .setUid(mParent.getAppEntry().info.uid) .addUid(mParent.getAppEntry().info.uid) .setRetrieveDetail(false) .setNetworkTemplate(template) .setSubscriberId(template.getSubscriberId()) Loading
src/com/android/settings/datausage/AppDataUsage.java +24 −16 Original line number Diff line number Diff line Loading @@ -94,10 +94,12 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private SpinnerPreference mCycle; private RestrictedSwitchPreference mUnrestrictedData; private DataSaverBackend mDataSaverBackend; private Context mContext; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); mContext = getContext(); mPackageManager = getPackageManager(); final Bundle args = getArguments(); Loading @@ -105,9 +107,8 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mTemplate = (args != null) ? (NetworkTemplate) args.getParcelable(ARG_NETWORK_TEMPLATE) : null; if (mTemplate == null) { Context context = getContext(); mTemplate = DataUsageUtils.getDefaultTemplate(context, DataUsageUtils.getDefaultSubscriptionId(context)); mTemplate = DataUsageUtils.getDefaultTemplate(mContext, DataUsageUtils.getDefaultSubscriptionId(mContext)); } if (mAppItem == null) { int uid = (args != null) ? args.getInt(AppInfoBase.ARG_PACKAGE_UID, -1) Loading @@ -131,7 +132,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC mBackgroundUsage = findPreference(KEY_BACKGROUND_USAGE); mCycle = (SpinnerPreference) findPreference(KEY_CYCLE); mCycleAdapter = new CycleAdapter(getContext(), mCycle, mCycleListener); mCycleAdapter = new CycleAdapter(mContext, mCycle, mCycleListener); if (mAppItem.key > 0) { if (mPackages.size() != 0) { Loading @@ -155,7 +156,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC KEY_UNRESTRICTED_DATA); mUnrestrictedData.setOnPreferenceChangeListener(this); } mDataSaverBackend = new DataSaverBackend(getContext()); mDataSaverBackend = new DataSaverBackend(mContext); mAppSettings = findPreference(KEY_APP_SETTINGS); mAppSettingsIntent = new Intent(Intent.ACTION_MANAGE_NETWORK_USAGE); Loading Loading @@ -256,7 +257,7 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC private void updatePrefs(boolean restrictBackground, boolean unrestrictData) { final EnforcedAdmin admin = RestrictedLockUtilsInternal.checkIfMeteredDataRestricted( getContext(), mPackageName, UserHandle.getUserId(mAppItem.key)); mContext, mPackageName, UserHandle.getUserId(mAppItem.key)); if (mRestrictBackground != null) { mRestrictBackground.setChecked(!restrictBackground); mRestrictBackground.setDisabledByAdmin(admin); Loading Loading @@ -294,11 +295,10 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC foregroundBytes = data.getForegroudUsage(); } final long totalBytes = backgroundBytes + foregroundBytes; final Context context = getContext(); mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(context, totalBytes)); mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); mTotalUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, totalBytes)); mForegroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, foregroundBytes)); mBackgroundUsage.setSummary(DataUsageUtils.formatDataUsage(mContext, backgroundBytes)); } private boolean getAppRestrictBackground() { Loading Loading @@ -364,16 +364,24 @@ public class AppDataUsage extends DataUsageBaseFragment implements OnPreferenceC } }; private final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks = @VisibleForTesting final LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>> mUidDataCallbacks = new LoaderManager.LoaderCallbacks<List<NetworkCycleDataForUid>>() { @Override public Loader<List<NetworkCycleDataForUid>> onCreateLoader(int id, Bundle args) { return NetworkCycleDataForUidLoader.builder(getContext()) .setUid(mAppItem.key) .setRetrieveDetail(true) final NetworkCycleDataForUidLoader.Builder builder = NetworkCycleDataForUidLoader.builder(mContext); builder.setRetrieveDetail(true) .setNetworkTemplate(mTemplate) .setSubscriberId(mTemplate.getSubscriberId()) .build(); .setSubscriberId(mTemplate.getSubscriberId()); if (mAppItem.category == AppItem.CATEGORY_USER) { for (int i = 0; i < mAppItem.uids.size(); i++) { builder.addUid(mAppItem.uids.keyAt(i)); } } else { builder.addUid(mAppItem.key); } return builder.build(); } @Override Loading
tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +56 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.settings.datausage; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; Loading @@ -31,7 +33,9 @@ import static org.mockito.Mockito.when; import android.content.Context; import android.content.pm.PackageManager; import android.net.NetworkPolicyManager; import android.net.NetworkTemplate; import android.os.Bundle; import android.text.format.DateUtils; import android.util.ArraySet; import android.view.View; Loading @@ -47,6 +51,7 @@ import com.android.settingslib.AppItem; import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin; import com.android.settingslib.RestrictedSwitchPreference; import com.android.settingslib.net.NetworkCycleDataForUid; import com.android.settingslib.net.NetworkCycleDataForUidLoader; import org.junit.After; import org.junit.Before; Loading Loading @@ -188,7 +193,7 @@ public class AppDataUsageTest { ReflectionHelpers.setField(mFragment, "mBackgroundUsage", preference); ReflectionHelpers.setField(mFragment, "mForegroundUsage", preference); ReflectionHelpers.setField(mFragment, "mTotalUsage", preference); doReturn(RuntimeEnvironment.application).when(mFragment).getContext(); ReflectionHelpers.setField(mFragment, "mContext", RuntimeEnvironment.application); mFragment.bindData(0 /* position */); Loading @@ -199,7 +204,7 @@ public class AppDataUsageTest { public void bindData_hasAppUsageData_shouldShowCycleSpinnerAndUpdateUsageSummary() { mFragment = spy(new AppDataUsage()); final Context context = RuntimeEnvironment.application; doReturn(context).when(mFragment).getContext(); ReflectionHelpers.setField(mFragment, "mContext", context); final long backgroundBytes = 1234L; final long foregroundBytes = 5678L; final List<NetworkCycleDataForUid> appUsage = new ArrayList<>(); Loading @@ -223,4 +228,53 @@ public class AppDataUsageTest { verify(backgroundPref).setSummary(DataUsageUtils.formatDataUsage(context, backgroundBytes)); verify(foregroundPref).setSummary(DataUsageUtils.formatDataUsage(context, foregroundBytes)); } @Test public void onCreateLoader_categoryApp_shouldQueryDataUsageUsingAppKey() { mFragment = new AppDataUsage(); final Context context = RuntimeEnvironment.application; final int testUid = 123123; final AppItem appItem = new AppItem(testUid); appItem.category = AppItem.CATEGORY_APP; ReflectionHelpers.setField(mFragment, "mContext", context); ReflectionHelpers.setField(mFragment, "mAppItem", appItem); ReflectionHelpers.setField(mFragment, "mTemplate", NetworkTemplate.buildTemplateWifiWildcard()); final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); final List<Integer> uids = loader.getUids(); assertThat(uids).hasSize(1); assertThat(uids.get(0)).isEqualTo(testUid); } @Test public void onCreateLoader_categoryUser_shouldQueryDataUsageUsingAssociatedUids() { mFragment = new AppDataUsage(); final Context context = RuntimeEnvironment.application; final int testUserId = 11; final AppItem appItem = new AppItem(testUserId); appItem.category = AppItem.CATEGORY_USER; appItem.addUid(123); appItem.addUid(456); appItem.addUid(789); ReflectionHelpers.setField(mFragment, "mContext", context); ReflectionHelpers.setField(mFragment, "mAppItem", appItem); ReflectionHelpers.setField(mFragment, "mTemplate", NetworkTemplate.buildTemplateWifiWildcard()); final long end = System.currentTimeMillis(); final long start = end - (DateUtils.WEEK_IN_MILLIS * 4); final NetworkCycleDataForUidLoader loader = (NetworkCycleDataForUidLoader) mFragment.mUidDataCallbacks.onCreateLoader(0, Bundle.EMPTY); final List<Integer> uids = loader.getUids(); assertThat(uids).hasSize(3); assertThat(uids.get(0)).isEqualTo(123); assertThat(uids.get(1)).isEqualTo(456); assertThat(uids.get(2)).isEqualTo(789); } }