diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index ec3494772f2..0da44cd9f1d 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -28,6 +28,7 @@ import android.os.UserHandle; import android.os.UserManager; import android.provider.SearchIndexableResource; import android.provider.Settings; +import android.support.annotation.VisibleForTesting; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceGroup; import android.text.TextUtils; @@ -38,6 +39,7 @@ import com.android.settings.dashboard.SummaryLoader; import com.android.settings.deviceinfo.AdditionalSystemUpdatePreferenceController; import com.android.settings.deviceinfo.BuildNumberPreferenceController; import com.android.settings.deviceinfo.SystemUpdatePreferenceController; +import com.android.settings.overlay.FeatureFactory; import com.android.settings.search.BaseSearchIndexProvider; import com.android.settings.search.Indexable; import com.android.settingslib.DeviceInfoUtils; @@ -55,6 +57,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In private static final String KEY_MANUAL = "manual"; private static final String KEY_REGULATORY_INFO = "regulatory_info"; + private static final String KEY_SYSTEM_UPDATE_SETTINGS = "system_update_settings"; private static final String PROPERTY_URL_SAFETYLEGAL = "ro.url.safetylegal"; private static final String PROPERTY_SELINUX_STATUS = "ro.build.selinux"; private static final String KEY_KERNEL_VERSION = "kernel_version"; @@ -102,7 +105,6 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In super.onCreate(icicle); final Activity activity = getActivity(); mUm = UserManager.get(activity); - mSystemUpdatePreferenceController = new SystemUpdatePreferenceController(activity, mUm); mAdditionalSystemUpdatePreferenceController = new AdditionalSystemUpdatePreferenceController(activity); mBuildNumberPreferenceController = @@ -160,7 +162,7 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In * Settings is a generic app and should not contain any device-specific * info. */ - mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen()); + displaySystemUpdates(activity); mAdditionalSystemUpdatePreferenceController.displayPreference(getPreferenceScreen()); // Remove manual entry if none present. @@ -220,10 +222,23 @@ public class DeviceInfoSettings extends SettingsPreferenceFragment implements In } else if (preference.getKey().equals(KEY_DEVICE_FEEDBACK)) { sendFeedback(); } - mSystemUpdatePreferenceController.handlePreferenceTreeClick(preference); + if (mSystemUpdatePreferenceController != null) { + mSystemUpdatePreferenceController.handlePreferenceTreeClick(preference); + } return super.onPreferenceTreeClick(preference); } + @VisibleForTesting + void displaySystemUpdates(Context context) { + if (!FeatureFactory.getFactory(context).getDashboardFeatureProvider(context).isEnabled()) { + mSystemUpdatePreferenceController + = new SystemUpdatePreferenceController(context, UserManager.get(context)); + mSystemUpdatePreferenceController.displayPreference(getPreferenceScreen()); + } else { + getPreferenceScreen().removePreference(findPreference(KEY_SYSTEM_UPDATE_SETTINGS)); + } + } + private void removePreferenceIfPropertyMissing(PreferenceGroup preferenceGroup, String preference, String property ) { if (SystemProperties.get(property).equals("")) { diff --git a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java index c66c2b42a94..c3365b8b606 100644 --- a/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java +++ b/tests/robotests/src/com/android/settings/DeviceInfoSettingsTest.java @@ -16,17 +16,56 @@ package com.android.settings; +import android.content.Context; +import android.os.UserManager; +import android.support.v7.preference.Preference; +import android.support.v7.preference.PreferenceScreen; import android.test.AndroidTestCase; import android.test.suitebuilder.annotation.SmallTest; + import com.android.settingslib.DeviceInfoUtils; +import com.android.settings.testutils.FakeFeatureFactory; + +import org.junit.Before; import org.junit.runner.RunWith; import org.junit.Test; +import org.mockito.Answers; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; +import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +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) public class DeviceInfoSettingsTest extends AndroidTestCase { + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private Context mContext; + @Mock + private PreferenceScreen mScreen; + @Mock + private UserManager mUserManager; + + private FakeFeatureFactory mFeatureFactory; + private DeviceInfoSettings mSettings; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + FakeFeatureFactory.setupForTest(mContext); + mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext); + when(mContext.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + mSettings = spy(new DeviceInfoSettings()); + doReturn(mScreen).when(mSettings).getPreferenceScreen(); + } + @Test public void testGetFormattedKernelVersion() throws Exception { if ("Unavailable".equals(DeviceInfoUtils.getFormattedKernelVersion())) { @@ -65,4 +104,20 @@ public class DeviceInfoSettingsTest extends AndroidTestCase { "version 3.8.275480 (based on LLVM 3.8.275480)) " + "#5 SMP PREEMPT Fri Oct 28 14:38:13 PDT 2016")); } + + @Test + public void testShowSystemUpdatesWhenIADisabled() throws Exception { + when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(true); + mSettings.displaySystemUpdates(mContext); + + verify(mScreen).removePreference(any(Preference.class)); + } + + @Test + public void testHideSystemUpdatesWhenIAEnabled() throws Exception { + when(mFeatureFactory.dashboardFeatureProvider.isEnabled()).thenReturn(false); + mSettings.displaySystemUpdates(mContext); + + verify(mScreen, never()).removePreference(any(Preference.class)); + } }