Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9ffe6f2d authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Use correct uid when querying usage data for specific user."

parents f084b864 97866f0b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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())
+24 −16
Original line number Diff line number Diff line
@@ -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();

@@ -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)
@@ -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) {
@@ -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);
@@ -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);
@@ -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() {
@@ -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
+56 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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;

@@ -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;
@@ -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 */);

@@ -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<>();
@@ -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);
    }
}