From 816efc02fcf5cfbb4b9e2996f36e8a908e103cf6 Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Tue, 8 Aug 2017 17:36:06 -0700 Subject: [PATCH] Refresh preferences when background data switch is toggled Change-Id: Id58f565645fc3c668b516dbd05049559afa9535e Fixes: 64466310 Test: robotests --- .../settings/datausage/AppDataUsage.java | 6 ++- .../settings/datausage/AppDataUsageTest.java | 47 +++++++++++++------ 2 files changed, 37 insertions(+), 16 deletions(-) diff --git a/src/com/android/settings/datausage/AppDataUsage.java b/src/com/android/settings/datausage/AppDataUsage.java index 67e83ee7a56..36d9d0f6e65 100644 --- a/src/com/android/settings/datausage/AppDataUsage.java +++ b/src/com/android/settings/datausage/AppDataUsage.java @@ -32,6 +32,7 @@ import android.net.TrafficStats; import android.os.Bundle; import android.os.RemoteException; 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.PreferenceCategory; @@ -41,6 +42,7 @@ import android.util.IconDrawableFactory; import android.util.Log; import android.view.View; import android.widget.AdapterView; + import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.settings.R; import com.android.settings.applications.AppInfoBase; @@ -234,6 +236,7 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen public boolean onPreferenceChange(Preference preference, Object newValue) { if (preference == mRestrictBackground) { mDataSaverBackend.setIsBlacklisted(mAppItem.key, mPackageName, !(Boolean) newValue); + updatePrefs(); return true; } else if (preference == mUnrestrictedData) { mDataSaverBackend.setIsWhitelisted(mAppItem.key, mPackageName, (Boolean) newValue); @@ -253,7 +256,8 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen return super.onPreferenceTreeClick(preference); } - private void updatePrefs() { + @VisibleForTesting + void updatePrefs() { updatePrefs(getAppRestrictBackground(), getUnrestrictData()); } diff --git a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java index 637962bdefd..2f2a6852dae 100644 --- a/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java +++ b/tests/robotests/src/com/android/settings/datausage/AppDataUsageTest.java @@ -17,9 +17,22 @@ package com.android.settings.datausage; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.RETURNS_DEEP_STUBS; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + import android.content.Context; import android.content.pm.PackageManager; import android.os.Bundle; +import android.support.v14.preference.SwitchPreference; import android.support.v7.preference.PreferenceManager; import android.support.v7.preference.PreferenceScreen; import android.util.ArraySet; @@ -44,17 +57,6 @@ import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.util.ReflectionHelpers; -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.RETURNS_DEEP_STUBS; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION, shadows = ShadowEntityHeaderController.class) @@ -128,9 +130,24 @@ public class AppDataUsageTest { mFragment.onViewCreated(new View(RuntimeEnvironment.application), new Bundle()); - verify(mHeaderController) - .setHasAppInfoLink(true); - verify(mHeaderController) - .setUid(fakeUserId); + verify(mHeaderController).setHasAppInfoLink(true); + verify(mHeaderController).setUid(fakeUserId); + } + + @Test + public void changePreference_backgroundData_shouldUpdateUI() { + mFragment = spy(new AppDataUsage()); + final AppItem appItem = new AppItem(123456789); + final SwitchPreference pref = mock(SwitchPreference.class); + final DataSaverBackend dataSaverBackend = mock(DataSaverBackend.class); + ReflectionHelpers.setField(mFragment, "mAppItem", appItem); + ReflectionHelpers.setField(mFragment, "mRestrictBackground", pref); + ReflectionHelpers.setField(mFragment, "mDataSaverBackend", dataSaverBackend); + + doNothing().when(mFragment).updatePrefs(); + + mFragment.onPreferenceChange(pref, true /* value */); + + verify(mFragment).updatePrefs(); } }