package com.bigcrunch.ads.internal import android.content.Context import android.content.SharedPreferences /** * Key-value storage interface for persisting SDK data */ internal interface KeyValueStore { /** * Get a string value by key * * @param key Storage key * @param default Default value if key doesn't exist * @return Stored value or default */ fun getString(key: String, default: String? = null): String? /** * Store a string value * * @param key Storage key * @param value Value to store */ fun putString(key: String, value: String) /** * Remove a key from storage * * @param key Storage key to remove */ fun remove(key: String) /** * Clear all stored data */ fun clear() } /** * SharedPreferences-based implementation of KeyValueStore * * Thread-safe implementation using Android's SharedPreferences. * All data is stored in a private preferences file. */ internal class SharedPreferencesStore(context: Context) : KeyValueStore { private val prefs: SharedPreferences = context.getSharedPreferences( "bigcrunch_ads_storage", Context.MODE_PRIVATE ) override fun getString(key: String, default: String?): String? { return try { prefs.getString(key, default) } catch (e: Exception) { BCLogger.e("Storage", "Failed to get string for key: $key", e) default } } override fun putString(key: String, value: String) { try { prefs.edit().putString(key, value).apply() BCLogger.v("Storage", "Stored value for key: $key") } catch (e: Exception) { BCLogger.e("Storage", "Failed to store value for key: $key", e) } } override fun remove(key: String) { try { prefs.edit().remove(key).apply() BCLogger.v("Storage", "Removed key: $key") } catch (e: Exception) { BCLogger.e("Storage", "Failed to remove key: $key", e) } } override fun clear() { try { prefs.edit().clear().apply() BCLogger.d("Storage", "Cleared all stored data") } catch (e: Exception) { BCLogger.e("Storage", "Failed to clear storage", e) } } }