Add configurable chunked storage limits
This commit is contained in:
@@ -16,6 +16,8 @@ import se.ajpanton.notificationlog.data.EncryptedNotificationLogStore
|
||||
import se.ajpanton.notificationlog.data.EncryptedImageStore
|
||||
import se.ajpanton.notificationlog.capture.NotificationCaptureService
|
||||
import se.ajpanton.notificationlog.export.LogExporter
|
||||
import se.ajpanton.notificationlog.settings.StorageLimits
|
||||
import se.ajpanton.notificationlog.settings.StorageLimitsStore
|
||||
import java.util.zip.ZipOutputStream
|
||||
|
||||
class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
@@ -33,6 +35,7 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
val lockStore = AppLockStore(requireContext())
|
||||
binding!!.appLock.isChecked = lockStore.enabled
|
||||
binding!!.appLock.setOnCheckedChangeListener { _, enabled -> lockStore.enabled = enabled }
|
||||
bindStorageLimits()
|
||||
}
|
||||
override fun onDestroyView() { binding = null; super.onDestroyView() }
|
||||
|
||||
@@ -44,6 +47,27 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
private fun isListenerEnabled(): Boolean = requireContext().getSystemService(android.app.NotificationManager::class.java)
|
||||
.isNotificationListenerAccessGranted(ComponentName(requireContext(), NotificationCaptureService::class.java))
|
||||
|
||||
private fun bindStorageLimits() {
|
||||
val store = StorageLimitsStore(requireContext())
|
||||
val limits = store.load()
|
||||
binding!!.logLimitMib.setText((limits.logBytes / StorageLimitsStore.MEBIBYTE).toString())
|
||||
binding!!.imageLimitMib.setText((limits.imageBytes / StorageLimitsStore.MEBIBYTE).toString())
|
||||
binding!!.saveStorageLimits.setOnClickListener {
|
||||
val logLimit = binding!!.logLimitMib.text.toString().toLongOrNull()
|
||||
val imageLimit = binding!!.imageLimitMib.text.toString().toLongOrNull()
|
||||
if (logLimit == null || imageLimit == null ||
|
||||
logLimit !in 1..MAXIMUM_LIMIT_MIB || imageLimit !in 1..MAXIMUM_LIMIT_MIB
|
||||
) {
|
||||
binding!!.logLimitMib.error = "Enter 1 to $MAXIMUM_LIMIT_MIB MiB"
|
||||
binding!!.imageLimitMib.error = "Enter 1 to $MAXIMUM_LIMIT_MIB MiB"
|
||||
return@setOnClickListener
|
||||
}
|
||||
store.save(StorageLimits(logLimit * StorageLimitsStore.MEBIBYTE, imageLimit * StorageLimitsStore.MEBIBYTE))
|
||||
val appContext = requireContext().applicationContext
|
||||
Thread { EncryptedNotificationLogStore(appContext).enforceLimits() }.start()
|
||||
}
|
||||
}
|
||||
|
||||
private fun confirmClearLogs() {
|
||||
MaterialAlertDialogBuilder(requireContext())
|
||||
.setTitle("Clear logs?")
|
||||
@@ -104,4 +128,8 @@ class SettingsFragment : Fragment(R.layout.fragment_settings) {
|
||||
}
|
||||
|
||||
private enum class ExportFormat(val extension: String) { CSV("csv"), FORMATTED("txt"), HTML_ZIP("zip") }
|
||||
|
||||
private companion object {
|
||||
const val MAXIMUM_LIMIT_MIB = 1024L * 1024L
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user