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

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

Merge changes I1315393a,I1c05ff68 into main

* changes:
  Move binder to radio service user controller
  Add interface for radio service user controller
parents de3299f0 2545348f
Loading
Loading
Loading
Loading
+29 −17
Original line number Diff line number Diff line
@@ -19,18 +19,18 @@ package com.android.server.broadcastradio;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doReturn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.doThrow;

import static com.google.common.truth.Truth.assertWithMessage;

import static org.mockito.Mockito.when;

import android.app.ActivityManager;
import android.app.compat.CompatChanges;
import android.os.Binder;
import android.os.UserHandle;

import com.android.dx.mockito.inline.extended.StaticMockitoSessionBuilder;

import com.google.common.truth.Expect;

import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.mockito.Mock;

@@ -41,36 +41,40 @@ public final class RadioServiceUserControllerTest extends ExtendedRadioMockitoTe

    private static final int USER_ID_1 = 11;
    private static final int USER_ID_2 = 12;
    private RadioServiceUserController mUserController;

    @Mock
    private UserHandle mUserHandleMock;

    @Rule
    public final Expect expect = Expect.create();

    @Override
    protected void initializeSession(StaticMockitoSessionBuilder builder) {
        builder.spyStatic(ActivityManager.class).spyStatic(Binder.class)
                .spyStatic(CompatChanges.class);
        builder.spyStatic(ActivityManager.class).spyStatic(Binder.class);
    }

    @Before
    public void setUp() {
        doReturn(mUserHandleMock).when(() -> Binder.getCallingUserHandle());
        doReturn(USER_ID_1).when(() -> ActivityManager.getCurrentUser());
        mUserController = new RadioServiceUserControllerImpl();
    }

    @Test
    public void isCurrentOrSystemUser_forCurrentUser_returnsFalse() {
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_1);

        assertWithMessage("Current user")
                .that(RadioServiceUserController.isCurrentOrSystemUser()).isTrue();
        expect.withMessage("Current user")
                .that(mUserController.isCurrentOrSystemUser()).isTrue();
    }

    @Test
    public void isCurrentOrSystemUser_forNonCurrentUser_returnsFalse() {
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_2);

        assertWithMessage("Non-current user")
                .that(RadioServiceUserController.isCurrentOrSystemUser()).isFalse();
        expect.withMessage("Non-current user")
                .that(mUserController.isCurrentOrSystemUser()).isFalse();
    }

    @Test
@@ -78,8 +82,8 @@ public final class RadioServiceUserControllerTest extends ExtendedRadioMockitoTe
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_1);
        when(mUserHandleMock.getIdentifier()).thenReturn(UserHandle.USER_SYSTEM);

        assertWithMessage("System user")
                .that(RadioServiceUserController.isCurrentOrSystemUser()).isTrue();
        expect.withMessage("System user")
                .that(mUserController.isCurrentOrSystemUser()).isTrue();
    }

    @Test
@@ -87,14 +91,14 @@ public final class RadioServiceUserControllerTest extends ExtendedRadioMockitoTe
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_1);
        doThrow(new RuntimeException()).when(ActivityManager::getCurrentUser);

        assertWithMessage("User when activity manager fails")
                .that(RadioServiceUserController.isCurrentOrSystemUser()).isFalse();
        expect.withMessage("User when activity manager fails")
                .that(mUserController.isCurrentOrSystemUser()).isFalse();
    }

    @Test
    public void getCurrentUser() {
        assertWithMessage("Current user")
                .that(RadioServiceUserController.getCurrentUser()).isEqualTo(USER_ID_1);
        expect.withMessage("Current user")
                .that(mUserController.getCurrentUser()).isEqualTo(USER_ID_1);
    }

    @Test
@@ -102,7 +106,15 @@ public final class RadioServiceUserControllerTest extends ExtendedRadioMockitoTe
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_1);
        doThrow(new RuntimeException()).when(ActivityManager::getCurrentUser);

        assertWithMessage("Current user when activity manager fails")
                .that(RadioServiceUserController.getCurrentUser()).isEqualTo(UserHandle.USER_NULL);
        expect.withMessage("Current user when activity manager fails")
                .that(mUserController.getCurrentUser()).isEqualTo(UserHandle.USER_NULL);
    }

    @Test
    public void getCallingUserId() {
        when(mUserHandleMock.getIdentifier()).thenReturn(USER_ID_1);

        expect.withMessage("Calling user id")
                .that(mUserController.getCallingUserId()).isEqualTo(USER_ID_1);
    }
}
+8 −7
Original line number Diff line number Diff line
@@ -91,12 +91,13 @@ public final class BroadcastRadioServiceImplTest extends ExtendedRadioMockitoTes
    private IAnnouncementListener mAnnouncementListenerMock;
    @Mock
    private IBinder mListenerBinderMock;
    @Mock
    private RadioServiceUserController mUserControllerMock;

    @Override
    protected void initializeSession(StaticMockitoSessionBuilder builder) {
        builder.spyStatic(ServiceManager.class)
                .spyStatic(RadioModule.class)
                .spyStatic(RadioServiceUserController.class);
                .spyStatic(RadioModule.class);
    }

    @Test
@@ -156,7 +157,7 @@ public final class BroadcastRadioServiceImplTest extends ExtendedRadioMockitoTes
    @Test
    public void openSession_forNonCurrentUser_throwsException() throws Exception {
        createBroadcastRadioService();
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        IllegalStateException thrown = assertThrows(IllegalStateException.class,
                () -> mBroadcastRadioService.openSession(FM_RADIO_MODULE_ID,
@@ -206,9 +207,9 @@ public final class BroadcastRadioServiceImplTest extends ExtendedRadioMockitoTes
    }

    private void createBroadcastRadioService() throws RemoteException {
        doReturn(true).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(true).when(mUserControllerMock).isCurrentOrSystemUser();
        mockServiceManager();
        mBroadcastRadioService = new BroadcastRadioServiceImpl(SERVICE_LIST);
        mBroadcastRadioService = new BroadcastRadioServiceImpl(SERVICE_LIST, mUserControllerMock);
    }

    private void mockServiceManager() throws RemoteException {
@@ -222,9 +223,9 @@ public final class BroadcastRadioServiceImplTest extends ExtendedRadioMockitoTes
                any(IServiceCallback.class)));

        doReturn(mFmRadioModuleMock).when(() -> RadioModule.tryLoadingModule(
                eq(FM_RADIO_MODULE_ID), anyString(), any(IBinder.class)));
                eq(FM_RADIO_MODULE_ID), anyString(), any(IBinder.class), any()));
        doReturn(mDabRadioModuleMock).when(() -> RadioModule.tryLoadingModule(
                eq(DAB_RADIO_MODULE_ID), anyString(), any(IBinder.class)));
                eq(DAB_RADIO_MODULE_ID), anyString(), any(IBinder.class), any()));

        when(mFmRadioModuleMock.getProperties()).thenReturn(mFmModuleMock);
        when(mDabRadioModuleMock.getProperties()).thenReturn(mDabModuleMock);
+6 −1
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import android.hardware.radio.RadioManager;
import android.os.ParcelableException;
import android.os.RemoteException;

import com.android.server.broadcastradio.RadioServiceUserController;

import com.google.common.truth.Expect;

import org.junit.Before;
@@ -63,6 +65,8 @@ public final class RadioModuleTest {
    private IAnnouncementListener mListenerMock;
    @Mock
    private android.hardware.broadcastradio.ICloseHandle mHalCloseHandleMock;
    @Mock
    private RadioServiceUserController mUserControllerMock;

    // RadioModule under test
    private RadioModule mRadioModule;
@@ -70,7 +74,8 @@ public final class RadioModuleTest {

    @Before
    public void setup() throws RemoteException {
        mRadioModule = new RadioModule(mBroadcastRadioMock, TEST_MODULE_PROPERTIES);
        mRadioModule = new RadioModule(mBroadcastRadioMock, TEST_MODULE_PROPERTIES,
                mUserControllerMock);

        // TODO(b/241118988): test non-null image for getImage method
        when(mBroadcastRadioMock.getImage(anyInt())).thenReturn(null);
+18 −22
Original line number Diff line number Diff line
@@ -49,12 +49,10 @@ import android.hardware.radio.ProgramSelector;
import android.hardware.radio.RadioManager;
import android.hardware.radio.RadioTuner;
import android.hardware.radio.UniqueProgramIdentifier;
import android.os.Binder;
import android.os.DeadObjectException;
import android.os.ParcelableException;
import android.os.RemoteException;
import android.os.ServiceSpecificException;
import android.os.UserHandle;
import android.platform.test.flag.junit.SetFlagsRule;
import android.util.ArrayMap;
import android.util.ArraySet;
@@ -148,10 +146,10 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {

    // Mocks
    @Mock
    private UserHandle mUserHandleMock;
    @Mock
    private IBroadcastRadio mBroadcastRadioMock;
    private android.hardware.radio.ITunerCallback[] mAidlTunerCallbackMocks;
    @Mock
    private RadioServiceUserController mUserControllerMock;

    // RadioModule under test
    private RadioModule mRadioModule;
@@ -170,8 +168,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {

    @Override
    protected void initializeSession(StaticMockitoSessionBuilder builder) {
        builder.spyStatic(RadioServiceUserController.class).spyStatic(CompatChanges.class)
                .spyStatic(Binder.class);
        builder.spyStatic(CompatChanges.class);
    }

    @Before
@@ -182,13 +179,12 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {

        doReturn(true).when(() -> CompatChanges.isChangeEnabled(
                eq(ConversionUtils.RADIO_U_VERSION_REQUIRED), anyInt()));
        doReturn(USER_ID_1).when(mUserHandleMock).getIdentifier();
        doReturn(mUserHandleMock).when(() -> Binder.getCallingUserHandle());
        doReturn(true).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(USER_ID_1).when(() -> RadioServiceUserController.getCurrentUser());
        doReturn(USER_ID_1).when(mUserControllerMock).getCallingUserId();
        doReturn(true).when(mUserControllerMock).isCurrentOrSystemUser();
        doReturn(USER_ID_1).when(mUserControllerMock).getCurrentUser();

        mRadioModule = new RadioModule(mBroadcastRadioMock,
                AidlTestUtils.makeDefaultModuleProperties());
                AidlTestUtils.makeDefaultModuleProperties(), mUserControllerMock);

        doAnswer(invocation -> {
            mHalTunerCallback = (ITunerCallback) invocation.getArguments()[0];
@@ -237,7 +233,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    @Test
    public void setConfiguration_forNonCurrentUser_doesNotInvokesCallback() throws Exception {
        openAidlClients(/* numClients= */ 1);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].setConfiguration(FM_BAND_CONFIG);

@@ -434,7 +430,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    @Test
    public void tune_forNonCurrentUser_doesNotTune() throws Exception {
        openAidlClients(/* numClients= */ 1);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();
        ProgramSelector initialSel = AidlTestUtils.makeFmSelector(AM_FM_FREQUENCY_LIST[1]);
        RadioManager.ProgramInfo tuneInfo =
                AidlTestUtils.makeProgramInfo(initialSel, SIGNAL_QUALITY);
@@ -514,7 +510,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
        openAidlClients(/* numClients= */ 1);
        mHalCurrentInfo = AidlTestUtils.makeHalProgramInfo(
                ConversionUtils.programSelectorToHalProgramSelector(initialSel), SIGNAL_QUALITY);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].step(/* directionDown= */ true, /* skipSubChannel= */ false);

@@ -593,7 +589,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
        openAidlClients(/* numClients= */ 1);
        mHalCurrentInfo = AidlTestUtils.makeHalProgramInfo(
                ConversionUtils.programSelectorToHalProgramSelector(initialSel), SIGNAL_QUALITY);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].seek(/* directionDown= */ true, /* skipSubChannel= */ false);

@@ -627,7 +623,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    @Test
    public void cancel_forNonCurrentUser_doesNotCancel() throws Exception {
        openAidlClients(/* numClients= */ 1);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].cancel();

@@ -698,7 +694,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    @Test
    public void startBackgroundScan_forNonCurrentUser_doesNotInvokesCallback() throws Exception {
        openAidlClients(/* numClients= */ 1);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].startBackgroundScan();

@@ -968,7 +964,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
        openAidlClients(/* numClients= */ 1);
        ProgramList.Filter filter = new ProgramList.Filter(new ArraySet<>(), new ArraySet<>(),
                /* includeCategories= */ true, /* excludeModifications= */ false);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].startProgramListUpdates(filter);

@@ -1007,7 +1003,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
        ProgramList.Filter filter = new ProgramList.Filter(new ArraySet<>(), new ArraySet<>(),
                /* includeCategories= */ true, /* excludeModifications= */ false);
        mTunerSessions[0].startProgramListUpdates(filter);
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].stopProgramListUpdates();

@@ -1073,7 +1069,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    public void setConfigFlag_forNonCurrentUser_doesNotSetConfigFlag() throws Exception {
        openAidlClients(/* numClients= */ 1);
        int flag = UNSUPPORTED_CONFIG_FLAG + 1;
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].setConfigFlag(flag, /* value= */ true);

@@ -1138,7 +1134,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
        openAidlClients(/* numClients= */ 1);
        Map<String, String> parametersSet = Map.of("mockParam1", "mockValue1",
                "mockParam2", "mockValue2");
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        doReturn(false).when(mUserControllerMock).isCurrentOrSystemUser();

        mTunerSessions[0].setParameters(parametersSet);

@@ -1192,7 +1188,7 @@ public final class TunerSessionTest extends ExtendedRadioMockitoTestCase {
    public void onCurrentProgramInfoChanged_withNonCurrentUser_doesNotInvokeCallback()
            throws Exception {
        openAidlClients(1);
        doReturn(USER_ID_2).when(() -> RadioServiceUserController.getCurrentUser());
        doReturn(USER_ID_2).when(mUserControllerMock).getCurrentUser();

        mHalTunerCallback.onCurrentProgramInfoChanged(AidlTestUtils.makeHalProgramInfo(
                AidlTestUtils.makeHalFmSelector(AM_FM_FREQUENCY_LIST[1]), SIGNAL_QUALITY));
+8 −7
Original line number Diff line number Diff line
@@ -88,11 +88,12 @@ public final class BroadcastRadioServiceHidlTest extends ExtendedRadioMockitoTes
    private IAnnouncementListener mAnnouncementListenerMock;
    @Mock
    private IBinder mBinderMock;
    @Mock
    private RadioServiceUserController mUserControllerMock;

    @Override
    protected void initializeSession(StaticMockitoSessionBuilder builder) {
        builder.spyStatic(RadioModule.class)
                .spyStatic(RadioServiceUserController.class);
        builder.spyStatic(RadioModule.class);
    }

    @Test
@@ -156,7 +157,7 @@ public final class BroadcastRadioServiceHidlTest extends ExtendedRadioMockitoTes
    @Test
    public void openSession_forNonCurrentUser_throwsException() throws Exception {
        createBroadcastRadioService();
        doReturn(false).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        when(mUserControllerMock.isCurrentOrSystemUser()).thenReturn(false);

        IllegalStateException thrown = assertThrows(IllegalStateException.class,
                () -> mBroadcastRadioService.openSession(FM_RADIO_MODULE_ID,
@@ -206,11 +207,11 @@ public final class BroadcastRadioServiceHidlTest extends ExtendedRadioMockitoTes
    }

    private void createBroadcastRadioService() throws RemoteException {
        doReturn(true).when(() -> RadioServiceUserController.isCurrentOrSystemUser());
        when(mUserControllerMock.isCurrentOrSystemUser()).thenReturn(true);

        mockServiceManager();
        mBroadcastRadioService = new BroadcastRadioService(/* nextModuleId= */ FM_RADIO_MODULE_ID,
                mServiceManagerMock);
                mServiceManagerMock, mUserControllerMock);
    }

    private void mockServiceManager() throws RemoteException {
@@ -231,9 +232,9 @@ public final class BroadcastRadioServiceHidlTest extends ExtendedRadioMockitoTes
                }).thenReturn(true);

        doReturn(mFmRadioModuleMock).when(() -> RadioModule.tryLoadingModule(
                eq(FM_RADIO_MODULE_ID), anyString()));
                eq(FM_RADIO_MODULE_ID), anyString(), any()));
        doReturn(mDabRadioModuleMock).when(() -> RadioModule.tryLoadingModule(
                eq(DAB_RADIO_MODULE_ID), anyString()));
                eq(DAB_RADIO_MODULE_ID), anyString(), any()));

        when(mFmRadioModuleMock.getProperties()).thenReturn(mFmModuleMock);
        when(mDabRadioModuleMock.getProperties()).thenReturn(mDabModuleMock);
Loading