blob: e0c1ca42070bbb20c20de9e9e3d5bcb0f11f43dc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
|
package com.mapbox.mapboxsdk.testapp.utils
import android.content.Context
import android.os.AsyncTask
import java.io.File
import java.io.FileOutputStream
import java.lang.ref.WeakReference
class FileUtils {
/**
* Task that copies a file from the assets directory to a provided directory.
* The asset's name is going to be kept in the new directory.
*/
class CopyFileFromAssetsTask(context: Context, listener: OnFileCopiedFromAssetsListener) : AsyncTask<String, Void, Boolean>() {
private val contextWeakReference: WeakReference<Context> = WeakReference(context)
private val listenerWeakReference: WeakReference<OnFileCopiedFromAssetsListener> = WeakReference(listener)
override fun doInBackground(vararg strings: String): Boolean? {
val assetName = strings[0]
val destinationPath = strings[1]
contextWeakReference.get()?.let {
try {
copyAsset(it, assetName, destinationPath)
} catch (ex: Exception) {
return false
}
}
return true
}
override fun onCancelled() {
listenerWeakReference.get()?.onError()
}
override fun onPostExecute(result: Boolean) {
if (result) {
listenerWeakReference.get()?.onFileCopiedFromAssets()
} else {
listenerWeakReference.get()?.onError()
}
}
private fun copyAsset(context: Context, assetName: String, destinationPath: String) {
val bufferSize = 1024
val assetManager = context.assets
val inputStream = assetManager.open(assetName)
val outputStream = FileOutputStream(File(destinationPath, assetName))
try {
inputStream.copyTo(outputStream, bufferSize)
} finally {
inputStream.close()
outputStream.flush()
outputStream.close()
}
}
}
interface OnFileCopiedFromAssetsListener {
fun onFileCopiedFromAssets()
fun onError()
}
}
|