|
29 | 29 | import android.content.Context; |
30 | 30 | import android.content.Intent; |
31 | 31 | import android.content.pm.ServiceInfo; |
| 32 | +import android.os.Build; |
32 | 33 | import android.os.IBinder; |
33 | 34 | import android.os.Parcel; |
34 | 35 | import android.os.UserHandle; |
@@ -327,6 +328,50 @@ public void testResolveNonExistentServiceWithTargetUserThrows() throws Exception |
327 | 328 | assertThat(statusException.getStatus().getDescription()).contains("12345"); |
328 | 329 | } |
329 | 330 |
|
| 331 | + @Test |
| 332 | + @Config(sdk = 30) |
| 333 | + public void testBindService_doesNotThrowInternalErrorWhenSdkAtLeastR() { |
| 334 | + UserHandle userHandle = generateUserHandle(/* userId= */ 12345); |
| 335 | + binding = newBuilder().setTargetUserHandle(userHandle).build(); |
| 336 | + binding.bind(); |
| 337 | + shadowOf(getMainLooper()).idle(); |
| 338 | + |
| 339 | + assertThat(Build.VERSION.SDK_INT).isEqualTo(Build.VERSION_CODES.R); |
| 340 | + assertThat(observer.unboundReason).isNull(); |
| 341 | + } |
| 342 | + |
| 343 | + @Test |
| 344 | + @Config(sdk = 28) |
| 345 | + public void testBindServiceAsUser_returnsErrorWhenSdkBelowR() { |
| 346 | + UserHandle userHandle = generateUserHandle(/* userId= */ 12345); |
| 347 | + binding = newBuilder().setTargetUserHandle(userHandle).build(); |
| 348 | + binding.bind(); |
| 349 | + shadowOf(getMainLooper()).idle(); |
| 350 | + |
| 351 | + assertThat(observer.unboundReason.getCode()).isEqualTo(Code.INTERNAL); |
| 352 | + assertThat(observer.unboundReason.getDescription()) |
| 353 | + .isEqualTo("Cross user Channel requires Android R+"); |
| 354 | + } |
| 355 | + |
| 356 | + @Test |
| 357 | + @Config(sdk = 28) |
| 358 | + public void testDevicePolicyBlind_returnsErrorWhenSdkBelowR() { |
| 359 | + String deviceAdminClassName = "DevicePolicyAdmin"; |
| 360 | + ComponentName adminComponent = new ComponentName(appContext, deviceAdminClassName); |
| 361 | + allowBindDeviceAdminForUser(appContext, adminComponent, 10); |
| 362 | + binding = |
| 363 | + newBuilder() |
| 364 | + .setTargetUserHandle(UserHandle.getUserHandleForUid(10)) |
| 365 | + .setChannelCredentials(BinderChannelCredentials.forDevicePolicyAdmin(adminComponent)) |
| 366 | + .build(); |
| 367 | + binding.bind(); |
| 368 | + shadowOf(getMainLooper()).idle(); |
| 369 | + |
| 370 | + assertThat(observer.unboundReason.getCode()).isEqualTo(Code.INTERNAL); |
| 371 | + assertThat(observer.unboundReason.getDescription()) |
| 372 | + .isEqualTo("Device policy admin binding requires Android R+"); |
| 373 | + } |
| 374 | + |
330 | 375 | @Test |
331 | 376 | @Config(sdk = 30) |
332 | 377 | public void testBindWithDeviceAdmin() throws Exception { |
|
0 commit comments