From 2d443081ae89fa56c233c873c7e6d8276df460cb Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 2 Feb 2023 07:34:07 -0800 Subject: [PATCH] Support report downloads (fix #67) --- .../java/org/traccar/manager/MainFragment.kt | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/app/src/main/java/org/traccar/manager/MainFragment.kt b/app/src/main/java/org/traccar/manager/MainFragment.kt index 8a32149..417dc57 100644 --- a/app/src/main/java/org/traccar/manager/MainFragment.kt +++ b/app/src/main/java/org/traccar/manager/MainFragment.kt @@ -19,12 +19,14 @@ package org.traccar.manager import android.Manifest import android.annotation.SuppressLint import android.app.Activity +import android.app.DownloadManager import android.content.* import android.content.pm.ApplicationInfo import android.content.pm.PackageManager import android.net.Uri import android.os.Build import android.os.Bundle +import android.os.Environment import android.os.Message import android.view.View import android.webkit.* @@ -78,6 +80,7 @@ class MainFragment : WebViewFragment() { } webView.webViewClient = webViewClient webView.webChromeClient = webChromeClient + webView.setDownloadListener(downloadListener) webView.addJavascriptInterface(AppInterface(), "appInterface") val webSettings = webView.settings webSettings.javaScriptEnabled = true @@ -262,6 +265,20 @@ class MainFragment : WebViewFragment() { } } + private val downloadListener = DownloadListener { url, userAgent, contentDisposition, mimeType, contentLength -> + val request = DownloadManager.Request(Uri.parse(url)) + request.setMimeType(mimeType) + request.addRequestHeader("cookie", CookieManager.getInstance().getCookie(url)) + request.allowScanningByMediaScanner() + request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) + request.setDestinationInExternalPublicDir( + Environment.DIRECTORY_DOWNLOADS, + URLUtil.guessFileName(url, contentDisposition, mimeType), + ) + val downloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager + downloadManager.enqueue(request) + } + companion object { const val EVENT_LOGIN = "eventLogin" const val EVENT_TOKEN = "eventToken"