Loading services/core/java/com/android/server/am/CoreSettingsObserver.java +19 −7 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.net.Uri; import android.os.Bundle; import android.provider.DeviceConfig; import android.provider.Settings; import android.util.Slog; import android.widget.WidgetFlags; import com.android.internal.R; Loading @@ -47,6 +48,8 @@ import java.util.Objects; */ final class CoreSettingsObserver extends ContentObserver { private static final String TAG = "CoreSettingsObserver"; private static class DeviceConfigEntry<T> { String namespace; String flag; Loading Loading @@ -232,16 +235,25 @@ final class CoreSettingsObserver extends ContentObserver { deviceIds.add(Context.DEVICE_ID_DEFAULT); for (int deviceId : deviceIds) { final Bundle deviceBundle = new Bundle(); final Context deviceContext = context.createDeviceContext(deviceId); Context deviceContext = null; try { deviceContext = context.createDeviceContext(deviceId); } catch (IllegalArgumentException e) { Slog.w(TAG, "Exception during Context#createDeviceContext", e); } if (deviceContext != null) { populateSettings(deviceContext, deviceBundle, sSecureSettingToTypeMap); populateSettings(deviceContext, deviceBundle, sSystemSettingToTypeMap); // Copy global settings and device config values, as they don't vary across devices. // Copy global settings and device config values, as they don't vary across // devices. deviceBundle.putAll(globalSettingsBundle); deviceBundle.putAll(deviceConfigBundle); mCoreSettings.putBundle(String.valueOf(deviceId), deviceBundle); } } } else { populateSettings(context, mCoreSettings, sSecureSettingToTypeMap); populateSettings(context, mCoreSettings, sSystemSettingToTypeMap); Loading services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -34,10 +34,9 @@ import android.content.res.TypedArray; import android.os.Bundle; import android.os.Handler; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; import android.test.mock.MockContentResolver; import android.virtualdevice.cts.common.VirtualDeviceRule; import androidx.test.filters.SmallTest; Loading Loading @@ -69,13 +68,16 @@ public class CoreSettingsObserverTest { private static final float TEST_FLOAT = 3.14f; private static final String TEST_STRING = "testString"; @Rule public ServiceThreadRule mServiceThreadRule = new ServiceThreadRule(); @Rule public final CheckFlagsRule checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Rule public ServiceThreadRule mServiceThreadRule = new ServiceThreadRule(); @Rule public final VirtualDeviceRule mVirtualDeviceRule = VirtualDeviceRule.createDefault(); private ActivityManagerService mAms; @Mock private Context mContext; @Mock private Resources mResources; @Mock private Context mContext; @Mock private Resources mResources; private MockContentResolver mContentResolver; private CoreSettingsObserver mCoreSettingsObserver; Loading Loading @@ -171,6 +173,13 @@ public class CoreSettingsObserverTest { TEST_STRING, settingsBundle.getString(TEST_SETTING_SYSTEM_STRING)); } @Test public void testPopulateSettings_withInvalidDeviceId() { mVirtualDeviceRule.createManagedVirtualDevice(); when(mContext.createDeviceContext(anyInt())).thenThrow(new IllegalArgumentException()); testPopulateSettings(); } private Bundle getPopulatedBundle() { mCoreSettingsObserver.onChange(false); return mCoreSettingsObserver.getCoreSettingsLocked().getBundle( Loading Loading
services/core/java/com/android/server/am/CoreSettingsObserver.java +19 −7 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import android.net.Uri; import android.os.Bundle; import android.provider.DeviceConfig; import android.provider.Settings; import android.util.Slog; import android.widget.WidgetFlags; import com.android.internal.R; Loading @@ -47,6 +48,8 @@ import java.util.Objects; */ final class CoreSettingsObserver extends ContentObserver { private static final String TAG = "CoreSettingsObserver"; private static class DeviceConfigEntry<T> { String namespace; String flag; Loading Loading @@ -232,16 +235,25 @@ final class CoreSettingsObserver extends ContentObserver { deviceIds.add(Context.DEVICE_ID_DEFAULT); for (int deviceId : deviceIds) { final Bundle deviceBundle = new Bundle(); final Context deviceContext = context.createDeviceContext(deviceId); Context deviceContext = null; try { deviceContext = context.createDeviceContext(deviceId); } catch (IllegalArgumentException e) { Slog.w(TAG, "Exception during Context#createDeviceContext", e); } if (deviceContext != null) { populateSettings(deviceContext, deviceBundle, sSecureSettingToTypeMap); populateSettings(deviceContext, deviceBundle, sSystemSettingToTypeMap); // Copy global settings and device config values, as they don't vary across devices. // Copy global settings and device config values, as they don't vary across // devices. deviceBundle.putAll(globalSettingsBundle); deviceBundle.putAll(deviceConfigBundle); mCoreSettings.putBundle(String.valueOf(deviceId), deviceBundle); } } } else { populateSettings(context, mCoreSettings, sSecureSettingToTypeMap); populateSettings(context, mCoreSettings, sSystemSettingToTypeMap); Loading
services/tests/servicestests/src/com/android/server/am/CoreSettingsObserverTest.java +17 −8 Original line number Diff line number Diff line Loading @@ -34,10 +34,9 @@ import android.content.res.TypedArray; import android.os.Bundle; import android.os.Handler; import android.platform.test.annotations.RequiresFlagsEnabled; import android.platform.test.flag.junit.CheckFlagsRule; import android.platform.test.flag.junit.DeviceFlagsValueProvider; import android.provider.Settings; import android.test.mock.MockContentResolver; import android.virtualdevice.cts.common.VirtualDeviceRule; import androidx.test.filters.SmallTest; Loading Loading @@ -69,13 +68,16 @@ public class CoreSettingsObserverTest { private static final float TEST_FLOAT = 3.14f; private static final String TEST_STRING = "testString"; @Rule public ServiceThreadRule mServiceThreadRule = new ServiceThreadRule(); @Rule public final CheckFlagsRule checkFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule(); @Rule public ServiceThreadRule mServiceThreadRule = new ServiceThreadRule(); @Rule public final VirtualDeviceRule mVirtualDeviceRule = VirtualDeviceRule.createDefault(); private ActivityManagerService mAms; @Mock private Context mContext; @Mock private Resources mResources; @Mock private Context mContext; @Mock private Resources mResources; private MockContentResolver mContentResolver; private CoreSettingsObserver mCoreSettingsObserver; Loading Loading @@ -171,6 +173,13 @@ public class CoreSettingsObserverTest { TEST_STRING, settingsBundle.getString(TEST_SETTING_SYSTEM_STRING)); } @Test public void testPopulateSettings_withInvalidDeviceId() { mVirtualDeviceRule.createManagedVirtualDevice(); when(mContext.createDeviceContext(anyInt())).thenThrow(new IllegalArgumentException()); testPopulateSettings(); } private Bundle getPopulatedBundle() { mCoreSettingsObserver.onChange(false); return mCoreSettingsObserver.getCoreSettingsLocked().getBundle( Loading