diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index 2977eeab9a5..df238b92fba 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -17,6 +17,8 @@ package com.android.settings.datausage; import android.app.Application; import android.content.Context; import android.os.Bundle; +import android.os.UserHandle; +import android.support.annotation.VisibleForTesting; import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceViewHolder; @@ -26,11 +28,8 @@ import android.view.MenuItem; import android.view.View; import com.android.internal.logging.MetricsProto.MetricsEvent; -import com.android.settings.AppHeader; import com.android.settings.R; -import com.android.settings.SettingsActivity; import com.android.settings.SettingsPreferenceFragment; -import com.android.settings.applications.AppInfoBase; import com.android.settings.applications.AppStateBaseBridge; import com.android.settings.applications.InstalledAppDetails; import com.android.settings.datausage.AppStateDataUsageBridge.DataUsageState; @@ -162,6 +161,9 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment final int N = apps.size(); for (int i = 0; i < N; i++) { AppEntry entry = apps.get(i); + if (!shouldAddPreference(entry)) { + continue; + } String key = entry.info.packageName + "|" + entry.info.uid; AccessPreference preference = (AccessPreference) getCachedPreference(key); if (preference == null) { @@ -221,6 +223,11 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment return false; } + @VisibleForTesting + boolean shouldAddPreference(AppEntry app) { + return app != null && UserHandle.isApp(app.info.uid); + } + private class AccessPreference extends SwitchPreference implements DataSaverBackend.Listener { private final AppEntry mEntry; private final DataUsageState mState; diff --git a/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java new file mode 100644 index 00000000000..a04861dbf28 --- /dev/null +++ b/tests/robotests/src/com/android/settings/datausage/UnrestrictedDataAccessTest.java @@ -0,0 +1,64 @@ +/* + * Copyright (C) 2016 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License + */ +package com.android.settings.datausage; + +import android.content.pm.ApplicationInfo; +import android.os.Process; + +import com.android.settings.TestConfig; +import com.android.settingslib.applications.ApplicationsState; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.annotation.Config; + +import static com.google.common.truth.Truth.assertThat; + +@RunWith(RobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) +public class UnrestrictedDataAccessTest { + + @Mock + private ApplicationsState.AppEntry mAppEntry; + private UnrestrictedDataAccess mFragment; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mFragment = new UnrestrictedDataAccess(); + } + + @Test + public void testShouldAddPreferenceForApps() { + mAppEntry.info = new ApplicationInfo(); + mAppEntry.info.uid = Process.FIRST_APPLICATION_UID + 10; + + assertThat(mFragment.shouldAddPreference(mAppEntry)).isTrue(); + } + + @Test + public void testShouldNotAddPreferenceForNonApps() { + mAppEntry.info = new ApplicationInfo(); + mAppEntry.info.uid = Process.FIRST_APPLICATION_UID - 10; + + assertThat(mFragment.shouldAddPreference(mAppEntry)).isFalse(); + } + +}