diff --git a/app/src/main/java/com/android/grape/sai/ApkSourceBuilder.kt b/app/src/main/java/com/android/grape/sai/ApkSourceBuilder.kt index ae9e2a4..4e1ae00 100644 --- a/app/src/main/java/com/android/grape/sai/ApkSourceBuilder.kt +++ b/app/src/main/java/com/android/grape/sai/ApkSourceBuilder.kt @@ -83,7 +83,9 @@ class ApkSourceBuilder(private val mContext: Context) { val apkFileDescriptors: MutableList = ArrayList( mApkFiles?.size?: 0 ) - for (apkFile in mApkFiles!!) apkFileDescriptors.add(NormalFileDescriptor(apkFile)) + mApkFiles?.let { + for (apkFile in it) apkFileDescriptors.add(NormalFileDescriptor(apkFile)) + } apkSource = DefaultApkSource(apkFileDescriptors) } else if (mZipFile != null) { diff --git a/app/src/main/java/com/android/grape/sai/FlexSaiPackageInstaller.kt b/app/src/main/java/com/android/grape/sai/FlexSaiPackageInstaller.kt index 6d49020..5fc9b78 100644 --- a/app/src/main/java/com/android/grape/sai/FlexSaiPackageInstaller.kt +++ b/app/src/main/java/com/android/grape/sai/FlexSaiPackageInstaller.kt @@ -59,13 +59,16 @@ class FlexSaiPackageInstaller private constructor(c: Context) : SaiPackageInstal installer: SaiPackageInstaller, params: SaiPiSessionParams ): String { - val sessionId = installer.createSession(params) - mSessionIdToInstaller[sessionId!!] = installer + val sessionId = installer.createSession(params)?:"" + mSessionIdToInstaller[sessionId] = installer return sessionId } override fun createSession(params: SaiPiSessionParams): String { - return createSessionOnInstaller(mDefaultInstaller!!, params) + mDefaultInstaller?.let { + return createSessionOnInstaller(it, params) + } + return "" } override fun enqueueSession(sessionId: String) { diff --git a/app/src/main/java/com/android/grape/sai/MyBroadcastReceiver.kt b/app/src/main/java/com/android/grape/sai/MyBroadcastReceiver.kt index 3151fc6..304456b 100644 --- a/app/src/main/java/com/android/grape/sai/MyBroadcastReceiver.kt +++ b/app/src/main/java/com/android/grape/sai/MyBroadcastReceiver.kt @@ -18,7 +18,7 @@ class MyBroadcastReceiver : BroadcastReceiver() { //接收广播消息 fruit = intent.getStringExtra("fruit") //调用接口MyReceiver里面的interFruit方法传入接收的内容 - mReceiver!!.interFruit(fruit) + mReceiver?.interFruit(fruit) //使用Toast显示广播消息 Toast.makeText(context, fruit, Toast.LENGTH_SHORT).show() } diff --git a/app/src/main/java/com/android/grape/sai/RootlessSaiPiBroadcastReceiver.kt b/app/src/main/java/com/android/grape/sai/RootlessSaiPiBroadcastReceiver.kt index f9db119..e5ae184 100644 --- a/app/src/main/java/com/android/grape/sai/RootlessSaiPiBroadcastReceiver.kt +++ b/app/src/main/java/com/android/grape/sai/RootlessSaiPiBroadcastReceiver.kt @@ -116,7 +116,7 @@ class RootlessSaiPiBroadcastReceiver(c: Context) : BroadcastReceiver() { val androidPackageInstallerError: AndroidPackageInstallerError = getAndroidPmError(errorCode, error) - if (androidPackageInstallerError !== AndroidPackageInstallerError.UNKNOWN) { + if (androidPackageInstallerError != AndroidPackageInstallerError.UNKNOWN) { return androidPackageInstallerError.getDescription(mContext) } diff --git a/app/src/main/java/com/android/grape/sai/ShellSaiPackageInstaller.kt b/app/src/main/java/com/android/grape/sai/ShellSaiPackageInstaller.kt index b02dba9..3968784 100644 --- a/app/src/main/java/com/android/grape/sai/ShellSaiPackageInstaller.kt +++ b/app/src/main/java/com/android/grape/sai/ShellSaiPackageInstaller.kt @@ -53,9 +53,9 @@ abstract class ShellSaiPackageInstaller protected constructor(c: Context?) : val installedPackage: String try { - installedPackage = intent.dataString!!.replace("package:", "") + installedPackage = intent.dataString?.replace("package:", "")?:"" val installerPackage: String = - context.getPackageManager().getInstallerPackageName(installedPackage)?:"" + context.packageManager.getInstallerPackageName(installedPackage)?:"" Log.d(tag(), "installerPackage=$installerPackage") if ("com.android.grape" != installerPackage) return } catch (e: Exception) { @@ -135,6 +135,7 @@ abstract class ShellSaiPackageInstaller protected constructor(c: Context?) : return } androidSessionId = createSession() + //todo params.apkSource().apkLocalPath? val path = "/sdcard/apks/" + "com.zhiliaoapp.musically" val file = File(path) diff --git a/app/src/main/java/com/android/grape/sai/apksource/CopyToFileApkSource.kt b/app/src/main/java/com/android/grape/sai/apksource/CopyToFileApkSource.kt index 7800bb0..6ebf0b3 100644 --- a/app/src/main/java/com/android/grape/sai/apksource/CopyToFileApkSource.kt +++ b/app/src/main/java/com/android/grape/sai/apksource/CopyToFileApkSource.kt @@ -28,7 +28,7 @@ class CopyToFileApkSource(context: Context, wrappedApkSource: ApkSource) : IOUtils.deleteRecursively(it) } - mCurrentApkFile = File(mTempDir, mWrappedApkSource.apkName) + mCurrentApkFile = File(mTempDir, mWrappedApkSource.apkName?:"") mWrappedApkSource.openApkInputStream().use { `in` -> FileOutputStream(mCurrentApkFile).use { out -> diff --git a/app/src/main/java/com/android/grape/sai/apksource/SignerApkSource.kt b/app/src/main/java/com/android/grape/sai/apksource/SignerApkSource.kt index c51b2dd..3ea0b28 100644 --- a/app/src/main/java/com/android/grape/sai/apksource/SignerApkSource.kt +++ b/app/src/main/java/com/android/grape/sai/apksource/SignerApkSource.kt @@ -34,7 +34,7 @@ class SignerApkSource(private val mContext: Context, apkSource: ApkSource) : Apk ) } - mCurrentSignedApkFile = File(mTempDir, apkName) + mCurrentSignedApkFile = File(mTempDir, apkName?:"") mWrappedApkSource.openApkInputStream()?.let { mApkSigner?.sign( it, diff --git a/app/src/main/java/com/android/grape/sai/filedescriptor/FileUtils.kt b/app/src/main/java/com/android/grape/sai/filedescriptor/FileUtils.kt index 67b6392..7e7ec7c 100644 --- a/app/src/main/java/com/android/grape/sai/filedescriptor/FileUtils.kt +++ b/app/src/main/java/com/android/grape/sai/filedescriptor/FileUtils.kt @@ -38,11 +38,11 @@ object FileUtils { } private fun trimFilename(res: StringBuilder, maxBytes: Int) { - var maxBytes = maxBytes + var bytes = maxBytes var raw = res.toString().toByteArray(StandardCharsets.UTF_8) - if (raw.size > maxBytes) { - maxBytes -= 3 - while (raw.size > maxBytes) { + if (raw.size > bytes) { + bytes -= 3 + while (raw.size > bytes) { res.deleteCharAt(res.length / 2) raw = res.toString().toByteArray(StandardCharsets.UTF_8) } diff --git a/app/src/main/java/com/android/grape/sai/filedescriptor/ZipApkSource.kt b/app/src/main/java/com/android/grape/sai/filedescriptor/ZipApkSource.kt index 3de5820..87d7167 100644 --- a/app/src/main/java/com/android/grape/sai/filedescriptor/ZipApkSource.kt +++ b/app/src/main/java/com/android/grape/sai/filedescriptor/ZipApkSource.kt @@ -25,14 +25,15 @@ class ZipApkSource(private val mContext: Context, private val mZipFileDescriptor @Throws(Exception::class) override fun nextApk(): Boolean { if (!mIsOpen) { - mZipInputStream = ZipInputStream(mZipFileDescriptor.open()) - mWrappedStream = ZipInputStreamWrapper(mZipInputStream!!) + mZipInputStream = ZipInputStream(mZipFileDescriptor.open()).apply { + mWrappedStream = ZipInputStreamWrapper(this) + } mIsOpen = true } do { try { - entry = mZipInputStream!!.nextEntry + entry = mZipInputStream?.nextEntry } catch (e: ZipException) { if (e.message == "only DEFLATED entries can have EXT descriptor") { throw ZipException("only DEFLATED entries can have EXT descriptor") diff --git a/app/src/main/java/com/android/grape/sai/filedescriptor/ZipFileApkSource.kt b/app/src/main/java/com/android/grape/sai/filedescriptor/ZipFileApkSource.kt index 6642a3b..fe077a0 100644 --- a/app/src/main/java/com/android/grape/sai/filedescriptor/ZipFileApkSource.kt +++ b/app/src/main/java/com/android/grape/sai/filedescriptor/ZipFileApkSource.kt @@ -35,13 +35,14 @@ class ZipFileApkSource(context: Context, private val mZipFileDescriptor: FileDes if (mZipFile == null) copyAndOpenZip() entry = null - while (entry == null && mZipEntries!!.hasMoreElements()) { - val nextEntry = mZipEntries!!.nextElement() - if (!nextEntry.isDirectory && nextEntry.name.lowercase(Locale.getDefault()) - .endsWith(".apk") - ) { - entry = nextEntry - mSeenApkFile = true + while (entry == null && mZipEntries?.hasMoreElements() == true) { + mZipEntries?.nextElement()?.let { nextEntry -> + if (!nextEntry.isDirectory && nextEntry.name.lowercase(Locale.getDefault()) + .endsWith(".apk") + ) { + entry = nextEntry + mSeenApkFile = true + } } } diff --git a/app/src/main/java/com/android/grape/sai/param/PackageMeta.kt b/app/src/main/java/com/android/grape/sai/param/PackageMeta.kt index 1c638fb..16d355f 100644 --- a/app/src/main/java/com/android/grape/sai/param/PackageMeta.kt +++ b/app/src/main/java/com/android/grape/sai/param/PackageMeta.kt @@ -138,7 +138,7 @@ class PackageMeta : Parcelable { return Builder(applicationInfo.packageName) .setLabel(applicationInfo.loadLabel(pm).toString()) - .setHasSplits(applicationInfo.splitPublicSourceDirs != null && applicationInfo.splitPublicSourceDirs!!.size > 0) + .setHasSplits(applicationInfo.splitPublicSourceDirs != null && applicationInfo.splitPublicSourceDirs?.isNotEmpty() == true) .setIsSystemApp((applicationInfo.flags and ApplicationInfo.FLAG_SYSTEM) != 0) .setVersionCode(if (Utils.apiIsAtLeast(Build.VERSION_CODES.P)) packageInfo.longVersionCode else packageInfo.versionCode.toLong()) .setVersionName(packageInfo.versionName) diff --git a/app/src/main/java/com/android/grape/sai/param/SaiPiSessionState.kt b/app/src/main/java/com/android/grape/sai/param/SaiPiSessionState.kt index a4113d7..88f165f 100644 --- a/app/src/main/java/com/android/grape/sai/param/SaiPiSessionState.kt +++ b/app/src/main/java/com/android/grape/sai/param/SaiPiSessionState.kt @@ -127,11 +127,11 @@ class SaiPiSessionState private constructor( } fun error(shortError: String?, fullError: String?): Builder { - var fullError = fullError + var error = fullError mState.mShortError = shortError - if (fullError == null) fullError = shortError + if (error == null) error = shortError - mState.mFullError = fullError + mState.mFullError = error return this } diff --git a/app/src/main/java/com/android/grape/sai/prefers/PreferencesHelper.kt b/app/src/main/java/com/android/grape/sai/prefers/PreferencesHelper.kt index 7345354..753e084 100644 --- a/app/src/main/java/com/android/grape/sai/prefers/PreferencesHelper.kt +++ b/app/src/main/java/com/android/grape/sai/prefers/PreferencesHelper.kt @@ -3,6 +3,7 @@ package com.android.grape.sai.prefers import android.content.Context import android.content.SharedPreferences import android.os.Environment +import androidx.core.content.edit class PreferencesHelper private constructor(c: Context) { @@ -50,7 +51,7 @@ class PreferencesHelper private constructor(c: Context) { } fun setShouldSignApks(signApks: Boolean) { - prefs.edit().putBoolean(PreferencesKeys.SIGN_APKS, signApks).apply() + prefs.edit { putBoolean(PreferencesKeys.SIGN_APKS, signApks) } } fun shouldExtractArchives(): Boolean { @@ -64,7 +65,7 @@ class PreferencesHelper private constructor(c: Context) { var installer: Int get() = prefs.getInt(PreferencesKeys.INSTALLER, PreferencesValues.INSTALLER_ROOTED) set(installer) { - prefs.edit().putInt(PreferencesKeys.INSTALLER, installer).apply() + prefs.edit { putInt(PreferencesKeys.INSTALLER, installer) } } var backupFileNameFormat: String? @@ -73,7 +74,7 @@ class PreferencesHelper private constructor(c: Context) { PreferencesValues.BACKUP_FILE_NAME_FORMAT_DEFAULT ) set(format) { - prefs.edit().putString(PreferencesKeys.BACKUP_FILE_NAME_FORMAT, format).apply() + prefs.edit { putString(PreferencesKeys.BACKUP_FILE_NAME_FORMAT, format) } } var installLocation: Int @@ -87,8 +88,9 @@ class PreferencesHelper private constructor(c: Context) { } } set(installLocation) { - prefs.edit().putString(PreferencesKeys.INSTALL_LOCATION, installLocation.toString()) - .apply() + prefs.edit { + putString(PreferencesKeys.INSTALL_LOCATION, installLocation.toString()) + } } fun useOldInstaller(): Boolean { @@ -108,7 +110,7 @@ class PreferencesHelper private constructor(c: Context) { } fun setSafTipShown() { - prefs.edit().putBoolean(PreferencesKeys.SAF_TIP_SHOWN, true).apply() + prefs.edit { putBoolean(PreferencesKeys.SAF_TIP_SHOWN, true) } } val isInstallerXEnabled: Boolean @@ -120,19 +122,19 @@ class PreferencesHelper private constructor(c: Context) { var isAnalyticsEnabled: Boolean get() = prefs.getBoolean(PreferencesKeys.ENABLE_ANALYTICS, true) set(enabled) { - prefs.edit().putBoolean(PreferencesKeys.ENABLE_ANALYTICS, enabled).apply() + prefs.edit { putBoolean(PreferencesKeys.ENABLE_ANALYTICS, enabled) } } var isInitialIndexingDone: Boolean get() = prefs.getBoolean(PreferencesKeys.INITIAL_INDEXING_RUN, false) set(done) { - prefs.edit().putBoolean(PreferencesKeys.INITIAL_INDEXING_RUN, done).apply() + prefs.edit { putBoolean(PreferencesKeys.INITIAL_INDEXING_RUN, done) } } var isSingleApkExportEnabled: Boolean get() = prefs.getBoolean(PreferencesKeys.BACKUP_APK_EXPORT, false) set(enabled) { - prefs.edit().putBoolean(PreferencesKeys.BACKUP_APK_EXPORT, enabled).apply() + prefs.edit { putBoolean(PreferencesKeys.BACKUP_APK_EXPORT, enabled) } } companion object { diff --git a/app/src/main/java/com/android/grape/service/MyAccessibilityService.kt b/app/src/main/java/com/android/grape/service/MyAccessibilityService.kt index 77dc64a..6b63810 100644 --- a/app/src/main/java/com/android/grape/service/MyAccessibilityService.kt +++ b/app/src/main/java/com/android/grape/service/MyAccessibilityService.kt @@ -40,9 +40,7 @@ class MyAccessibilityService:AccessibilityService(){ val manager: NotificationManager = getSystemService( NotificationManager::class.java ) - if (manager != null) { - manager.createNotificationChannel(channel) - } + manager.createNotificationChannel(channel) } } diff --git a/app/src/main/java/com/android/grape/util/Util.kt b/app/src/main/java/com/android/grape/util/Util.kt index ee74d60..66d0e70 100644 --- a/app/src/main/java/com/android/grape/util/Util.kt +++ b/app/src/main/java/com/android/grape/util/Util.kt @@ -275,10 +275,7 @@ object Util { } fun isInstallRet(): Boolean { - if (installRet == null) { - return false - } - return installRet!! + return installRet?:false } fun setAfLog(afLogV: String) { diff --git a/app/src/main/java/com/android/grape/work/CheckAccessibilityWorker.kt b/app/src/main/java/com/android/grape/work/CheckAccessibilityWorker.kt index 65ec54b..81cdda9 100644 --- a/app/src/main/java/com/android/grape/work/CheckAccessibilityWorker.kt +++ b/app/src/main/java/com/android/grape/work/CheckAccessibilityWorker.kt @@ -9,6 +9,7 @@ import android.text.TextUtils import androidx.work.CoroutineWorker import androidx.work.WorkerParameters import com.android.grape.service.MyAccessibilityService +import androidx.core.content.edit class CheckAccessibilityWorker( context: Context, @@ -32,7 +33,7 @@ class CheckAccessibilityWorker( applicationContext.startActivity(intent) // 更新状态 - sharedPreferences.edit().putBoolean("accessibility_prompted", true).apply() + sharedPreferences.edit { putBoolean("accessibility_prompted", true) } } return Result.retry() }