Merge remote-tracking branch 'origin/dev' into dev
This commit is contained in:
commit
f53d27bd53
3 changed files with 62 additions and 16 deletions
|
@ -21,6 +21,20 @@ import eu.kanade.tachiyomi.util.system.getApplicationIcon
|
|||
|
||||
class AddonLoader {
|
||||
companion object {
|
||||
|
||||
/**
|
||||
* Load an extension from a package name with a specific class name
|
||||
* @param context the context
|
||||
* @param packageName the package name of the extension
|
||||
* @param type the type of extension
|
||||
* @return the loaded extension
|
||||
* @throws IllegalStateException if the extension is not of the correct type
|
||||
* @throws ClassNotFoundException if the extension class is not found
|
||||
* @throws NoClassDefFoundError if the extension class is not found
|
||||
* @throws Exception if any other error occurs
|
||||
* @throws PackageManager.NameNotFoundException if the package is not found
|
||||
* @throws IllegalStateException if the extension is not found
|
||||
*/
|
||||
fun loadExtension(
|
||||
context: Context,
|
||||
packageName: String,
|
||||
|
@ -70,11 +84,11 @@ class AddonLoader {
|
|||
val loadedClass = try {
|
||||
Class.forName(className, false, classLoader)
|
||||
} catch (e: ClassNotFoundException) {
|
||||
Logger.log("Extension load error: $extName ($className)")
|
||||
Logger.log("ClassNotFoundException load error: $extName ($className)")
|
||||
Logger.log(e)
|
||||
throw e
|
||||
} catch (e: NoClassDefFoundError) {
|
||||
Logger.log("Extension load error: $extName ($className)")
|
||||
Logger.log("NoClassDefFoundError load error: $extName ($className)")
|
||||
Logger.log(e)
|
||||
throw e
|
||||
} catch (e: Exception) {
|
||||
|
@ -117,8 +131,16 @@ class AddonLoader {
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Load an extension from a package name (class is determined by type)
|
||||
* @param context the context
|
||||
* @param packageName the package name of the extension
|
||||
* @param type the type of extension
|
||||
* @return the loaded extension
|
||||
*/
|
||||
fun loadFromPkgName(context: Context, packageName: String, type: AddonType): LoadResult? {
|
||||
return when (type) {
|
||||
return try {
|
||||
when (type) {
|
||||
AddonType.TORRENT -> loadExtension(
|
||||
context,
|
||||
packageName,
|
||||
|
@ -133,8 +155,19 @@ class AddonLoader {
|
|||
type
|
||||
)
|
||||
}
|
||||
} catch (e: Exception) {
|
||||
Logger.log("Error loading extension from package name: $packageName")
|
||||
Logger.log(e)
|
||||
null
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Check if a package is an extension by comparing the package name
|
||||
* @param type the type of extension
|
||||
* @param pkgInfo the package info
|
||||
* @return true if the package is an extension
|
||||
*/
|
||||
private fun isPackageAnExtension(type: String, pkgInfo: PackageInfo): Boolean {
|
||||
return pkgInfo.packageName.equals(type)
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
package eu.kanade.tachiyomi.extension.util
|
||||
|
||||
import android.app.DownloadManager
|
||||
import android.app.ForegroundServiceStartNotAllowedException
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
|
@ -11,9 +12,11 @@ import android.os.Environment
|
|||
import androidx.core.content.ContextCompat
|
||||
import androidx.core.content.getSystemService
|
||||
import androidx.core.net.toUri
|
||||
import ani.dantotsu.R
|
||||
import ani.dantotsu.media.AddonType
|
||||
import ani.dantotsu.media.MediaType
|
||||
import ani.dantotsu.media.Type
|
||||
import ani.dantotsu.toast
|
||||
import ani.dantotsu.util.Logger
|
||||
import com.jakewharton.rxrelay.PublishRelay
|
||||
import eu.kanade.domain.base.BasePreferences
|
||||
|
@ -160,7 +163,16 @@ class ExtensionInstaller(private val context: Context) {
|
|||
else -> {
|
||||
val intent =
|
||||
ExtensionInstallService.getIntent(context, type, downloadId, uri, installer)
|
||||
try {
|
||||
ContextCompat.startForegroundService(context, intent)
|
||||
} catch (e: RuntimeException) {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S && e is ForegroundServiceStartNotAllowedException) {
|
||||
toast(context.getString(R.string.error_msg, context.getString(R.string.foreground_service_not_allowed)))
|
||||
} else {
|
||||
toast(context.getString(R.string.error_msg, e.message))
|
||||
}
|
||||
Logger.log(e)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -995,4 +995,5 @@ Non quae tempore quo provident laudantium qui illo dolor vel quia dolor et exerc
|
|||
<string name="view_subscriptions_desc">View and edit all your subscriptions</string>
|
||||
<string name="subscriptions">Subscriptions</string>
|
||||
<string name="subscription_deleted">Subscription Deleted</string>
|
||||
<string name="foreground_service_not_allowed">Cannot install when app is in background</string>
|
||||
</resources>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue