Add beta warning when clicking the restore DMG button
This commit is contained in:
parent
aa78d36cb0
commit
25fc67c67b
4 changed files with 109 additions and 10 deletions
|
@ -15,14 +15,29 @@ import eu.depau.etchdroid.R
|
|||
import eu.depau.etchdroid.StateKeeper
|
||||
import eu.depau.etchdroid.enums.FlashMethod
|
||||
import eu.depau.etchdroid.kotlin_exts.snackbar
|
||||
import eu.depau.etchdroid.utils.DoNotShowAgainDialogFragment
|
||||
import kotlinx.android.synthetic.main.activity_start.*
|
||||
import java.io.File
|
||||
|
||||
|
||||
class StartActivity : ActivityBase() {
|
||||
val TAG = "StartActivity"
|
||||
val READ_REQUEST_CODE = 42
|
||||
val READ_EXTERNAL_STORAGE_PERMISSION = 29
|
||||
var delayedButtonClicked: View? = null
|
||||
val DISMISSED_DIALOGS_PREFS = "dismissed_dialogs"
|
||||
var delayedButtonClicked: Boolean = false
|
||||
|
||||
var shouldShowDMGAlertDialog: Boolean
|
||||
get() {
|
||||
val settings = getSharedPreferences(DISMISSED_DIALOGS_PREFS, 0)
|
||||
return !settings.getBoolean("DMG_beta_alert", false)
|
||||
}
|
||||
set(value) {
|
||||
val settings = getSharedPreferences(DISMISSED_DIALOGS_PREFS, 0)
|
||||
val editor = settings.edit()
|
||||
editor.putBoolean("DMG_beta_alert", !value)
|
||||
editor.apply()
|
||||
}
|
||||
|
||||
|
||||
override fun onCreate(savedInstanceState: Bundle?) {
|
||||
|
@ -30,13 +45,37 @@ class StartActivity : ActivityBase() {
|
|||
setContentView(R.layout.activity_start)
|
||||
}
|
||||
|
||||
fun onButtonClicked(view: View) {
|
||||
StateKeeper.flashMethod = when (view.id) {
|
||||
R.id.btn_image_raw -> FlashMethod.FLASH_API
|
||||
R.id.btn_image_dmg -> FlashMethod.FLASH_DMG_API
|
||||
else -> null
|
||||
}
|
||||
fun onButtonClicked(view: View) = onButtonClicked(view, true)
|
||||
|
||||
private fun onButtonClicked(view: View?, showDialog: Boolean = true) {
|
||||
if (view != null)
|
||||
StateKeeper.flashMethod = when (view.id) {
|
||||
R.id.btn_image_raw -> FlashMethod.FLASH_API
|
||||
R.id.btn_image_dmg -> FlashMethod.FLASH_DMG_API
|
||||
else -> null
|
||||
}
|
||||
|
||||
if (StateKeeper.flashMethod != FlashMethod.FLASH_DMG_API || !shouldShowDMGAlertDialog || !showDialog)
|
||||
showFilePicker()
|
||||
else
|
||||
showDMGBetaAlertDialog()
|
||||
}
|
||||
|
||||
fun showDMGBetaAlertDialog() {
|
||||
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.listener = object : DoNotShowAgainDialogFragment.DialogListener {
|
||||
override fun onDialogClose(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean) {
|
||||
shouldShowDMGAlertDialog = showAgain
|
||||
showFilePicker()
|
||||
}
|
||||
}
|
||||
dialogFragment.show(supportFragmentManager, "DMGBetaAlertDialogFragment")
|
||||
}
|
||||
|
||||
fun showFilePicker() {
|
||||
when (StateKeeper.flashMethod) {
|
||||
FlashMethod.FLASH_API -> {
|
||||
val intent = Intent(Intent.ACTION_OPEN_DOCUMENT)
|
||||
|
@ -62,7 +101,7 @@ class StartActivity : ActivityBase() {
|
|||
nextStep()
|
||||
}
|
||||
} else {
|
||||
delayedButtonClicked = view
|
||||
delayedButtonClicked = true
|
||||
}
|
||||
}
|
||||
FlashMethod.FLASH_UNETBOOTIN -> {
|
||||
|
@ -95,8 +134,8 @@ class StartActivity : ActivityBase() {
|
|||
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
|
||||
when (requestCode) {
|
||||
READ_EXTERNAL_STORAGE_PERMISSION -> {
|
||||
if (delayedButtonClicked != null)
|
||||
onButtonClicked(delayedButtonClicked!!)
|
||||
if (delayedButtonClicked)
|
||||
onButtonClicked(null, showDialog = false)
|
||||
return
|
||||
}
|
||||
else -> {
|
||||
|
|
|
@ -0,0 +1,40 @@
|
|||
package eu.depau.etchdroid.utils
|
||||
|
||||
import android.app.Dialog
|
||||
import android.os.Bundle
|
||||
import android.view.LayoutInflater
|
||||
import androidx.appcompat.app.AlertDialog
|
||||
import androidx.fragment.app.DialogFragment
|
||||
import eu.depau.etchdroid.R
|
||||
import kotlinx.android.synthetic.main.do_not_show_again.view.*
|
||||
|
||||
|
||||
class DoNotShowAgainDialogFragment() : DialogFragment() {
|
||||
var title: String? = null
|
||||
var closeButton: String? = null
|
||||
var message: String? = null
|
||||
var listener: DialogListener? = null
|
||||
|
||||
interface DialogListener {
|
||||
fun onDialogClose(dialog: DoNotShowAgainDialogFragment, showAgain: Boolean)
|
||||
}
|
||||
|
||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
||||
// Build the dialog and set up the button click handlers
|
||||
val builder = AlertDialog.Builder(activity!!)
|
||||
val inflater = LayoutInflater.from(this.context)
|
||||
val dnsaLayout = inflater.inflate(R.layout.do_not_show_again, null)
|
||||
val doNotShowAgainCB = dnsaLayout.do_not_show_again
|
||||
|
||||
builder
|
||||
.setTitle(title)
|
||||
.setMessage(message)
|
||||
.setView(dnsaLayout)
|
||||
.setPositiveButton(closeButton) { _, _ ->
|
||||
listener?.onDialogClose(this@DoNotShowAgainDialogFragment, !doNotShowAgainCB.isChecked)
|
||||
}
|
||||
|
||||
return builder.create()
|
||||
}
|
||||
|
||||
}
|
16
app/src/main/res/layout/do_not_show_again.xml
Normal file
16
app/src/main/res/layout/do_not_show_again.xml
Normal file
|
@ -0,0 +1,16 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/layout_root"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="fill_parent"
|
||||
android:orientation="horizontal"
|
||||
android:padding="10dp" >
|
||||
<CheckBox
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/do_not_show_again"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/do_not_show_again"
|
||||
android:layout_marginStart="10dp">
|
||||
</CheckBox>
|
||||
</LinearLayout>
|
|
@ -91,4 +91,8 @@
|
|||
<string name="write_apple_dmg">Write Apple® DMG image</string>
|
||||
<string name="dmg_image_desc">Restore an image created with macOS Disk Utility</string>
|
||||
<string name="no_usb_drives_detected">No USB drives detected</string>
|
||||
<string name="do_not_show_again">Do not show again</string>
|
||||
<string name="here_be_dragons">Here be dragons</string>
|
||||
<string name="i_understand">I understand, continue</string>
|
||||
<string name="dmg_alert_dialog_text">While in most cases DMG images can be restored just fine, sometimes there may be inconsistencies. You\'ve been warned.</string>
|
||||
</resources>
|
||||
|
|
Loading…
Reference in a new issue