diff --git a/BackupAPI b/BackupAPI
index 0e84e62..02c5f20 160000
--- a/BackupAPI
+++ b/BackupAPI
@@ -1 +1 @@
-Subproject commit 0e84e62bc4550c2f6cad789930d2842d7cc35333
+Subproject commit 02c5f205d4da91e1aa4143165bc8a0dfac352fed
diff --git a/BackupApp/build.gradle b/BackupApp/build.gradle
index 254993e..866acb0 100644
--- a/BackupApp/build.gradle
+++ b/BackupApp/build.gradle
@@ -3,12 +3,12 @@ apply plugin: 'kotlin-android'
apply plugin: 'kotlin-android-extensions'
apply plugin: 'kotlin-kapt'
+def pfaFile = rootProject.file('pfa.properties')
+
android {
signingConfigs {
- 'pfa-key' {
- def pfaFile = rootProject.file('pfa.properties')
-
- if (pfaFile.exists()) {
+ if (pfaFile.exists()) {
+ 'pfa-key' {
def pfa = new Properties()
pfa.load(new FileInputStream(pfaFile))
@@ -48,7 +48,9 @@ android {
}
debug {
debuggable true
- signingConfig signingConfigs.'pfa-key'
+ if (pfaFile.exists()) {
+ signingConfig signingConfigs.'pfa-key'
+ }
}
}
diff --git a/BackupApp/src/main/AndroidManifest.xml b/BackupApp/src/main/AndroidManifest.xml
index d9bc63c..3b89191 100644
--- a/BackupApp/src/main/AndroidManifest.xml
+++ b/BackupApp/src/main/AndroidManifest.xml
@@ -4,9 +4,13 @@
package="org.secuso.privacyfriendlybackup">
+
+
+
+
-
+
Unit = this::defaultFadeAnimation) : Animator {
+ protected fun playColorAnimationRes(@ColorRes colorFromId: Int, @ColorRes colorToId: Int, duration : Long = 250, applyAnimation : (a : ValueAnimator) -> Unit = this::defaultFadeAnimation) : Animator {
val colorFrom = ContextCompat.getColor(requireContext(), colorFromId)
val colorTo = ContextCompat.getColor(requireContext(), colorToId)
- return playColorAnimation(colorFrom, colorTo, 250, applyAnimation)
+ return playColorAnimation(colorFrom, colorTo, duration, applyAnimation)
}
protected fun playColorAnimation(@ColorInt colorFrom: Int, @ColorInt colorTo: Int, duration : Long = 250, applyAnimation : (a : ValueAnimator) -> Unit = this::defaultFadeAnimation) : Animator {
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/common/DisplayMenuItemActivity.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/common/DisplayMenuItemActivity.kt
index ca35985..c035fc8 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/common/DisplayMenuItemActivity.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/common/DisplayMenuItemActivity.kt
@@ -17,6 +17,7 @@ import org.secuso.privacyfriendlybackup.ui.main.MainActivity
* in a [MainActivity].
*/
class DisplayMenuItemActivity : AppCompatActivity() {
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_display_menu_item)
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/encryption/UserInteractionRequiredActivity.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/encryption/UserInteractionRequiredActivity.kt
index 7f60411..4f7ff32 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/encryption/UserInteractionRequiredActivity.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/encryption/UserInteractionRequiredActivity.kt
@@ -9,6 +9,7 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.preference.PreferenceManager
import androidx.work.*
import org.openintents.openpgp.util.OpenPgpApi
+import org.secuso.privacyfriendlybackup.BackupApplication
import org.secuso.privacyfriendlybackup.preference.PreferenceKeys.PREF_ENCRYPTION_KEY
import org.secuso.privacyfriendlybackup.preference.PreferenceKeys.PREF_ENCRYPTION_PASSPHRASE
import org.secuso.privacyfriendlybackup.worker.EncryptionWorker
@@ -88,6 +89,9 @@ class UserInteractionRequiredActivity : AppCompatActivity() {
edit.apply()
+ // restart the encryption worker
+ (applicationContext as BackupApplication).schedulePeriodicWork()
+
// after the answer was received, there is no need to display this translucent activity
finish()
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionActivity.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionActivity.kt
index 0b9fbac..034c526 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionActivity.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionActivity.kt
@@ -37,10 +37,9 @@ class DataInspectionActivity : AppCompatActivity() {
setContentView(R.layout.data_inspection_activity)
supportActionBar?.setDisplayHomeAsUpEnabled(true)
- viewModel = ViewModelProvider(this).get(DataInspectionViewModel::class.java)
+ viewModel = ViewModelProvider(this)[DataInspectionViewModel::class.java]
if (savedInstanceState == null) {
-
val fragment = DataInspectionFragment.newInstance()
fragment.arguments = Bundle().apply {
putLong(EXTRA_DATA_ID, id)
@@ -57,8 +56,4 @@ class DataInspectionActivity : AppCompatActivity() {
override fun onBackPressed() {
finish()
}
-
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- }
}
\ No newline at end of file
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionFragment.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionFragment.kt
index 392636e..500c34a 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionFragment.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/ui/inspection/DataInspectionFragment.kt
@@ -1,5 +1,6 @@
package org.secuso.privacyfriendlybackup.ui.inspection
+import android.content.Context
import android.content.Intent
import android.graphics.Color
import android.graphics.PorterDuff
@@ -11,13 +12,15 @@ import android.view.*
import android.widget.CheckBox
import android.widget.TextView
import android.widget.Toast
+import androidx.activity.result.ActivityResultLauncher
import androidx.appcompat.app.AlertDialog
import androidx.appcompat.app.AppCompatActivity
import androidx.constraintlayout.widget.ConstraintSet
import androidx.core.content.ContextCompat
import androidx.fragment.app.Fragment
+import androidx.lifecycle.DefaultLifecycleObserver
+import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.ViewModelProvider
-import androidx.lifecycle.observe
import androidx.preference.PreferenceManager
import com.bumptech.glide.Glide
import kotlinx.android.synthetic.main.data_inspection_fragment.*
@@ -25,6 +28,7 @@ import kotlinx.android.synthetic.main.item_application_job.*
import org.openintents.openpgp.OpenPgpSignatureResult
import org.secuso.privacyfriendlybackup.R
import org.secuso.privacyfriendlybackup.preference.PreferenceKeys
+import org.secuso.privacyfriendlybackup.ui.backup.BackupOverviewFragment
import java.io.FileNotFoundException
@@ -46,6 +50,8 @@ class DataInspectionFragment : Fragment() {
private lateinit var viewModel: DataInspectionViewModel
+ //private lateinit var test : ActivityResultLauncher<>
+
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setHasOptionsMenu(true)
@@ -194,7 +200,7 @@ class DataInspectionFragment : Fragment() {
super.onActivityCreated(savedInstanceState)
val activity = requireActivity()
- viewModel = ViewModelProvider(activity).get(DataInspectionViewModel::class.java)
+ viewModel = ViewModelProvider(activity)[DataInspectionViewModel::class.java]
encryptionEnabled = PreferenceManager.getDefaultSharedPreferences(requireActivity()).getBoolean(PreferenceKeys.PREF_ENCRYPTION_ENABLE, false)
@@ -222,10 +228,10 @@ class DataInspectionFragment : Fragment() {
data_inspection_load_status_name.setText(it.descriptionRes)
data_inspection_load_status_image.setColorFilter(ContextCompat.getColor(requireActivity(), it.colorRes))
when(it) {
- LoadStatus.UNKNOWN -> {
+ LoadStatus.UNKNOWN, null -> {
data_inspection_load_status.visibility = View.GONE
}
- LoadStatus.ERROR -> {
+ LoadStatus.ERROR_INVALID_JSON, LoadStatus.ERROR -> {
data_inspection_load_status.visibility = View.VISIBLE
}
LoadStatus.LOADING -> {
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/BackupJobManagerWorker.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/BackupJobManagerWorker.kt
index 683bf7a..03f5193 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/BackupJobManagerWorker.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/BackupJobManagerWorker.kt
@@ -36,6 +36,8 @@ class BackupJobManagerWorker(val context: Context, params: WorkerParameters) : C
val processedJobs = jobs.filter { it.active }
val unprocessedJobs = jobs.filter { !it.active }
+ val jobsToCheck = jobs.toMutableList()
+
for(job in processedJobs) {
val workInfoFuture = WorkManager.getInstance(context).getWorkInfosByTag(job.getWorkerTag())
val workInfoList = workInfoFuture.get()
@@ -57,6 +59,9 @@ class BackupJobManagerWorker(val context: Context, params: WorkerParameters) : C
// if it failed - try again
job.active = false
jobDao.update(job)
+
+ deleteFollowingJobs(job, jobsToCheck)
+ // TODO: Show Toast - Job Failed?
}
}
}
@@ -126,17 +131,35 @@ class BackupJobManagerWorker(val context: Context, params: WorkerParameters) : C
}
}
-
- coroutineScope {
- launch {
- delay(1500L)
- (context.applicationContext as BackupApplication).schedulePeriodicWork()
+ // continue calling the service if there are still jobs left to do
+ if(jobsToCheck.isNotEmpty()) {
+ coroutineScope {
+ launch {
+ delay(1500L)
+ (context.applicationContext as BackupApplication).schedulePeriodicWork()
+ }
}
}
return Result.success()
}
+ private fun deleteFollowingJobs(job: BackupJob, jobsToCheck: MutableList, jobsToDelete : MutableList = mutableListOf()) {
+ jobsToDelete.add(job)
+
+ if(job.nextJob == null) {
+ return
+ }
+
+ for(j in jobsToCheck) {
+ if(j._id == job.nextJob) {
+ deleteFollowingJobs(j, jobsToCheck, jobsToDelete)
+ }
+ }
+
+ jobsToCheck.removeAll(jobsToDelete)
+ }
+
private fun enqueueEncryptionWork(job : BackupJob) {
val encryptionWork = createEncryptionWorkRequest(job, true, pref)
diff --git a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/EncryptionWorker.kt b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/EncryptionWorker.kt
index 229b7f5..9f6934b 100644
--- a/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/EncryptionWorker.kt
+++ b/BackupApp/src/main/java/org/secuso/privacyfriendlybackup/worker/EncryptionWorker.kt
@@ -381,7 +381,7 @@ class EncryptionWorker(val context: Context, params: WorkerParameters) : Corouti
context,
requestCode,
intent,
- PendingIntent.FLAG_UPDATE_CURRENT
+ PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_UPDATE_CURRENT
)
setContentIntent(pendingIntent)
}.build()