Skip to content

Commit f50726d

Browse files
android: Clean up android lint and other warnings (#12143)
Worked on clearing the lint warnings (OldTargetApi, ObsoleteSdkInt, InlinedApi, NewApi) Fixes #12142
1 parent 06707f7 commit f50726d

File tree

8 files changed

+73
-15
lines changed

8 files changed

+73
-15
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ android {
1414
}
1515
compileSdkVersion 34
1616
defaultConfig {
17-
minSdkVersion 21
17+
minSdkVersion 22
1818
targetSdkVersion 33
1919
versionCode 1
2020
versionName "1.0"

android/src/main/java/io/grpc/android/AndroidChannelBuilder.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -217,7 +217,6 @@ private void configureNetworkMonitoring() {
217217
connectivityManager.registerDefaultNetworkCallback(defaultNetworkCallback);
218218
unregisterRunnable =
219219
new Runnable() {
220-
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
221220
@Override
222221
public void run() {
223222
connectivityManager.unregisterNetworkCallback(defaultNetworkCallback);
@@ -231,7 +230,6 @@ public void run() {
231230
context.registerReceiver(networkReceiver, networkIntentFilter);
232231
unregisterRunnable =
233232
new Runnable() {
234-
@TargetApi(Build.VERSION_CODES.LOLLIPOP)
235233
@Override
236234
public void run() {
237235
context.unregisterReceiver(networkReceiver);

binder/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ android {
1313
targetCompatibility 1.8
1414
}
1515
defaultConfig {
16-
minSdkVersion 21
16+
minSdkVersion 22
1717
targetSdkVersion 33
1818
versionCode 1
1919
versionName "1.0"

binder/src/main/java/io/grpc/binder/SecurityPolicies.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,6 @@ public Status checkAuthorization(int uid) {
184184
* Creates {@link SecurityPolicy} which checks if the app is a device owner app. See {@link
185185
* DevicePolicyManager}.
186186
*/
187-
@RequiresApi(18)
188187
public static io.grpc.binder.SecurityPolicy isDeviceOwner(Context applicationContext) {
189188
DevicePolicyManager devicePolicyManager =
190189
(DevicePolicyManager) applicationContext.getSystemService(Context.DEVICE_POLICY_SERVICE);
@@ -199,7 +198,6 @@ public static io.grpc.binder.SecurityPolicy isDeviceOwner(Context applicationCon
199198
* Creates {@link SecurityPolicy} which checks if the app is a profile owner app. See {@link
200199
* DevicePolicyManager}.
201200
*/
202-
@RequiresApi(21)
203201
public static SecurityPolicy isProfileOwner(Context applicationContext) {
204202
DevicePolicyManager devicePolicyManager =
205203
(DevicePolicyManager) applicationContext.getSystemService(Context.DEVICE_POLICY_SERVICE);

binder/src/main/java/io/grpc/binder/internal/ServiceBinding.java

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -193,18 +193,27 @@ private static Status bindInternal(
193193
bindResult = context.bindService(bindIntent, conn, flags);
194194
break;
195195
case BIND_SERVICE_AS_USER:
196-
bindResult = context.bindServiceAsUser(bindIntent, conn, flags, targetUserHandle);
196+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
197+
bindResult = context.bindServiceAsUser(bindIntent, conn, flags, targetUserHandle);
198+
} else {
199+
return Status.INTERNAL.withDescription("Cross user Channel requires Android R+");
200+
}
197201
break;
198202
case DEVICE_POLICY_BIND_SEVICE_ADMIN:
199203
DevicePolicyManager devicePolicyManager =
200204
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
201-
bindResult =
202-
devicePolicyManager.bindDeviceAdminServiceAsUser(
203-
channelCredentials.getDevicePolicyAdminComponentName(),
204-
bindIntent,
205-
conn,
206-
flags,
207-
targetUserHandle);
205+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
206+
bindResult =
207+
devicePolicyManager.bindDeviceAdminServiceAsUser(
208+
channelCredentials.getDevicePolicyAdminComponentName(),
209+
bindIntent,
210+
conn,
211+
flags,
212+
targetUserHandle);
213+
} else {
214+
return Status.INTERNAL.withDescription(
215+
"Device policy admin binding requires Android R+");
216+
}
208217
break;
209218
}
210219
if (!bindResult) {

binder/src/test/java/io/grpc/binder/internal/ServiceBindingTest.java

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import android.content.Context;
3030
import android.content.Intent;
3131
import android.content.pm.ServiceInfo;
32+
import android.os.Build;
3233
import android.os.IBinder;
3334
import android.os.Parcel;
3435
import android.os.UserHandle;
@@ -327,6 +328,50 @@ public void testResolveNonExistentServiceWithTargetUserThrows() throws Exception
327328
assertThat(statusException.getStatus().getDescription()).contains("12345");
328329
}
329330

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+
330375
@Test
331376
@Config(sdk = 30)
332377
public void testBindWithDeviceAdmin() throws Exception {

cronet/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ android {
1414
namespace = 'io.grpc.cronet'
1515
compileSdkVersion 33
1616
defaultConfig {
17-
minSdkVersion 21
17+
minSdkVersion 22
1818
targetSdkVersion 33
1919
versionCode 1
2020
versionName "1.0"

lint.xml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<lint>
3+
<!--
4+
Suppress temporarily due to AAPT2 failures with SDK 35/36 on AGP 7.x.
5+
Remove after AGP upgrade.
6+
-->
7+
<issue id="OldTargetApi" severity="ignore" />
8+
</lint>

0 commit comments

Comments
 (0)