From ade73fd5bc38e8e1f1a4ab3b44132da63f2f7982 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Wed, 20 Jul 2022 01:29:12 +0530 Subject: Compile against SDK 33 (#2023) * Compile against SDK 33 * autofill-parser: fix warnings for SDK 33 upgrade * app: fix warnings for SDK 33 upgrade * Mark all clipboard content as sensitive from crypto activities * Skip Snackbar on Android 13 and above * detekt: raise `TooManyFunctions` limit to 15 --- .../autofillparser/AutofillFormParser.kt | 12 ++++++- .../autofillparser/AutofillHelper.kt | 10 +++++- .../autofillparser/AutofillScenario.kt | 39 ++++++++++++++++++---- .../autofillparser/FeatureAndTrustDetection.kt | 11 +++++- 4 files changed, 63 insertions(+), 9 deletions(-) (limited to 'autofill-parser/src') diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillFormParser.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillFormParser.kt index 78af009d..952bc3f0 100644 --- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillFormParser.kt +++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillFormParser.kt @@ -7,7 +7,9 @@ package com.github.androidpasswordstore.autofillparser import android.app.assist.AssistStructure import android.content.Context import android.content.pm.PackageManager +import android.content.pm.PackageManager.ApplicationInfoFlags import android.net.Uri +import android.os.Build import android.os.Bundle import android.view.autofill.AutofillId import androidx.annotation.RequiresApi @@ -41,7 +43,15 @@ public sealed class FormOrigin(public open val identifier: String) { is Web -> identifier is App -> { val info = - context.packageManager.getApplicationInfo(identifier, PackageManager.GET_META_DATA) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.packageManager.getApplicationInfo( + identifier, + ApplicationInfoFlags.of(PackageManager.GET_META_DATA.toLong()) + ) + } else { + @Suppress("DEPRECATION") + context.packageManager.getApplicationInfo(identifier, PackageManager.GET_META_DATA) + } val label = context.packageManager.getApplicationLabel(info) if (untrusted) "“$label”" else "$label" } diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillHelper.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillHelper.kt index 5874bf77..7e5a3d33 100644 --- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillHelper.kt +++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillHelper.kt @@ -54,7 +54,15 @@ public fun computeCertificatesHash(context: Context, appPackage: String): String val stableHashOld = stableHash(signaturesOld.map { it.toByteArray() }) if (Build.VERSION.SDK_INT >= 28) { val info = - context.packageManager.getPackageInfo(appPackage, PackageManager.GET_SIGNING_CERTIFICATES) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.packageManager.getPackageInfo( + appPackage, + PackageManager.PackageInfoFlags.of(PackageManager.GET_SIGNING_CERTIFICATES.toLong()) + ) + } else { + @Suppress("DEPRECATION") + context.packageManager.getPackageInfo(appPackage, PackageManager.GET_SIGNING_CERTIFICATES) + } val signaturesNew = info.signingInfo.signingCertificateHistory ?: info.signingInfo.apkContentsSigners val stableHashNew = stableHash(signaturesNew.map { it.toByteArray() }) diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillScenario.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillScenario.kt index 7476f56c..d2a95b40 100644 --- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillScenario.kt +++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/AutofillScenario.kt @@ -5,8 +5,11 @@ package com.github.androidpasswordstore.autofillparser import android.app.assist.AssistStructure +import android.os.Build import android.os.Bundle +import android.os.Parcelable import android.service.autofill.Dataset +import android.service.autofill.Field import android.view.autofill.AutofillId import android.view.autofill.AutofillValue import androidx.annotation.RequiresApi @@ -54,17 +57,19 @@ public sealed class AutofillScenario { return try { Builder() .apply { - username = clientState.getParcelable(BUNDLE_KEY_USERNAME_ID) + username = clientState.getParcelableCompat(BUNDLE_KEY_USERNAME_ID) fillUsername = clientState.getBoolean(BUNDLE_KEY_FILL_USERNAME) - otp = clientState.getParcelable(BUNDLE_KEY_OTP_ID) + otp = clientState.getParcelableCompat(BUNDLE_KEY_OTP_ID) currentPassword.addAll( - clientState.getParcelableArrayList(BUNDLE_KEY_CURRENT_PASSWORD_IDS) ?: emptyList() + clientState.getParcelableArrayListCompat(BUNDLE_KEY_CURRENT_PASSWORD_IDS) + ?: emptyList() ) newPassword.addAll( - clientState.getParcelableArrayList(BUNDLE_KEY_NEW_PASSWORD_IDS) ?: emptyList() + clientState.getParcelableArrayListCompat(BUNDLE_KEY_NEW_PASSWORD_IDS) ?: emptyList() ) genericPassword.addAll( - clientState.getParcelableArrayList(BUNDLE_KEY_GENERIC_PASSWORD_IDS) ?: emptyList() + clientState.getParcelableArrayListCompat(BUNDLE_KEY_GENERIC_PASSWORD_IDS) + ?: emptyList() ) } .build() @@ -73,6 +78,24 @@ public sealed class AutofillScenario { null } } + + private inline fun Bundle.getParcelableCompat(key: String): T? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getParcelable(key, T::class.java) + } else { + @Suppress("DEPRECATION") getParcelable(key) + } + } + + private inline fun Bundle.getParcelableArrayListCompat( + key: String + ): ArrayList? { + return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + getParcelableArrayList(key, T::class.java) + } else { + @Suppress("DEPRECATION") getParcelableArrayList(key) + } + } } internal class Builder { @@ -231,7 +254,11 @@ public fun Dataset.Builder.fillWith( scenario.otp -> credentialsToFill.otp else -> credentialsToFill.password } - setValue(field, AutofillValue.forText(value)) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + setField(field, Field.Builder().setValue(AutofillValue.forText(value)).build()) + } else { + @Suppress("DEPRECATION") setValue(field, AutofillValue.forText(value)) + } } } diff --git a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/FeatureAndTrustDetection.kt b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/FeatureAndTrustDetection.kt index 58f400ef..7c4d0c2e 100644 --- a/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/FeatureAndTrustDetection.kt +++ b/autofill-parser/src/main/java/com/github/androidpasswordstore/autofillparser/FeatureAndTrustDetection.kt @@ -7,6 +7,7 @@ package com.github.androidpasswordstore.autofillparser import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.content.pm.PackageManager.ResolveInfoFlags import android.net.Uri import android.os.Build import android.provider.Settings @@ -247,7 +248,15 @@ public fun getInstalledBrowsersWithAutofillSupportLevel( ): List> { val testWebIntent = Intent(Intent.ACTION_VIEW).apply { data = Uri.parse("https://example.org") } val installedBrowsers = - context.packageManager.queryIntentActivities(testWebIntent, PackageManager.MATCH_ALL) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + context.packageManager.queryIntentActivities( + testWebIntent, + ResolveInfoFlags.of(PackageManager.MATCH_ALL.toLong()) + ) + } else { + @Suppress("DEPRECATION") + context.packageManager.queryIntentActivities(testWebIntent, PackageManager.MATCH_ALL) + } return installedBrowsers .map { it to getBrowserAutofillSupportLevel(context, it.activityInfo.packageName) } .filter { it.first.isDefault || it.second != BrowserAutofillSupportLevel.None } -- cgit v1.2.3