diff --git a/app/src/main/java/eu/depau/etchdroid/activities/ConfirmationActivity.kt b/app/src/main/java/eu/depau/etchdroid/activities/ConfirmationActivity.kt
index c22955d..4692d81 100644
--- a/app/src/main/java/eu/depau/etchdroid/activities/ConfirmationActivity.kt
+++ b/app/src/main/java/eu/depau/etchdroid/activities/ConfirmationActivity.kt
@@ -1,9 +1,8 @@
package eu.depau.etchdroid.activities
-import android.os.Bundle
-import android.app.Activity
import android.content.Intent
import android.os.Build
+import android.os.Bundle
import android.view.View
import android.widget.Toast
import androidx.recyclerview.widget.LinearLayoutManager
@@ -15,13 +14,43 @@ import eu.depau.etchdroid.img_types.DMGImage
import eu.depau.etchdroid.kotlin_exts.*
import eu.depau.etchdroid.services.UsbApiDmgWriteService
import eu.depau.etchdroid.services.UsbApiImgWriteService
-
+import eu.depau.etchdroid.utils.DoNotShowAgainDialogFragment
import kotlinx.android.synthetic.main.activity_confirmation.*
import java.io.IOException
class ConfirmationActivity : ActivityBase() {
var canContinue: Boolean = false
- var issuesFound: Boolean = false
+ var issuesFound: String? = null
+ val DISMISSED_DIALOGS_PREFS = "dismissed_dialogs"
+
+ var shouldShowDataLossAlertDialog: Boolean
+ get() {
+ val settings = getSharedPreferences(DISMISSED_DIALOGS_PREFS, 0)
+ return !settings.getBoolean("data_loss_alert", false)
+ }
+ set(value) {
+ val settings = getSharedPreferences(DISMISSED_DIALOGS_PREFS, 0)
+ val editor = settings.edit()
+ editor.putBoolean("data_loss_alert", !value)
+ editor.apply()
+ }
+
+
+ fun showDataLossAlertDialog() {
+ val dialogFragment = DoNotShowAgainDialogFragment()
+ dialogFragment.title = getString(R.string.warning)
+ dialogFragment.message = getString(R.string.dataloss_confirmation_dialog_message)
+ dialogFragment.positiveButton = getString(R.string.confirm_flash_image)
+ dialogFragment.negativeButton = getString(R.string.cancel)
+ dialogFragment.listener = object : DoNotShowAgainDialogFragment.DialogListener {
+ override fun onDialogNegative(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {}
+ override fun onDialogPositive(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {
+ shouldShowDataLossAlertDialog = showAgain
+ nextStep(false)
+ }
+ }
+ dialogFragment.show(supportFragmentManager, "DataLossAlertDialogFragment")
+ }
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -102,13 +131,13 @@ class ConfirmationActivity : ActivityBase() {
val imgRepr = StateKeeper.imageRepr as DMGImage
if (imgRepr.tableType == null && (imgRepr.partitionTable == null || imgRepr.partitionTable?.size == 0)) {
- part_table_header.text = getString(R.string.image_is_not_dmg)
- issuesFound = true
+ issuesFound = getString(R.string.image_is_not_dmg)
+ part_table_header.text = issuesFound
return
} else {
part_table_header.text = if (imgRepr.tableType != null) getString(R.string.partition_table_title) else ""
part_table_header_side.text = imgRepr.tableType?.getString(this) ?: ""
- issuesFound = false
+ issuesFound = null
val viewAdapter = PartitionTableRecyclerViewAdapter(imgRepr.partitionTable!!)
part_table_recycler.apply {
@@ -120,9 +149,14 @@ class ConfirmationActivity : ActivityBase() {
}
}
- fun nextStep() {
- if (!canContinue) {
- confirm_fab.snackbar(getString(R.string.cannot_write))
+ fun nextStep(showDialog: Boolean = true) {
+ if (!canContinue || issuesFound != null) {
+ confirm_fab.snackbar(issuesFound ?: getString(R.string.cannot_write))
+ return
+ }
+
+ if (showDialog && shouldShowDataLossAlertDialog) {
+ showDataLossAlertDialog()
return
}
diff --git a/app/src/main/java/eu/depau/etchdroid/activities/StartActivity.kt b/app/src/main/java/eu/depau/etchdroid/activities/StartActivity.kt
index 9423dde..307dd05 100644
--- a/app/src/main/java/eu/depau/etchdroid/activities/StartActivity.kt
+++ b/app/src/main/java/eu/depau/etchdroid/activities/StartActivity.kt
@@ -65,9 +65,10 @@ class StartActivity : ActivityBase() {
val dialogFragment = DoNotShowAgainDialogFragment()
dialogFragment.title = getString(R.string.here_be_dragons)
dialogFragment.message = getString(R.string.dmg_alert_dialog_text)
- dialogFragment.closeButton = getString(R.string.i_understand)
+ dialogFragment.positiveButton = getString(R.string.i_understand)
dialogFragment.listener = object : DoNotShowAgainDialogFragment.DialogListener {
- override fun onDialogClose(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {
+ override fun onDialogNegative(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {}
+ override fun onDialogPositive(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {
shouldShowDMGAlertDialog = showAgain
showFilePicker()
}
diff --git a/app/src/main/java/eu/depau/etchdroid/utils/DoNotShowAgainDialogFragment.kt b/app/src/main/java/eu/depau/etchdroid/utils/DoNotShowAgainDialogFragment.kt
index 4b6c6a0..75da5d7 100644
--- a/app/src/main/java/eu/depau/etchdroid/utils/DoNotShowAgainDialogFragment.kt
+++ b/app/src/main/java/eu/depau/etchdroid/utils/DoNotShowAgainDialogFragment.kt
@@ -11,12 +11,14 @@ import kotlinx.android.synthetic.main.do_not_show_again.view.*
class DoNotShowAgainDialogFragment() : DialogFragment() {
var title: String? = null
- var closeButton: String? = null
+ var positiveButton: String? = null
+ var negativeButton: String? = null
var message: String? = null
var listener: DialogListener? = null
interface DialogListener {
- fun onDialogClose(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean)
+ fun onDialogPositive(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean)
+ fun onDialogNegative(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean)
}
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
@@ -30,10 +32,15 @@ class DoNotShowAgainDialogFragment() : DialogFragment() {
.setTitle(title)
.setMessage(message)
.setView(dnsaLayout)
- .setPositiveButton(closeButton) { _, _ ->
- listener?.onDialogClose(this@DoNotShowAgainDialogFragment, !doNotShowAgainCB.isChecked)
+ .setPositiveButton(positiveButton) { _, _ ->
+ listener?.onDialogPositive(this@DoNotShowAgainDialogFragment, !doNotShowAgainCB.isChecked)
}
+ if (negativeButton != null)
+ builder.setNegativeButton(negativeButton) {_, _ ->
+ listener?.onDialogNegative(this@DoNotShowAgainDialogFragment, !doNotShowAgainCB.isChecked)
+ }
+
return builder.create()
}
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 47eee53..74a92b7 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -95,4 +95,8 @@
Here be dragons
I understand, continue
While in most cases DMG images can be restored just fine, sometimes there may be inconsistencies. You\'ve been warned.
+ Flash image
+ If you continue, selected image will be written and all data stored on the USB drive will be lost forever.
+ Warning
+ Cancel