ソースを参照

ui: wizard: Reimplement low nvram warning

Peter Cai 1 年間 前
コミット
fdbf9b3252

+ 24 - 0
app-common/src/main/java/im/angry/openeuicc/ui/wizard/DownloadWizardSlotSelectFragment.kt

@@ -7,6 +7,7 @@ import android.view.View
 import android.view.ViewGroup
 import android.widget.CheckBox
 import android.widget.TextView
+import androidx.appcompat.app.AlertDialog
 import androidx.lifecycle.lifecycleScope
 import androidx.recyclerview.widget.DividerItemDecoration
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -20,6 +21,11 @@ import kotlinx.coroutines.launch
 import net.typeblog.lpac_jni.LocalProfileInfo
 
 class DownloadWizardSlotSelectFragment : DownloadWizardActivity.DownloadWizardStepFragment() {
+    companion object {
+        const val LOW_NVRAM_THRESHOLD =
+            30 * 1024 // < 30 KiB, alert about potential download failure
+    }
+
     private data class SlotInfo(
         val logicalSlotId: Int,
         val isRemovable: Boolean,
@@ -45,6 +51,21 @@ class DownloadWizardSlotSelectFragment : DownloadWizardActivity.DownloadWizardSt
 
     override fun createPrevFragment(): DownloadWizardActivity.DownloadWizardStepFragment? = null
 
+    override fun beforeNext() {
+        super.beforeNext()
+
+        if (adapter.selected.freeSpace < LOW_NVRAM_THRESHOLD) {
+            AlertDialog.Builder(requireContext()).apply {
+                setTitle(R.string.profile_download_low_nvram_title)
+                setMessage(R.string.profile_download_low_nvram_message)
+                setCancelable(true)
+                setPositiveButton(android.R.string.ok, null)
+                setNegativeButton(android.R.string.cancel, null)
+                show()
+            }
+        }
+    }
+
     override fun onCreateView(
         inflater: LayoutInflater,
         container: ViewGroup?,
@@ -165,6 +186,9 @@ class DownloadWizardSlotSelectFragment : DownloadWizardActivity.DownloadWizardSt
         var slots: List<SlotInfo> = listOf()
         var currentSelectedIdx = -1
 
+        val selected: SlotInfo
+            get() = slots[currentSelectedIdx]
+
         override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): SlotItemHolder {
             val root = LayoutInflater.from(parent.context).inflate(R.layout.download_slot_item, parent, false)
             return SlotItemHolder(root)