Skip to content

Commit f8f2ee0

Browse files
authored
android: fix all linter warnings and treat warnings as errors (#521)
#Updates tailscale/corp#22284 Fixes and/or explicitly suppresses all linter warnings and we will now fail the build if new warnings are introduced. Signed-off-by: Jonathan Nobels <[email protected]>
1 parent 08ae018 commit f8f2ee0

File tree

11 files changed

+33
-20
lines changed

11 files changed

+33
-20
lines changed

android/build.gradle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ android {
5454
targetCompatibility JavaVersion.VERSION_17
5555
}
5656

57+
lintOptions {
58+
warningsAsErrors true
59+
}
60+
5761
kotlinOptions {
5862
jvmTarget = "17"
5963
}

android/src/main/java/com/tailscale/ipn/AppSourceChecker.kt

Lines changed: 12 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,21 @@ object AppSourceChecker {
1515
val packageName = context.packageName
1616
Log.d(TAG, "Package name: $packageName")
1717

18-
val installerPackageName = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
19-
packageManager.getInstallSourceInfo(packageName).installingPackageName
20-
} else {
21-
packageManager.getInstallerPackageName(packageName)
22-
}
18+
val installerPackageName =
19+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
20+
packageManager.getInstallSourceInfo(packageName).installingPackageName
21+
} else {
22+
@Suppress("deprecation") packageManager.getInstallerPackageName(packageName)
23+
}
2324

2425
Log.d(TAG, "Installer package name: $installerPackageName")
2526

2627
return when (installerPackageName) {
27-
"com.android.vending" -> "googleplay"
28-
"org.fdroid.fdroid" -> "fdroid"
29-
"com.amazon.venezia" -> "amazon"
30-
null -> "unknown"
31-
else -> "unknown($installerPackageName)"
28+
"com.android.vending" -> "googleplay"
29+
"org.fdroid.fdroid" -> "fdroid"
30+
"com.amazon.venezia" -> "amazon"
31+
null -> "unknown"
32+
else -> "unknown($installerPackageName)"
3233
}
33-
}
34+
}
3435
}

android/src/main/java/com/tailscale/ipn/QuickToggleService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ public void onStopListening() {
6060
}
6161
}
6262

63+
@SuppressWarnings("deprecation")
6364
@Override
6465
public void onClick() {
6566
boolean r;
@@ -77,6 +78,7 @@ public void onClick() {
7778
// Request code for opening activity.
7879
startActivityAndCollapse(PendingIntent.getActivity(this, 0, i, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE));
7980
} else {
81+
// Deprecated, but still required for older versions.
8082
startActivityAndCollapse(i);
8183
}
8284
}

android/src/main/java/com/tailscale/ipn/ui/model/Permissions.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object Permissions {
2222
@Composable
2323
get() {
2424
val permissionStates = rememberMultiplePermissionsState(permissions = all.map { it.name })
25-
return all.zip(permissionStates.permissions).filter { (permission, state) ->
25+
return all.zip(permissionStates.permissions).filter { (_, state) ->
2626
!state.status.isGranted && !state.status.shouldShowRationale
2727
}
2828
}

android/src/main/java/com/tailscale/ipn/ui/theme/Theme.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ fun AppTheme(useDarkTheme: Boolean = isSystemInDarkTheme(), content: @Composable
4444
// margins in list items.
4545
bodyMedium = MaterialTheme.typography.bodyMedium.copy(fontSize = 16.sp))
4646

47-
val systemUiController = rememberSystemUiController()
47+
// TODO: Migrate to Activity.enableEdgeToEdge
48+
@Suppress("deprecation") val systemUiController = rememberSystemUiController()
4849

4950
DisposableEffect(systemUiController, useDarkTheme) {
5051
systemUiController.setStatusBarColor(color = colors.surfaceContainer)
@@ -446,7 +447,6 @@ val ColorScheme.disabled: Color
446447
val ColorScheme.searchBarColors: TextFieldColors
447448
@Composable
448449
get() {
449-
val defaults = OutlinedTextFieldDefaults.colors()
450450
return OutlinedTextFieldDefaults.colors(
451451
focusedLeadingIconColor = MaterialTheme.colorScheme.onSurface,
452452
unfocusedLeadingIconColor = MaterialTheme.colorScheme.onSurface,

android/src/main/java/com/tailscale/ipn/ui/util/AndroidTVUtil.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import com.tailscale.ipn.ui.util.AndroidTVUtil.isAndroidTV
1515
object AndroidTVUtil {
1616
fun isAndroidTV(): Boolean {
1717
val pm = UninitializedApp.get().packageManager
18-
return (pm.hasSystemFeature(PackageManager.FEATURE_TELEVISION) ||
18+
return (pm.hasSystemFeature(@Suppress("deprecation") PackageManager.FEATURE_TELEVISION) ||
1919
pm.hasSystemFeature(PackageManager.FEATURE_LEANBACK))
2020
}
2121
}

android/src/main/java/com/tailscale/ipn/ui/view/ExitNodePicker.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ fun ExitNodePicker(
6161
if (forcedExitNodeId != null) {
6262
Text(
6363
text =
64-
managedByOrganization?.let {
64+
managedByOrganization.value?.let {
6565
stringResource(R.string.exit_node_mdm_orgname, it)
6666
} ?: stringResource(R.string.exit_node_mdm),
6767
style = MaterialTheme.typography.bodyMedium,

android/src/main/java/com/tailscale/ipn/ui/view/MDMSettingsDebugView.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ import com.tailscale.ipn.ui.viewModel.IpnViewModel
2525

2626
@OptIn(ExperimentalMaterial3Api::class)
2727
@Composable
28-
fun MDMSettingsDebugView(backToSettings: BackNavigation, model: IpnViewModel = viewModel()) {
28+
fun MDMSettingsDebugView(
29+
backToSettings: BackNavigation,
30+
@Suppress("UNUSED_PARAMETER") model: IpnViewModel = viewModel()
31+
) {
2932
Scaffold(topBar = { Header(R.string.current_mdm_settings, onBack = backToSettings) }) {
3033
innerPadding ->
3134
LazyColumn(modifier = Modifier.padding(innerPadding)) {

android/src/main/java/com/tailscale/ipn/ui/view/MainView.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,7 @@ fun MainView(
251251
}
252252
}
253253

254-
currentPingDevice?.let { peer ->
254+
currentPingDevice?.let { _ ->
255255
ModalBottomSheet(onDismissRequest = { viewModel.onPingDismissal() }) {
256256
PingView(model = viewModel.pingViewModel)
257257
}

android/src/main/java/com/tailscale/ipn/ui/view/ManagedByView.kt

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,16 @@ import com.tailscale.ipn.R
2323
import com.tailscale.ipn.mdm.MDMSettings
2424
import com.tailscale.ipn.ui.viewModel.IpnViewModel
2525

26+
@Suppress("UNUSED_PARAMETER")
2627
@Composable
2728
fun ManagedByView(backToSettings: BackNavigation, model: IpnViewModel = viewModel()) {
28-
Scaffold(topBar = { Header(R.string.managed_by, onBack = backToSettings) }) { innerPadding ->
29+
Scaffold(topBar = { Header(R.string.managed_by, onBack = backToSettings) }) { _ ->
2930
Column(
3031
verticalArrangement =
3132
Arrangement.spacedBy(space = 20.dp, alignment = Alignment.CenterVertically),
3233
horizontalAlignment = Alignment.Start,
33-
modifier = Modifier.fillMaxWidth().safeContentPadding().verticalScroll(rememberScrollState())) {
34+
modifier =
35+
Modifier.fillMaxWidth().safeContentPadding().verticalScroll(rememberScrollState())) {
3436
val managedByOrganization =
3537
MDMSettings.managedByOrganizationName.flow.collectAsState().value.value
3638
val managedByCaption = MDMSettings.managedByCaption.flow.collectAsState().value.value

0 commit comments

Comments
 (0)