diff --git a/src/com/android/settings/location/LocationPreferenceController.java b/src/com/android/settings/location/LocationPreferenceController.java index e4d4ca02c3e..da7f299b807 100644 --- a/src/com/android/settings/location/LocationPreferenceController.java +++ b/src/com/android/settings/location/LocationPreferenceController.java @@ -26,6 +26,9 @@ import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; import com.android.settings.core.PreferenceController; +import com.android.settings.search.DatabaseIndexingUtils; +import com.android.settings.search.InlineListPayload; +import com.android.settings.search.ResultPayload; import com.android.settingslib.core.lifecycle.Lifecycle; import com.android.settingslib.core.lifecycle.LifecycleObserver; import com.android.settingslib.core.lifecycle.events.OnPause; @@ -120,4 +123,16 @@ public class LocationPreferenceController extends PreferenceController implement } return 0; } + + @Override + public ResultPayload getResultPayload() { + final Intent intent = DatabaseIndexingUtils.buildSubsettingIntent(mContext, + LocationSettings.class.getName(), KEY_LOCATION, + mContext.getString(R.string.location_settings_title)); + + return new InlineListPayload(Secure.LOCATION_MODE, + ResultPayload.SettingsSource.SECURE, intent, isAvailable(), + Secure.LOCATION_MODE_HIGH_ACCURACY + 1); + } + } diff --git a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java index ea2a18b163d..c7e0e0a4433 100644 --- a/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/location/LocationPreferenceControllerTest.java @@ -15,6 +15,7 @@ */ package com.android.settings.location; +import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.nullable; @@ -23,17 +24,25 @@ import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import android.content.BroadcastReceiver; +import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.location.LocationManager; +import android.provider.Settings; import android.provider.Settings.Secure; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; import com.android.settings.R; +import com.android.settings.display.AutoBrightnessPreferenceController; +import com.android.settings.search.InlineListPayload; +import com.android.settings.search.InlinePayload; +import com.android.settings.search.InlineSwitchPayload; +import com.android.settings.search.ResultPayload; import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settings.TestConfig; +import com.android.settings.testutils.shadow.ShadowSecureSettings; import com.android.settingslib.core.lifecycle.Lifecycle; import org.junit.Before; @@ -42,7 +51,9 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowApplication; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -160,4 +171,38 @@ public class LocationPreferenceControllerTest { verify(mPreference).setSummary(any()); } + + @Test + public void testPreferenceController_ProperResultPayloadType() { + final Context context = RuntimeEnvironment.application; + mController = new LocationPreferenceController(context, null /* lifecycle */); + ResultPayload payload = mController.getResultPayload(); + assertThat(payload).isInstanceOf(InlineListPayload.class); + } + + @Test + @Config(shadows = ShadowSecureSettings.class) + public void testSetValue_updatesCorrectly() { + int newValue = Secure.LOCATION_MODE_BATTERY_SAVING; + ContentResolver resolver = mContext.getContentResolver(); + Settings.Secure.putInt(resolver, Secure.LOCATION_MODE, Secure.LOCATION_MODE_OFF); + + ((InlinePayload) mController.getResultPayload()).setValue(mContext, newValue); + int updatedValue = Settings.Secure.getInt(resolver, Secure.LOCATION_MODE, + Secure.LOCATION_MODE_OFF); + + assertThat(updatedValue).isEqualTo(newValue); + } + + @Test + @Config(shadows = ShadowSecureSettings.class) + public void testGetValue_correctValueReturned() { + int expectedValue = Secure.LOCATION_MODE_BATTERY_SAVING; + ContentResolver resolver = mContext.getContentResolver(); + Settings.Secure.putInt(resolver, Secure.LOCATION_MODE, expectedValue); + + int newValue = ((InlinePayload) mController.getResultPayload()).getValue(mContext); + + assertThat(newValue).isEqualTo(expectedValue); + } }