mirror of
				https://github.com/mihonapp/mihon.git
				synced 2025-11-03 23:58:55 +01:00 
			
		
		
		
	use explicit file url instead of download manager's content url (#2859)
This commit is contained in:
		@@ -6,7 +6,7 @@ import android.content.Context
 | 
			
		||||
import android.content.Intent
 | 
			
		||||
import android.content.IntentFilter
 | 
			
		||||
import android.net.Uri
 | 
			
		||||
import android.os.Build
 | 
			
		||||
import android.os.Environment
 | 
			
		||||
import com.jakewharton.rxrelay.PublishRelay
 | 
			
		||||
import eu.kanade.tachiyomi.extension.model.Extension
 | 
			
		||||
import eu.kanade.tachiyomi.extension.model.InstallStep
 | 
			
		||||
@@ -63,9 +63,11 @@ internal class ExtensionInstaller(private val context: Context) {
 | 
			
		||||
        // Register the receiver after removing (and unregistering) the previous download
 | 
			
		||||
        downloadReceiver.register()
 | 
			
		||||
 | 
			
		||||
        val request = DownloadManager.Request(Uri.parse(url))
 | 
			
		||||
        val downloadUri = Uri.parse(url)
 | 
			
		||||
        val request = DownloadManager.Request(downloadUri)
 | 
			
		||||
                .setTitle(extension.name)
 | 
			
		||||
                .setMimeType(APK_MIME)
 | 
			
		||||
                .setDestinationInExternalFilesDir(context, Environment.DIRECTORY_DOWNLOADS, downloadUri.lastPathSegment)
 | 
			
		||||
                .setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED)
 | 
			
		||||
 | 
			
		||||
        val id = downloadManager.enqueue(request)
 | 
			
		||||
@@ -221,20 +223,15 @@ internal class ExtensionInstaller(private val context: Context) {
 | 
			
		||||
                return
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Due to a bug in Android versions prior to N, the installer can't open files that do
 | 
			
		||||
            // not contain the extension in the path, even if you specify the correct MIME.
 | 
			
		||||
            if (Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
 | 
			
		||||
                val query = DownloadManager.Query().setFilterById(id)
 | 
			
		||||
                downloadManager.query(query).use { cursor ->
 | 
			
		||||
                    if (cursor.moveToFirst()) {
 | 
			
		||||
                        @Suppress("DEPRECATION")
 | 
			
		||||
                        val uriCompat = File(cursor.getString(cursor.getColumnIndex(
 | 
			
		||||
                                DownloadManager.COLUMN_LOCAL_FILENAME))).getUriCompat(context)
 | 
			
		||||
                        installApk(id, uriCompat)
 | 
			
		||||
                    }
 | 
			
		||||
            val query = DownloadManager.Query().setFilterById(id)
 | 
			
		||||
            downloadManager.query(query).use { cursor ->
 | 
			
		||||
                if (cursor.moveToFirst()) {
 | 
			
		||||
                    val localUri = cursor.getString(
 | 
			
		||||
                            cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)
 | 
			
		||||
                    ).removePrefix(FILE_SCHEME)
 | 
			
		||||
 | 
			
		||||
                    installApk(id, File(localUri).getUriCompat(context))
 | 
			
		||||
                }
 | 
			
		||||
            } else {
 | 
			
		||||
                installApk(id, uri)
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
@@ -242,5 +239,6 @@ internal class ExtensionInstaller(private val context: Context) {
 | 
			
		||||
    companion object {
 | 
			
		||||
        const val APK_MIME = "application/vnd.android.package-archive"
 | 
			
		||||
        const val EXTRA_DOWNLOAD_ID = "ExtensionInstaller.extra.DOWNLOAD_ID"
 | 
			
		||||
        const val FILE_SCHEME = "file://"
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user