Loading services/companion/java/com/android/server/companion/virtual/ViewConfigurationController.java +17 −5 Original line number Diff line number Diff line Loading @@ -40,8 +40,7 @@ import java.util.Objects; /** * Controls the application of {@link ViewConfigurationParams} for a virtual device. */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public class ViewConfigurationController { class ViewConfigurationController { private static final String TAG = "ViewConfigurationController"; private static final String FRAMEWORK_PACKAGE_NAME = "android"; Loading @@ -61,14 +60,21 @@ public class ViewConfigurationController { private final Context mContext; private final OverlayManager mOverlayManager; private final SettingsWriter mSettingsWriter; private final Object mLock = new Object(); @GuardedBy("mLock") private OverlayIdentifier mOverlayIdentifier = null; public ViewConfigurationController(@NonNull Context context) { ViewConfigurationController(@NonNull Context context) { this(context, Settings.Secure::putInt); } @VisibleForTesting ViewConfigurationController(@NonNull Context context, @NonNull SettingsWriter settingsWriter) { mContext = Objects.requireNonNull(context); mOverlayManager = context.getSystemService(OverlayManager.class); mSettingsWriter = settingsWriter; } /** Loading Loading @@ -159,11 +165,11 @@ public class ViewConfigurationController { ContentResolver contentResolver = deviceContext.getContentResolver(); Binder.withCleanCallingIdentity(() -> { if (!isLongPressTimeoutInvalid) { Settings.Secure.putInt(contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, mSettingsWriter.writeSettings(contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, longPressTimeout); } if (!isMultiPressTimeoutInvalid) { Settings.Secure.putInt(contentResolver, Settings.Secure.MULTI_PRESS_TIMEOUT, mSettingsWriter.writeSettings(contentResolver, Settings.Secure.MULTI_PRESS_TIMEOUT, multiPressTimeout); } }); Loading Loading @@ -214,4 +220,10 @@ public class ViewConfigurationController { private static boolean isInvalid(float value) { return value == ViewConfigurationParams.INVALID_VALUE; } @VisibleForTesting interface SettingsWriter { void writeSettings(@NonNull ContentResolver contentResolver, @NonNull String key, int value); } } services/tests/servicestests/src/com/android/server/companion/virtual/ViewConfigurationControllerTest.java +18 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,10 @@ package com.android.server.companion.virtual; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; Loading @@ -35,6 +37,7 @@ import android.content.om.OverlayManagerTransaction; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.platform.app.InstrumentationRegistry; Loading Loading @@ -68,8 +71,12 @@ public class ViewConfigurationControllerTest { private ViewConfigurationController mViewConfigurationController; @Mock private OverlayManager mOverlayManagerMock; @Mock private ViewConfigurationController.SettingsWriter mSettingsWriter; @Captor private ArgumentCaptor<OverlayManagerTransaction> mTransactionArgumentCaptor; @Captor private ArgumentCaptor<String> mSettingsKeyCaptor; @Before public void setUp() throws Exception { Loading @@ -78,7 +85,7 @@ public class ViewConfigurationControllerTest { InstrumentationRegistry.getInstrumentation().getTargetContext())); when(context.getSystemService(OverlayManager.class)).thenReturn(mOverlayManagerMock); when(context.createDeviceContext(anyInt())).thenReturn(context); mViewConfigurationController = new ViewConfigurationController(context); mViewConfigurationController = new ViewConfigurationController(context, mSettingsWriter); } @Test Loading Loading @@ -130,6 +137,16 @@ public class ViewConfigurationControllerTest { verifyNoInteractions(mOverlayManagerMock); } @Test public void applyViewConfigurationParams_writesSettings() throws Exception { mViewConfigurationController.applyViewConfigurationParams(DEVICE_ID, createParamsRequiringSettingsOverride()); verify(mSettingsWriter, times(2)).writeSettings(any(), mSettingsKeyCaptor.capture(), anyInt()); assertThat(mSettingsKeyCaptor.getAllValues()).containsExactly( Settings.Secure.LONG_PRESS_TIMEOUT, Settings.Secure.MULTI_PRESS_TIMEOUT); } private static ViewConfigurationParams createParamsRequiringResourceOverlay() { return new ViewConfigurationParams.Builder() .setTapTimeoutDuration(Duration.ofMillis(10L)) Loading Loading
services/companion/java/com/android/server/companion/virtual/ViewConfigurationController.java +17 −5 Original line number Diff line number Diff line Loading @@ -40,8 +40,7 @@ import java.util.Objects; /** * Controls the application of {@link ViewConfigurationParams} for a virtual device. */ @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE) public class ViewConfigurationController { class ViewConfigurationController { private static final String TAG = "ViewConfigurationController"; private static final String FRAMEWORK_PACKAGE_NAME = "android"; Loading @@ -61,14 +60,21 @@ public class ViewConfigurationController { private final Context mContext; private final OverlayManager mOverlayManager; private final SettingsWriter mSettingsWriter; private final Object mLock = new Object(); @GuardedBy("mLock") private OverlayIdentifier mOverlayIdentifier = null; public ViewConfigurationController(@NonNull Context context) { ViewConfigurationController(@NonNull Context context) { this(context, Settings.Secure::putInt); } @VisibleForTesting ViewConfigurationController(@NonNull Context context, @NonNull SettingsWriter settingsWriter) { mContext = Objects.requireNonNull(context); mOverlayManager = context.getSystemService(OverlayManager.class); mSettingsWriter = settingsWriter; } /** Loading Loading @@ -159,11 +165,11 @@ public class ViewConfigurationController { ContentResolver contentResolver = deviceContext.getContentResolver(); Binder.withCleanCallingIdentity(() -> { if (!isLongPressTimeoutInvalid) { Settings.Secure.putInt(contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, mSettingsWriter.writeSettings(contentResolver, Settings.Secure.LONG_PRESS_TIMEOUT, longPressTimeout); } if (!isMultiPressTimeoutInvalid) { Settings.Secure.putInt(contentResolver, Settings.Secure.MULTI_PRESS_TIMEOUT, mSettingsWriter.writeSettings(contentResolver, Settings.Secure.MULTI_PRESS_TIMEOUT, multiPressTimeout); } }); Loading Loading @@ -214,4 +220,10 @@ public class ViewConfigurationController { private static boolean isInvalid(float value) { return value == ViewConfigurationParams.INVALID_VALUE; } @VisibleForTesting interface SettingsWriter { void writeSettings(@NonNull ContentResolver contentResolver, @NonNull String key, int value); } }
services/tests/servicestests/src/com/android/server/companion/virtual/ViewConfigurationControllerTest.java +18 −1 Original line number Diff line number Diff line Loading @@ -19,8 +19,10 @@ package com.android.server.companion.virtual; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertEquals; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoInteractions; import static org.mockito.Mockito.when; Loading @@ -35,6 +37,7 @@ import android.content.om.OverlayManagerTransaction; import android.platform.test.annotations.EnableFlags; import android.platform.test.annotations.Presubmit; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import android.testing.AndroidTestingRunner; import androidx.test.platform.app.InstrumentationRegistry; Loading Loading @@ -68,8 +71,12 @@ public class ViewConfigurationControllerTest { private ViewConfigurationController mViewConfigurationController; @Mock private OverlayManager mOverlayManagerMock; @Mock private ViewConfigurationController.SettingsWriter mSettingsWriter; @Captor private ArgumentCaptor<OverlayManagerTransaction> mTransactionArgumentCaptor; @Captor private ArgumentCaptor<String> mSettingsKeyCaptor; @Before public void setUp() throws Exception { Loading @@ -78,7 +85,7 @@ public class ViewConfigurationControllerTest { InstrumentationRegistry.getInstrumentation().getTargetContext())); when(context.getSystemService(OverlayManager.class)).thenReturn(mOverlayManagerMock); when(context.createDeviceContext(anyInt())).thenReturn(context); mViewConfigurationController = new ViewConfigurationController(context); mViewConfigurationController = new ViewConfigurationController(context, mSettingsWriter); } @Test Loading Loading @@ -130,6 +137,16 @@ public class ViewConfigurationControllerTest { verifyNoInteractions(mOverlayManagerMock); } @Test public void applyViewConfigurationParams_writesSettings() throws Exception { mViewConfigurationController.applyViewConfigurationParams(DEVICE_ID, createParamsRequiringSettingsOverride()); verify(mSettingsWriter, times(2)).writeSettings(any(), mSettingsKeyCaptor.capture(), anyInt()); assertThat(mSettingsKeyCaptor.getAllValues()).containsExactly( Settings.Secure.LONG_PRESS_TIMEOUT, Settings.Secure.MULTI_PRESS_TIMEOUT); } private static ViewConfigurationParams createParamsRequiringResourceOverlay() { return new ViewConfigurationParams.Builder() .setTapTimeoutDuration(Duration.ofMillis(10L)) Loading