Handle EACCESS in BackupModule

This commit is contained in:
Brandon Presley 2023-03-24 17:43:28 +13:00
parent 5dd569ef72
commit d2a1c432bb
2 changed files with 42 additions and 10 deletions

View File

@ -20,6 +20,7 @@
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:requestLegacyExternalStorage="true"
android:theme="@style/AppTheme">
<activity
android:name=".TimerDone"
@ -44,6 +45,7 @@
android:name=".StopAlarm"
android:exported="true"
android:process=":remote" />
<service
android:name=".AlarmService"
android:exported="false" />

View File

@ -1,23 +1,27 @@
package com.massive
import android.Manifest
import android.app.AlarmManager
import android.app.PendingIntent
import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.pm.PackageManager
import android.os.Build
import android.os.Environment
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.core.app.ActivityCompat
import com.facebook.react.bridge.ReactApplicationContext
import com.facebook.react.bridge.ReactContextBaseJavaModule
import com.facebook.react.bridge.ReactMethod
import java.io.File
import java.io.FileInputStream
import java.io.FileOutputStream
import java.io.IOException
import java.util.*
class BackupModule constructor(context: ReactApplicationContext?) :
ReactContextBaseJavaModule(context) {
val context: ReactApplicationContext = reactApplicationContext
@ -25,25 +29,51 @@ class BackupModule constructor(context: ReactApplicationContext?) :
private val copyReceiver = object : BroadcastReceiver() {
@RequiresApi(Build.VERSION_CODES.O)
override fun onReceive(context: Context?, intent: Intent?) {
Log.d("BackupModule", "Backing up database...")
val sourceFile = File(context?.getDatabasePath("massive.db")!!.path)
val targetDir =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS)
val targetFile = File(targetDir, "massive.db")
var targetFile = File(targetDir, "massive.db")
var count = 0
val input = FileInputStream(sourceFile)
val output = FileOutputStream(targetFile)
input.copyTo(output)
input.close()
output.close()
try {
val input = FileInputStream(sourceFile)
val output = FileOutputStream(targetFile)
input.copyTo(output)
input.close()
output.close()
} catch (e: IOException) {
while (targetFile.exists()) {
count++
targetFile = File(targetDir, "massive (${count}).db")
}
val input = FileInputStream(sourceFile)
val output = FileOutputStream(targetFile)
input.copyTo(output)
input.close()
output.close()
}
}
}
@RequiresApi(Build.VERSION_CODES.M)
@ReactMethod
fun start() {
val permission: Int =
ActivityCompat.checkSelfPermission(
reactApplicationContext,
Manifest.permission.WRITE_EXTERNAL_STORAGE
)
if (permission != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(
currentActivity!!,
arrayOf<String>(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
),
1
)
}
val alarmMgr = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager
val intent = Intent(COPY_BROADCAST)
val pendingIntent =