diff --git a/app/build.gradle b/app/build.gradle index 1909d89b9..1dcf5bcf9 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -26,13 +26,13 @@ apply plugin: 'com.google.firebase.crashlytics' android { namespace 'me.zhanghai.android.files' - buildToolsVersion = '34.0.0' - compileSdk 34 - ndkVersion '26.3.11579264' + buildToolsVersion = '35.0.0' + compileSdk 35 + ndkVersion '27.1.12297006' defaultConfig { applicationId 'me.zhanghai.android.files' minSdk 21 - // Not supporting notification runtime permission yet. + // Not supporting foreground service timeout yet. //noinspection OldTargetApi targetSdk 34 versionCode 39 diff --git a/app/src/main/java/me/zhanghai/android/files/coil/VideoFrameFetcher.kt b/app/src/main/java/me/zhanghai/android/files/coil/VideoFrameFetcher.kt index 6600823d6..d18005b03 100644 --- a/app/src/main/java/me/zhanghai/android/files/coil/VideoFrameFetcher.kt +++ b/app/src/main/java/me/zhanghai/android/files/coil/VideoFrameFetcher.kt @@ -122,7 +122,7 @@ class VideoFrameFetcher( } else { outBitmap.width == width && outBitmap.height == height } - val isValidConfig = !outBitmap.config.isHardware || options.config.isHardware + val isValidConfig = outBitmap.config?.isHardware != true || options.config.isHardware val bitmap = if (isValidSize && isValidConfig) { outBitmap } else { diff --git a/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/ApkInfoLiveData.kt b/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/ApkInfoLiveData.kt index 21fb87951..85c2c4df0 100644 --- a/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/ApkInfoLiveData.kt +++ b/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/ApkInfoLiveData.kt @@ -49,11 +49,11 @@ class ApkInfoLiveData(path: Path) : PathObserverLiveData>(path val signingCertificates = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { // PackageInfo.signatures returns only the oldest certificate if there are // past certificates on P and above for compatibility. - packageInfo.signingInfo.apkContentsSigners ?: emptyArray() + packageInfo.signingInfo?.apkContentsSigners } else { @Suppress("DEPRECATION") packageInfo.signatures - } + } ?: emptyArray() val signingCertificateDigests = signingCertificates .map { it.toByteArray().sha1Digest().toHexString() } val pastSigningCertificates = @@ -61,7 +61,7 @@ class ApkInfoLiveData(path: Path) : PathObserverLiveData>(path val signingInfo = packageInfo.signingInfo // SigningInfo.getSigningCertificateHistory() may return the current // certificate if there are no past certificates. - if (signingInfo.hasPastSigningCertificates()) { + if (signingInfo?.hasPastSigningCertificates() == true) { // SigningInfo.getSigningCertificateHistory() also returns the // current certificate. signingInfo.signingCertificateHistory?.toMutableList() diff --git a/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/FilePropertiesApkTabFragment.kt b/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/FilePropertiesApkTabFragment.kt index 1124433cb..50f29ce8b 100644 --- a/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/FilePropertiesApkTabFragment.kt +++ b/app/src/main/java/me/zhanghai/android/files/fileproperties/apk/FilePropertiesApkTabFragment.kt @@ -49,7 +49,7 @@ class FilePropertiesApkTabFragment : FilePropertiesTabFragment() { packageInfo.longVersionCodeCompat ) ) - val applicationInfo = packageInfo.applicationInfo + val applicationInfo = packageInfo.applicationInfo!! // PackageParser didn't return minSdkVersion before N, so it's hard to implement a // compat version. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { @@ -77,7 +77,7 @@ class FilePropertiesApkTabFragment : FilePropertiesTabFragment() { } else { { PermissionListDialogFragment.show( - packageInfo.requestedPermissions, this@FilePropertiesApkTabFragment + packageInfo.requestedPermissions!!, this@FilePropertiesApkTabFragment ) } } diff --git a/app/src/main/java/me/zhanghai/android/files/nonfree/CrashlyticsInitializer.kt b/app/src/main/java/me/zhanghai/android/files/nonfree/CrashlyticsInitializer.kt index e613f5eb6..d2dc3a4e0 100644 --- a/app/src/main/java/me/zhanghai/android/files/nonfree/CrashlyticsInitializer.kt +++ b/app/src/main/java/me/zhanghai/android/files/nonfree/CrashlyticsInitializer.kt @@ -9,12 +9,12 @@ import android.annotation.SuppressLint import android.content.pm.PackageManager import android.content.pm.Signature import com.google.firebase.crashlytics.FirebaseCrashlytics +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException import me.zhanghai.android.files.BuildConfig import me.zhanghai.android.files.app.application import me.zhanghai.android.files.app.packageManager import me.zhanghai.android.files.util.getPackageInfoOrNull -import java.security.MessageDigest -import java.security.NoSuchAlgorithmException object CrashlyticsInitializer { private val HEX_CHARS = "0123456789ABCDEF".toCharArray() @@ -39,9 +39,10 @@ object CrashlyticsInitializer { val packageInfo = packageManager.getPackageInfoOrNull( application.packageName, PackageManager.GET_SIGNATURES ) ?: return false - return packageInfo.signatures.size == 1 - && computeCertificateFingerprint(packageInfo.signatures[0]) == ("87:3B:9B:60:C7:7C:F7" - + ":F3:CD:5F:AE:66:D0:FE:11:2C:4A:86:97:3E:11:8E:E8:A2:9C:34:6C:4C:67:3C:97:F0") + val signatures = packageInfo.signatures ?: return false + return signatures.size == 1 && + computeCertificateFingerprint(signatures[0]) == "87:3B:9B:60:C7:7C:F7:F3:CD:5F:AE:66" + + ":D0:FE:11:2C:4A:86:97:3E:11:8E:E8:A2:9C:34:6C:4C:67:3C:97:F0" } private fun computeCertificateFingerprint(certificate: Signature): String {