Handle onNullBinding
Test: atest Fixes: 111388269 Change-Id: I3e25a11712ee913ddc4b0ef5dd6055aa804ba94a
This commit is contained in:
@@ -79,7 +79,6 @@ import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
/**
|
||||
* Manages the lifecycle of application-provided services bound by system server.
|
||||
@@ -1163,6 +1162,7 @@ abstract public class ManagedServices {
|
||||
@Override
|
||||
public void onNullBinding(ComponentName name) {
|
||||
Slog.v(TAG, "onNullBinding() called with: name = [" + name + "]");
|
||||
mServicesBound.remove(servicesBindingTag);
|
||||
}
|
||||
};
|
||||
if (!mContext.bindServiceAsUser(intent,
|
||||
@@ -1180,6 +1180,11 @@ abstract public class ManagedServices {
|
||||
}
|
||||
}
|
||||
|
||||
boolean isBound(ComponentName cn, int userId) {
|
||||
final Pair<ComponentName, Integer> servicesBindingTag = Pair.create(cn, userId);
|
||||
return mServicesBound.contains(servicesBindingTag);
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove a service for the given user by ComponentName
|
||||
*/
|
||||
|
||||
@@ -23,9 +23,11 @@ import static junit.framework.Assert.assertFalse;
|
||||
import static junit.framework.Assert.assertNotNull;
|
||||
import static junit.framework.Assert.assertTrue;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Matchers.anyInt;
|
||||
import static org.mockito.Matchers.eq;
|
||||
import static org.mockito.Mockito.doAnswer;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.times;
|
||||
@@ -36,6 +38,7 @@ import android.content.ComponentName;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.ServiceConnection;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.IPackageManager;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ResolveInfo;
|
||||
@@ -61,6 +64,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;
|
||||
@@ -964,6 +968,62 @@ public class ManagedServicesTest extends UiServiceTestCase {
|
||||
assertTrue(componentsToBind.get(10).contains(ComponentName.unflattenFromString("c/c")));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnNullBinding() throws Exception {
|
||||
Context context = mock(Context.class);
|
||||
PackageManager pm = mock(PackageManager.class);
|
||||
ApplicationInfo ai = new ApplicationInfo();
|
||||
ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
|
||||
when(context.getPackageName()).thenReturn(mContext.getPackageName());
|
||||
when(context.getUserId()).thenReturn(mContext.getUserId());
|
||||
when(context.getPackageManager()).thenReturn(pm);
|
||||
when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
|
||||
|
||||
ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
|
||||
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);
|
||||
return true;
|
||||
});
|
||||
|
||||
service.registerSystemService(cn, 0);
|
||||
assertFalse(service.isBound(cn, 0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnServiceConnected() throws Exception {
|
||||
Context context = mock(Context.class);
|
||||
PackageManager pm = mock(PackageManager.class);
|
||||
ApplicationInfo ai = new ApplicationInfo();
|
||||
ai.targetSdkVersion = Build.VERSION_CODES.CUR_DEVELOPMENT;
|
||||
|
||||
when(context.getPackageName()).thenReturn(mContext.getPackageName());
|
||||
when(context.getUserId()).thenReturn(mContext.getUserId());
|
||||
when(context.getPackageManager()).thenReturn(pm);
|
||||
when(pm.getApplicationInfo(anyString(), anyInt())).thenReturn(ai);
|
||||
|
||||
ManagedServices service = new TestManagedServices(context, mLock, mUserProfiles, mIpm,
|
||||
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.onServiceConnected(cn, mock(IBinder.class));
|
||||
return true;
|
||||
});
|
||||
|
||||
service.registerSystemService(cn, 0);
|
||||
assertTrue(service.isBound(cn, 0));
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testOnPackagesChanged_nullValuesPassed_noNullPointers() {
|
||||
for (int approvalLevel : new int[] {APPROVAL_BY_COMPONENT, APPROVAL_BY_PACKAGE}) {
|
||||
|
||||
Reference in New Issue
Block a user