165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze/* 265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * Copyright (C) 2016 The Android Open Source Project 365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * 465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * Licensed under the Apache License, Version 2.0 (the "License"); 565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * you may not use this file except in compliance with the License. 665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * You may obtain a copy of the License at 765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * 865fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * http://www.apache.org/licenses/LICENSE-2.0 965fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * 1065fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * Unless required by applicable law or agreed to in writing, software 1165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * distributed under the License is distributed on an "AS IS" BASIS, 1265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * See the License for the specific language governing permissions and 1465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * limitations under the License. 1565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze * 1665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze */ 1765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 1865fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzepackage com.android.settings.search; 1965fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 202b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport android.content.ContentResolver; 213746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritzeimport android.content.Intent; 2265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport android.os.Parcel; 232b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport android.provider.Settings; 2465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport android.content.Context; 2565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 269f1e911759dc6fedaac9fa65afb79f6a93022bf4Andrew Sappersteinimport com.android.settings.testutils.SettingsRobolectricTestRunner; 2765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport com.android.settings.TestConfig; 282b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport com.android.settings.search.ResultPayload.Availability; 292b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport com.android.settings.search.ResultPayload.SettingsSource; 302b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport org.junit.Before; 3165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport org.junit.Test; 3265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport org.junit.runner.RunWith; 332b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport org.robolectric.RuntimeEnvironment; 3465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport org.robolectric.annotation.Config; 3565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 362b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritzeimport static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE; 3765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzeimport static com.google.common.truth.Truth.assertThat; 3865fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 3965fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze@RunWith(SettingsRobolectricTestRunner.class) 4065fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) 4165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritzepublic class InlineSwitchPayloadTest { 4265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 432b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze private static final String DUMMY_SETTING = "inline_test"; 442b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze private static final int STANDARD_ON = 1; 452b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze private static final int FLIPPED_ON = 0; 4665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 472b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze private Context mContext; 482b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 492b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze @Before 502b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze public void setUp() { 512b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze mContext = RuntimeEnvironment.application; 5265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze } 5365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 5465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze @Test 5565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze public void testConstructor_DataRetained() { 5665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze final String uri = "test.com"; 5765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze final int type = ResultPayload.PayloadType.INLINE_SWITCH; 582b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze final int source = SettingsSource.SECURE; 593746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final String intentKey = "key"; 603746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final String intentVal = "value"; 613746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final Intent intent = new Intent(); 623746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze intent.putExtra(intentKey, intentVal); 6365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 64458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze InlineSwitchPayload payload = new InlineSwitchPayload(uri, source, 1, intent, true, 65458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze 1 /* default */); 663746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final Intent retainedIntent = payload.getIntent(); 672b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.mSettingKey).isEqualTo(uri); 68694088075e57f031a36a1000d6c69e356fe52d51Matthew Fritze assertThat(payload.getType()).isEqualTo(type); 692b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.mSettingSource).isEqualTo(source); 702b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.isStandard()).isTrue(); 712b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.getAvailability()).isEqualTo(ResultPayload.Availability.AVAILABLE); 723746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze assertThat(retainedIntent.getStringExtra(intentKey)).isEqualTo(intentVal); 7365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze } 7465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 7565fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze @Test 7665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze public void testParcelConstructor_DataRetained() { 7765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze String uri = "test.com"; 7865fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze int type = ResultPayload.PayloadType.INLINE_SWITCH; 792b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze int source = SettingsSource.SECURE; 803746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final String intentKey = "key"; 813746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final String intentVal = "value"; 823746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final Intent intent = new Intent(); 833746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze intent.putExtra(intentKey, intentVal); 8465fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze Parcel parcel = Parcel.obtain(); 852b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze parcel.writeParcelable(intent, 0); 8665fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze parcel.writeString(uri); 8765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze parcel.writeInt(source); 882b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze parcel.writeInt(InlineSwitchPayload.TRUE); 892b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze parcel.writeInt(InlineSwitchPayload.TRUE); 90458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze parcel.writeInt(InlineSwitchPayload.TRUE); 9165fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze parcel.setDataPosition(0); 9265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 9365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze InlineSwitchPayload payload = InlineSwitchPayload.CREATOR.createFromParcel(parcel); 94694088075e57f031a36a1000d6c69e356fe52d51Matthew Fritze 953746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze final Intent builtIntent = payload.getIntent(); 962b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.mSettingKey).isEqualTo(uri); 97694088075e57f031a36a1000d6c69e356fe52d51Matthew Fritze assertThat(payload.getType()).isEqualTo(type); 982b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.mSettingSource).isEqualTo(source); 992b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.isStandard()).isTrue(); 1002b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(payload.getAvailability()).isEqualTo(Availability.AVAILABLE); 1013746d9e25f2805b16b69eb7420a629fc66f6a788Matthew Fritze assertThat(builtIntent.getStringExtra(intentKey)).isEqualTo(intentVal); 10265fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze } 10365fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze 1042b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze @Test 1052b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze public void testGetSystem_flippedSetting_returnsFlippedValue() { 1062b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze // Stores 1s as 0s, and vis versa 1072b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze InlineSwitchPayload payload = new InlineSwitchPayload(DUMMY_SETTING, SettingsSource.SYSTEM, 108458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze FLIPPED_ON, null /* intent */, true, 1 /* default */); 1092b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze int currentValue = 1; 1102b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze Settings.System.putInt(mContext.getContentResolver(), DUMMY_SETTING, currentValue); 1112b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1122b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze int newValue = payload.getValue(mContext); 1132b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1142b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(newValue).isEqualTo(1 - currentValue); 1152b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze } 1162b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1172b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze @Test 1182b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze public void testSetSystem_flippedSetting_updatesToFlippedValue() { 1192b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze // Stores 1s as 0s, and vis versa 1202b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze InlineSwitchPayload payload = new InlineSwitchPayload(DUMMY_SETTING, SettingsSource.SYSTEM, 121458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze FLIPPED_ON, null /* intent */, true, 1 /* default */); 1222b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze int newValue = 1; 1232b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze ContentResolver resolver = mContext.getContentResolver(); 1242b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze Settings.System.putInt(resolver, SCREEN_BRIGHTNESS_MODE, newValue); 1252b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1262b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze payload.setValue(mContext, newValue); 1272b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze int updatedValue = Settings.System.getInt(resolver, DUMMY_SETTING, -1); 1282b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1292b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze assertThat(updatedValue).isEqualTo(1 - newValue); 1302b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze } 1312b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1322b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze @Test(expected = IllegalArgumentException.class) 1332b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze public void testSetSystem_negativeValue_ThrowsError() { 1342b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze InlineSwitchPayload payload = new InlineSwitchPayload(DUMMY_SETTING, SettingsSource.SYSTEM, 135458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze STANDARD_ON, null /* intent */, true, 1 /* default */); 1362b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1372b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze payload.setValue(mContext, -1); 1382b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze } 1392b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1402b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze @Test(expected = IllegalArgumentException.class) 1412b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze public void testSetSystem_highValue_ThrowsError() { 1422b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze InlineSwitchPayload payload = new InlineSwitchPayload(DUMMY_SETTING, SettingsSource.SYSTEM, 143458bb887e130926f36d8926ea8462ecfbfd1e0efMatthew Fritze STANDARD_ON, null /* intent */, true, 1 /* default */); 1442b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze 1452b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze payload.setValue(mContext, 2); 1462b1a88da3df42e4ec1cb2fb9814f7a440b3735f2Matthew Fritze } 14765fb01b520a8eace6c5670c06e6ba5f81ab609afMatthew Fritze} 148