diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 846c176..0932233 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -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">
+
diff --git a/android/app/src/main/java/com/massive/BackupModule.kt b/android/app/src/main/java/com/massive/BackupModule.kt
index 12b3b3c..1b84241 100644
--- a/android/app/src/main/java/com/massive/BackupModule.kt
+++ b/android/app/src/main/java/com/massive/BackupModule.kt
@@ -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(
+ 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 =