Loading packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java +108 −146 Original line number Diff line number Diff line Loading @@ -23,14 +23,16 @@ import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.database.Cursor; import android.database.MatrixCursor; Loading @@ -44,8 +46,8 @@ import android.provider.Settings; import android.telephony.TelephonyManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; import android.util.ArrayMap; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; Loading Loading @@ -77,13 +79,14 @@ public class SettingsHelperTest { @Mock private Context mContext; @Mock private Resources mResources; @Mock private ContentResolver mContentResolver; @Mock private AudioManager mAudioManager; @Mock private TelephonyManager mTelephonyManager; @Mock private MockContentResolver mContentResolver; private MockSettingsProvider mSettingsProvider; @Before public void setUp() { clearLongPressPowerValues(); MockitoAnnotations.initMocks(this); when(mContext.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManager); when(mContext.getSystemService(eq(Context.TELEPHONY_SERVICE))).thenReturn( Loading @@ -91,14 +94,20 @@ public class SettingsHelperTest { when(mContext.getResources()).thenReturn(mResources); when(mContext.getApplicationContext()).thenReturn(mContext); when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo()); when(mContext.getContentResolver()).thenReturn(getContentResolver()); mSettingsHelper = spy(new SettingsHelper(mContext)); mContentResolver = spy(new MockContentResolver()); when(mContext.getContentResolver()).thenReturn(mContentResolver); mSettingsProvider = new MockSettingsProvider(mContext); mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider); } @After public void tearDown() { clearLongPressPowerValues(); Settings.Global.putString(mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, null); Settings.Global.putString(mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null); } @Test Loading @@ -123,33 +132,30 @@ public class SettingsHelperTest { mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, SETTING_KEY, SETTING_VALUE, /* restoredFromSdkInt */ 0); verifyZeroInteractions(mContentResolver); // The only time of interaction happened during setUp() verify(mContentResolver, times(1)) .addProvider(Settings.AUTHORITY, mSettingsProvider); verifyNoMoreInteractions(mContentResolver); } @Test public void testRestoreValue_lppForAssistantEnabled_updatesValue() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(5); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(2); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(5); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(2); } @Test public void testRestoreValue_lppForAssistantNotEnabled_updatesValueToDefaultConfig() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); Loading @@ -161,21 +167,17 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(1); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotEnabledDefaultConfig_updatesValue() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); Loading @@ -187,47 +189,39 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(1); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotAvailable_doesNotRestore() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( false); when(mResources.getBoolean(R.bool.config_longPressOnPowerForAssistantSettingAvailable)) .thenReturn(false); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "500", 0); assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); assertThat((Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test public void testRestoreValue_lppForAssistantInvalid_doesNotRestore() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( false); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "trees", 0); assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); assertThat((Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test Loading Loading @@ -363,9 +357,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://media/internal/audio/media/100?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override Loading @@ -386,25 +377,22 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) resetRingtoneSettingsToDefault(); assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -417,9 +405,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/100?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {100L}); Loading Loading @@ -458,24 +443,21 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -488,9 +470,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/200?title=notificationPing&canonicalize=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {200L}); Loading Loading @@ -529,17 +508,14 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.NOTIFICATION_SOUND, Loading @@ -548,7 +524,7 @@ public class SettingsHelperTest { assertThat( Settings.System.getString( mMockContentResolver, Settings.System.NOTIFICATION_SOUND)) mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -561,9 +537,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/300?title=alarmSound&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {300L}); Loading Loading @@ -600,26 +573,29 @@ public class SettingsHelperTest { assertThat(selectionArgs).isEqualTo(new String[] {"alarmSound"}); return cursor; } @Override public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts) { return null; } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.ALARM_ALERT, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.ALARM_ALERT)) assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -628,9 +604,6 @@ public class SettingsHelperTest { final String sourceRingtoneValue = "content://0@media/external/audio/media/1?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); // This is to mock the case that there are multiple results by querying title + // ringtone_type. MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); Loading @@ -651,32 +624,26 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); } @Test public void testRestoreValue_customRingtone_restoreSilentValue() { MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override Loading @@ -691,37 +658,46 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, "_silent", 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(null); } public static class MockSettingsProvider extends MockContentProvider { ContentResolver mBaseContentResolver; public MockSettingsProvider(Context context, ContentResolver baseContentResolver) { private static class MockSettingsProvider extends MockContentProvider { private final ArrayMap<String, String> mKeyValueStore = new ArrayMap<>(); MockSettingsProvider(Context context) { super(context); this.mBaseContentResolver = baseContentResolver; } @Override public Bundle call(String method, String request, Bundle args) { return mBaseContentResolver.call(Settings.AUTHORITY, method, request, args); if (method.startsWith("PUT_")) { mKeyValueStore.put(request, args.getString("value")); return null; } else if (method.startsWith("GET_")) { return Bundle.forPair("value", mKeyValueStore.getOrDefault(request, "")); } return null; } @Override public Uri insert(Uri uri, ContentValues values) { String name = values.getAsString("name"); String value = values.getAsString("value"); mKeyValueStore.put(name, value); return null; } } Loading Loading @@ -752,15 +728,13 @@ public class SettingsHelperTest { } private int getAutoRotationSettingValue() { return Settings.System.getInt( getContentResolver(), return Settings.System.getInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, /* default= */ -1); } private void setAutoRotationSettingValue(int value) { Settings.System.putInt( getContentResolver(), Settings.System.putInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, value ); Loading @@ -769,7 +743,7 @@ public class SettingsHelperTest { private void restoreAutoRotationSetting(int newValue) { mSettingsHelper.restoreValue( mContext, getContentResolver(), mContentResolver, new ContentValues(), /* destination= */ Settings.System.CONTENT_URI, /* name= */ Settings.System.ACCELEROMETER_ROTATION, Loading @@ -777,31 +751,19 @@ public class SettingsHelperTest { /* restoredFromSdkInt= */ 0); } private ContentResolver getContentResolver() { return InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); } private void clearLongPressPowerValues() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); Settings.Global.putString(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, null); Settings.Global.putString(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null); } private void resetRingtoneSettingsToDefault(ContentResolver contentResolver) { private void resetRingtoneSettingsToDefault() { Settings.System.putString( contentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); mContentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); Settings.System.putString( contentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); mContentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); Settings.System.putString( contentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); mContentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.NOTIFICATION_SOUND)) assertThat(Settings.System.getString(mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(DEFAULT_NOTIFICATION_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.ALARM_ALERT)) assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(DEFAULT_ALARM_VALUE); } } Loading
packages/SettingsProvider/test/src/com/android/providers/settings/SettingsHelperTest.java +108 −146 Original line number Diff line number Diff line Loading @@ -23,14 +23,16 @@ import static junit.framework.Assert.assertEquals; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verifyZeroInteractions; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.ContentValues; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.res.AssetFileDescriptor; import android.content.res.Resources; import android.database.Cursor; import android.database.MatrixCursor; Loading @@ -44,8 +46,8 @@ import android.provider.Settings; import android.telephony.TelephonyManager; import android.test.mock.MockContentProvider; import android.test.mock.MockContentResolver; import android.util.ArrayMap; import androidx.test.platform.app.InstrumentationRegistry; import androidx.test.runner.AndroidJUnit4; import com.android.internal.R; Loading Loading @@ -77,13 +79,14 @@ public class SettingsHelperTest { @Mock private Context mContext; @Mock private Resources mResources; @Mock private ContentResolver mContentResolver; @Mock private AudioManager mAudioManager; @Mock private TelephonyManager mTelephonyManager; @Mock private MockContentResolver mContentResolver; private MockSettingsProvider mSettingsProvider; @Before public void setUp() { clearLongPressPowerValues(); MockitoAnnotations.initMocks(this); when(mContext.getSystemService(eq(Context.AUDIO_SERVICE))).thenReturn(mAudioManager); when(mContext.getSystemService(eq(Context.TELEPHONY_SERVICE))).thenReturn( Loading @@ -91,14 +94,20 @@ public class SettingsHelperTest { when(mContext.getResources()).thenReturn(mResources); when(mContext.getApplicationContext()).thenReturn(mContext); when(mContext.getApplicationInfo()).thenReturn(new ApplicationInfo()); when(mContext.getContentResolver()).thenReturn(getContentResolver()); mSettingsHelper = spy(new SettingsHelper(mContext)); mContentResolver = spy(new MockContentResolver()); when(mContext.getContentResolver()).thenReturn(mContentResolver); mSettingsProvider = new MockSettingsProvider(mContext); mContentResolver.addProvider(Settings.AUTHORITY, mSettingsProvider); } @After public void tearDown() { clearLongPressPowerValues(); Settings.Global.putString(mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, null); Settings.Global.putString(mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null); } @Test Loading @@ -123,33 +132,30 @@ public class SettingsHelperTest { mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, SETTING_KEY, SETTING_VALUE, /* restoredFromSdkInt */ 0); verifyZeroInteractions(mContentResolver); // The only time of interaction happened during setUp() verify(mContentResolver, times(1)) .addProvider(Settings.AUTHORITY, mSettingsProvider); verifyNoMoreInteractions(mContentResolver); } @Test public void testRestoreValue_lppForAssistantEnabled_updatesValue() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(5); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(2); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(5); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(2); } @Test public void testRestoreValue_lppForAssistantNotEnabled_updatesValueToDefaultConfig() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); Loading @@ -161,21 +167,17 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(1); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotEnabledDefaultConfig_updatesValue() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( true); Loading @@ -187,47 +189,39 @@ public class SettingsHelperTest { R.integer.config_keyChordPowerVolumeUp)).thenReturn( 1); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "2", 0); assertThat( Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)) .isEqualTo(1); assertThat(Settings.Global.getInt(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1)).isEqualTo(1); assertThat(Settings.Global.getInt( mContentResolver, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, -1)).isEqualTo(1); } @Test public void testRestoreValue_lppForAssistantNotAvailable_doesNotRestore() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( false); when(mResources.getBoolean(R.bool.config_longPressOnPowerForAssistantSettingAvailable)) .thenReturn(false); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "5", 0); mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "500", 0); assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); assertThat((Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test public void testRestoreValue_lppForAssistantInvalid_doesNotRestore() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); when(mResources.getBoolean( R.bool.config_longPressOnPowerForAssistantSettingAvailable)).thenReturn( false); mSettingsHelper.restoreValue(mContext, cr, new ContentValues(), Uri.EMPTY, mSettingsHelper.restoreValue(mContext, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.Global.POWER_BUTTON_LONG_PRESS, "trees", 0); assertThat((Settings.Global.getInt(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); assertThat((Settings.Global.getInt( mContentResolver, Settings.Global.POWER_BUTTON_LONG_PRESS, -1))).isEqualTo(-1); } @Test Loading Loading @@ -363,9 +357,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://media/internal/audio/media/100?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override Loading @@ -386,25 +377,22 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) resetRingtoneSettingsToDefault(); assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -417,9 +405,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/100?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {100L}); Loading Loading @@ -458,24 +443,21 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -488,9 +470,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/200?title=notificationPing&canonicalize=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {200L}); Loading Loading @@ -529,17 +508,14 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.NOTIFICATION_SOUND, Loading @@ -548,7 +524,7 @@ public class SettingsHelperTest { assertThat( Settings.System.getString( mMockContentResolver, Settings.System.NOTIFICATION_SOUND)) mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -561,9 +537,6 @@ public class SettingsHelperTest { final String newRingtoneValueCanonicalized = "content://0@media/external/audio/media/300?title=alarmSound&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); cursor.addRow(new Object[] {300L}); Loading Loading @@ -600,26 +573,29 @@ public class SettingsHelperTest { assertThat(selectionArgs).isEqualTo(new String[] {"alarmSound"}); return cursor; } @Override public AssetFileDescriptor openTypedAssetFile(Uri url, String mimeType, Bundle opts) { return null; } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.ALARM_ALERT, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.ALARM_ALERT)) assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(newRingtoneValueCanonicalized); } Loading @@ -628,9 +604,6 @@ public class SettingsHelperTest { final String sourceRingtoneValue = "content://0@media/external/audio/media/1?title=Song&canonical=1"; MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); // This is to mock the case that there are multiple results by querying title + // ringtone_type. MatrixCursor cursor = new MatrixCursor(new String[] {BaseColumns._ID}); Loading @@ -651,32 +624,26 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mContentResolver.addProvider("0@" + MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, sourceRingtoneValue, 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); } @Test public void testRestoreValue_customRingtone_restoreSilentValue() { MockContentResolver mMockContentResolver = new MockContentResolver(); when(mContext.getContentResolver()).thenReturn(mMockContentResolver); ContentProvider mockMediaContentProvider = new MockContentProvider(mContext) { @Override Loading @@ -691,37 +658,46 @@ public class SettingsHelperTest { } }; ContentProvider mockSettingsContentProvider = new MockSettingsProvider(mContext, getContentResolver()); mMockContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); mMockContentResolver.addProvider(Settings.AUTHORITY, mockSettingsContentProvider); mContentResolver.addProvider(MediaStore.AUTHORITY, mockMediaContentProvider); resetRingtoneSettingsToDefault(mMockContentResolver); resetRingtoneSettingsToDefault(); mSettingsHelper.restoreValue( mContext, mMockContentResolver, mContentResolver, new ContentValues(), Uri.EMPTY, Settings.System.RINGTONE, "_silent", 0); assertThat(Settings.System.getString(mMockContentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(null); } public static class MockSettingsProvider extends MockContentProvider { ContentResolver mBaseContentResolver; public MockSettingsProvider(Context context, ContentResolver baseContentResolver) { private static class MockSettingsProvider extends MockContentProvider { private final ArrayMap<String, String> mKeyValueStore = new ArrayMap<>(); MockSettingsProvider(Context context) { super(context); this.mBaseContentResolver = baseContentResolver; } @Override public Bundle call(String method, String request, Bundle args) { return mBaseContentResolver.call(Settings.AUTHORITY, method, request, args); if (method.startsWith("PUT_")) { mKeyValueStore.put(request, args.getString("value")); return null; } else if (method.startsWith("GET_")) { return Bundle.forPair("value", mKeyValueStore.getOrDefault(request, "")); } return null; } @Override public Uri insert(Uri uri, ContentValues values) { String name = values.getAsString("name"); String value = values.getAsString("value"); mKeyValueStore.put(name, value); return null; } } Loading Loading @@ -752,15 +728,13 @@ public class SettingsHelperTest { } private int getAutoRotationSettingValue() { return Settings.System.getInt( getContentResolver(), return Settings.System.getInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, /* default= */ -1); } private void setAutoRotationSettingValue(int value) { Settings.System.putInt( getContentResolver(), Settings.System.putInt(mContentResolver, Settings.System.ACCELEROMETER_ROTATION, value ); Loading @@ -769,7 +743,7 @@ public class SettingsHelperTest { private void restoreAutoRotationSetting(int newValue) { mSettingsHelper.restoreValue( mContext, getContentResolver(), mContentResolver, new ContentValues(), /* destination= */ Settings.System.CONTENT_URI, /* name= */ Settings.System.ACCELEROMETER_ROTATION, Loading @@ -777,31 +751,19 @@ public class SettingsHelperTest { /* restoredFromSdkInt= */ 0); } private ContentResolver getContentResolver() { return InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); } private void clearLongPressPowerValues() { ContentResolver cr = InstrumentationRegistry.getInstrumentation().getTargetContext() .getContentResolver(); Settings.Global.putString(cr, Settings.Global.POWER_BUTTON_LONG_PRESS, null); Settings.Global.putString(cr, Settings.Global.KEY_CHORD_POWER_VOLUME_UP, null); } private void resetRingtoneSettingsToDefault(ContentResolver contentResolver) { private void resetRingtoneSettingsToDefault() { Settings.System.putString( contentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); mContentResolver, Settings.System.RINGTONE, DEFAULT_RINGTONE_VALUE); Settings.System.putString( contentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); mContentResolver, Settings.System.NOTIFICATION_SOUND, DEFAULT_NOTIFICATION_VALUE); Settings.System.putString( contentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); mContentResolver, Settings.System.ALARM_ALERT, DEFAULT_ALARM_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.RINGTONE)) assertThat(Settings.System.getString(mContentResolver, Settings.System.RINGTONE)) .isEqualTo(DEFAULT_RINGTONE_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.NOTIFICATION_SOUND)) assertThat(Settings.System.getString(mContentResolver, Settings.System.NOTIFICATION_SOUND)) .isEqualTo(DEFAULT_NOTIFICATION_VALUE); assertThat(Settings.System.getString(contentResolver, Settings.System.ALARM_ALERT)) assertThat(Settings.System.getString(mContentResolver, Settings.System.ALARM_ALERT)) .isEqualTo(DEFAULT_ALARM_VALUE); } }