From 05a000c5d62bd3eb42208147b76874656d6bcbd3 Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Thu, 23 Jul 2026 09:32:17 +0000 Subject: [PATCH] Configure log fields and timezone --- .../ajpanton/notificationlog/MainActivity.kt | 1 + .../notificationlog/SettingsFragment.kt | 47 +++++++++++++++++++ app/src/main/res/layout/fragment_settings.xml | 2 + 3 files changed, 50 insertions(+) create mode 100644 app/src/main/java/se/ajpanton/notificationlog/SettingsFragment.kt create mode 100644 app/src/main/res/layout/fragment_settings.xml diff --git a/app/src/main/java/se/ajpanton/notificationlog/MainActivity.kt b/app/src/main/java/se/ajpanton/notificationlog/MainActivity.kt index 4acf745..38d67b3 100644 --- a/app/src/main/java/se/ajpanton/notificationlog/MainActivity.kt +++ b/app/src/main/java/se/ajpanton/notificationlog/MainActivity.kt @@ -97,6 +97,7 @@ class MainActivity : AppCompatActivity(), NavigationView.OnNavigationItemSelecte R.id.content_frame, when { page == Page.VIEW_LOGS -> ViewLogsFragment() + page == Page.SETTINGS -> SettingsFragment() page.loggingType != null -> EventSettingsFragment.newInstance(page.titleRes, page.loggingType) else -> PageFragment.newInstance(page.titleRes) }, diff --git a/app/src/main/java/se/ajpanton/notificationlog/SettingsFragment.kt b/app/src/main/java/se/ajpanton/notificationlog/SettingsFragment.kt new file mode 100644 index 0000000..7bf2ff3 --- /dev/null +++ b/app/src/main/java/se/ajpanton/notificationlog/SettingsFragment.kt @@ -0,0 +1,47 @@ +package se.ajpanton.notificationlog + +import android.os.Bundle +import android.view.View +import android.widget.ArrayAdapter +import androidx.fragment.app.Fragment +import com.google.android.material.switchmaterial.SwitchMaterial +import se.ajpanton.notificationlog.databinding.FragmentSettingsBinding +import se.ajpanton.notificationlog.settings.LogField +import se.ajpanton.notificationlog.settings.LogViewSettingsStore +import se.ajpanton.notificationlog.settings.TimestampZone + +class SettingsFragment : Fragment(R.layout.fragment_settings) { + private var binding: FragmentSettingsBinding? = null + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding = FragmentSettingsBinding.bind(view) + val store = LogViewSettingsStore(requireContext()) + var settings = store.load() + LogField.entries.forEach { field -> + binding!!.fieldToggles.addView(SwitchMaterial(requireContext()).apply { + text = when (field) { + LogField.TIMESTAMP -> "Timestamp"; LogField.APP_NAME -> "App name" + LogField.PACKAGE_NAME -> "Package name"; LogField.ACTION -> "What the app did" + LogField.CONTENTS -> "Contents of the notification" + } + isChecked = field in settings.visibleFields + setOnCheckedChangeListener { _, checked -> + settings = settings.copy(visibleFields = settings.visibleFields.toMutableSet().apply { + if (checked) add(field) else remove(field) + }) + store.save(settings) + } + }) + } + val labels = listOf("Current local timezone", "UTC", "Local timezone when event happened") + binding!!.timezone.adapter = ArrayAdapter(requireContext(), android.R.layout.simple_spinner_dropdown_item, labels) + binding!!.timezone.setSelection(TimestampZone.entries.indexOf(settings.timestampZone)) + binding!!.timezone.onItemSelectedListener = object : android.widget.AdapterView.OnItemSelectedListener { + override fun onNothingSelected(parent: android.widget.AdapterView<*>?) = Unit + override fun onItemSelected(parent: android.widget.AdapterView<*>?, view: View?, position: Int, id: Long) { + settings = settings.copy(timestampZone = TimestampZone.entries[position]); store.save(settings) + } + } + } + override fun onDestroyView() { binding = null; super.onDestroyView() } +} diff --git a/app/src/main/res/layout/fragment_settings.xml b/app/src/main/res/layout/fragment_settings.xml new file mode 100644 index 0000000..63f6642 --- /dev/null +++ b/app/src/main/res/layout/fragment_settings.xml @@ -0,0 +1,2 @@ + +