### 🗝 Preferences Explorer & Editor Screenshot 2025-09-12 at 15 41 04 Flocon provides complete access to your app’s preferences (SharedPreferences and DataStore), which often store user tokens, feature flags, configuration options, and more. Key capabilities include: - **Automatic detection** of all application SharedPreferences. - Viewing and filtering key-value pairs. - Inspecting primitive values and JSON structures. - **Editing values on the fly** from the desktop UI. #### SharedPreferences Flocon automatically detects and displays all standard `SharedPreferences` files in your application. However, you can manually register them to provide custom names: ```kotlin val referencedPref = context.getSharedPreferences("user_pref", Context.MODE_PRIVATE) floconRegisterPreference(FloconSharedPreference(name = "User Settings", referencedPref)) ``` #### Jetpack DataStore To support Jetpack DataStore, ensure you have the `flocon-datastore` dependency: ```kotlin // build.gradle.kts implementation("io.github.openflocon:flocon-datastore:version") ``` Then register your DataStore: ```kotlin val Context.dataStore by preferencesDataStore(name = "settings") // Registration floconRegisterPreference(FloconDatastorePreference(name = "App Settings", context.dataStore)) ``` #### Custom Implementations You can expose any key-value store to Flocon by implementing the `FloconPreference` interface. This is useful for custom encrypted storage or non-standard persistence layers. ```kotlin class MyCustomPreference : FloconPreference { override val name: String = "Custom Store" override suspend fun columns(): List { return listOf("api_key", "debug_mode") } override suspend fun get(columnName: String): FloconPreferenceValue? { // Retrieve value from your store return FloconPreferenceValue(stringValue = "...") } override suspend fun set(columnName: String, value: FloconPreferenceValue) { // Save value to your store } } // Registration floconRegisterPreference(MyCustomPreference()) ```