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

Commit aaf8e1f3 authored by Julia Reynolds's avatar Julia Reynolds
Browse files

Handle onNullBinding

According to the docs, an onNullBinding requires the service to be
manually unbound

Test: A test NLS service that returns null from onBind; ensure that the ServiceRecord
does not appear in the bugreport when that app has NLS permission
Bug: 192475653

Change-Id: I784910865fa11a5f88c4e6821007564d3aea7ec9
parent 390edd04
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -1536,7 +1536,7 @@ abstract public class ManagedServices {
                @Override
                public void onNullBinding(ComponentName name) {
                    Slog.v(TAG, "onNullBinding() called with: name = [" + name + "]");
                    mServicesBound.remove(servicesBindingTag);
                    mContext.unbindService(this);
                }
            };
            if (!mContext.bindServiceAsUser(intent,
+8 −8
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import com.google.android.collect.Lists;

import org.junit.Before;
import org.junit.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.mockito.invocation.InvocationOnMock;
@@ -1320,16 +1321,15 @@ public class ManagedServicesTest extends UiServiceTestCase {
                APPROVAL_BY_COMPONENT);
        ComponentName cn = ComponentName.unflattenFromString("a/a");

        service.registerSystemService(cn, 0);
        when(context.bindServiceAsUser(any(), any(), anyInt(), any())).thenAnswer(invocation -> {
            Object[] args = invocation.getArguments();
            ServiceConnection sc = (ServiceConnection) args[1];
            sc.onNullBinding(cn);
        ArgumentCaptor<ServiceConnection> captor = ArgumentCaptor.forClass(ServiceConnection.class);
        when(context.bindServiceAsUser(any(), captor.capture(), anyInt(), any()))
                .thenAnswer(invocation -> {
                    captor.getValue().onNullBinding(cn);
                    return true;
                });

        service.registerSystemService(cn, 0);
        assertFalse(service.isBound(cn, 0));
        verify(context).unbindService(captor.getValue());
    }

    @Test