Ver código fonte

add file downloading from pro college

Ethosa 3 anos atrás
pai
commit
8b2beb6790

+ 3 - 0
app/src/main/AndroidManifest.xml

@@ -4,6 +4,9 @@
     package="com.ethosa.ktc">
 
     <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"
+        tools:ignore="ScopedStorage" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
 
     <application
         android:allowBackup="true"

+ 20 - 5
app/src/main/java/com/ethosa/ktc/college/ProCollege.kt

@@ -1,13 +1,17 @@
 package com.ethosa.ktc.college
 
 import android.annotation.SuppressLint
+import android.app.DownloadManager
 import android.content.ActivityNotFoundException
-import android.content.Intent
+import android.content.Context.DOWNLOAD_SERVICE
 import android.net.Uri
+import android.os.Build
+import android.os.Environment
 import android.view.View
 import android.webkit.*
 import android.widget.Toast
 import androidx.annotation.Keep
+import androidx.core.content.ContextCompat.getSystemService
 import com.ethosa.ktc.Constants
 import com.ethosa.ktc.ui.fragments.ProCollegeFragment
 
@@ -134,10 +138,21 @@ class ProCollege(
             }
         }
 
-        fragment.binding.content.setDownloadListener { url, _, _, _, _ ->
-            val i = Intent(Intent.ACTION_VIEW)
-            i.data = Uri.parse(url)
-            fragment.startActivity(i)
+        fragment.binding.content.setDownloadListener { url, _, contentDisposition, mimetype, _ ->
+            val req = DownloadManager.Request(Uri.parse(url))
+            req.setTitle(URLUtil.guessFileName(url, contentDisposition, mimetype))
+            req.setDescription("Downloading file...")
+            req.setNotificationVisibility(
+                DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED
+            )
+            req.setDestinationInExternalPublicDir(
+                Environment.DIRECTORY_DOWNLOADS,
+                URLUtil.guessFileName(url, contentDisposition, mimetype)
+            )
+            val dm = fragment.requireActivity().getSystemService(
+                DOWNLOAD_SERVICE
+            ) as DownloadManager?
+            dm?.enqueue(req)
         }
 
         fragment.binding.content.loadUrl(LOGIN_PAGE)

+ 26 - 0
app/src/main/java/com/ethosa/ktc/ui/fragments/ProCollegeFragment.kt

@@ -1,5 +1,6 @@
 package com.ethosa.ktc.ui.fragments
 
+import android.Manifest
 import android.app.Activity.RESULT_OK
 import android.content.Intent
 import android.content.res.Configuration
@@ -9,6 +10,8 @@ import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.webkit.ValueCallback
+import android.widget.Toast
+import androidx.core.app.ActivityCompat
 import androidx.fragment.app.Fragment
 import androidx.webkit.WebSettingsCompat
 import androidx.webkit.WebSettingsCompat.FORCE_DARK_OFF
@@ -42,6 +45,8 @@ class ProCollegeFragment : Fragment() {
         preferences = Preferences(requireContext())
         preferences.load()
 
+        checkDownloadPermission()
+
         binding.username.editText?.setText(Preferences.proCollegeUsername)
         binding.password.editText?.setText(Preferences.proCollegePassword)
 
@@ -76,6 +81,27 @@ class ProCollegeFragment : Fragment() {
         }
     }
 
+    private fun checkDownloadPermission() {
+        if (ActivityCompat.shouldShowRequestPermissionRationale(
+                requireActivity(),
+                Manifest.permission.WRITE_EXTERNAL_STORAGE
+            )
+        ) {
+            Toast.makeText(
+                requireActivity(),
+                "Разрешение на работу с файлами нужно для сохранения файлов. " +
+                        "Разрешите работу с файлами в настройках приложения",
+                Toast.LENGTH_LONG
+            ).show()
+        } else {
+            ActivityCompat.requestPermissions(
+                requireActivity(),
+                arrayOf(Manifest.permission.WRITE_EXTERNAL_STORAGE),
+                100
+            )
+        }
+    }
+
     /**
      * Authorizes in the ProCollege
      */