Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e176123 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Improve unit test of ViewConfigurationController" into main

parents b872065c ec0f00d7
Loading
Loading
Loading
Loading
+17 −5
Original line number Diff line number Diff line
@@ -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";
@@ -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;
    }

    /**
@@ -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);
            }
        });
@@ -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);
    }
}
+18 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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 {
@@ -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
@@ -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))