Loading packages/SettingsLib/Graph/Android.bp 0 → 100644 +21 −0 Original line number Diff line number Diff line package { default_applicable_licenses: ["frameworks_base_license"], } filegroup { name: "SettingsLibGraph-srcs", srcs: ["src/**/*"], } android_library { name: "SettingsLibGraph", defaults: [ "SettingsLintDefaults", ], srcs: [":SettingsLibGraph-srcs"], static_libs: [ "androidx.annotation_annotation", "androidx.preference_preference", ], kotlincflags: ["-Xjvm-default=all"], } packages/SettingsLib/Graph/AndroidManifest.xml 0 → 100644 +6 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.settingslib.graph"> <uses-sdk android:minSdkVersion="21" /> </manifest> packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceScreenManager.kt 0 → 100644 +70 −0 Original line number Diff line number Diff line package com.android.settingslib.graph import androidx.annotation.StringRes import androidx.annotation.XmlRes import androidx.preference.Preference import androidx.preference.PreferenceManager import androidx.preference.PreferenceScreen /** Manager to create and initialize preference screen. */ class PreferenceScreenManager(private val preferenceManager: PreferenceManager) { private val context = preferenceManager.context // the map will preserve order private val updaters = mutableMapOf<String, PreferenceUpdater>() private val screenUpdaters = mutableListOf<PreferenceScreenUpdater>() /** Creates an empty [PreferenceScreen]. */ fun createPreferenceScreen(): PreferenceScreen = preferenceManager.createPreferenceScreen(context) /** Creates [PreferenceScreen] from resource. */ fun createPreferenceScreen(@XmlRes xmlRes: Int): PreferenceScreen = preferenceManager.inflateFromResource(context, xmlRes, null) /** Adds updater for given preference. */ fun addPreferenceUpdater(@StringRes key: Int, updater: PreferenceUpdater) = addPreferenceUpdater(context.getString(key), updater) /** Adds updater for given preference. */ fun addPreferenceUpdater( key: String, updater: PreferenceUpdater, ): PreferenceScreenManager { updaters.put(key, updater)?.let { if (it != updater) throw IllegalArgumentException() } return this } /** Adds updater for preference screen. */ fun addPreferenceScreenUpdater(updater: PreferenceScreenUpdater): PreferenceScreenManager { screenUpdaters.add(updater) return this } /** Adds a list of updaters for preference screen. */ fun addPreferenceScreenUpdater( vararg updaters: PreferenceScreenUpdater, ): PreferenceScreenManager { screenUpdaters.addAll(updaters) return this } /** Updates preference screen with registered updaters. */ fun updatePreferenceScreen(preferenceScreen: PreferenceScreen) { for ((key, updater) in updaters) { preferenceScreen.findPreference<Preference>(key)?.let { updater.updatePreference(it) } } for (updater in screenUpdaters) { updater.updatePreferenceScreen(preferenceScreen) } } } /** Updater of [Preference]. */ interface PreferenceUpdater { fun updatePreference(preference: Preference) } /** Updater of [PreferenceScreen]. */ interface PreferenceScreenUpdater { fun updatePreferenceScreen(preferenceScreen: PreferenceScreen) } packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceScreenProvider.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.android.settingslib.graph import android.content.Context import androidx.preference.PreferenceScreen /** * Interface to provide [PreferenceScreen]. * * It is expected to be implemented by Activity/Fragment and the implementation needs to use * [Context] APIs (e.g. `getContext()`, `getActivity()`) with caution: preference screen creation * could happen in background service, where the Activity/Fragment lifecycle callbacks (`onCreate`, * `onDestroy`, etc.) are not invoked. */ interface PreferenceScreenProvider { /** * Creates [PreferenceScreen]. * * Preference screen creation could happen in background service. The implementation MUST use * given [context] instead of APIs like `getContext()`, `getActivity()`, etc. */ fun createPreferenceScreen( context: Context, preferenceScreenManager: PreferenceScreenManager, ): PreferenceScreen? } Loading
packages/SettingsLib/Graph/Android.bp 0 → 100644 +21 −0 Original line number Diff line number Diff line package { default_applicable_licenses: ["frameworks_base_license"], } filegroup { name: "SettingsLibGraph-srcs", srcs: ["src/**/*"], } android_library { name: "SettingsLibGraph", defaults: [ "SettingsLintDefaults", ], srcs: [":SettingsLibGraph-srcs"], static_libs: [ "androidx.annotation_annotation", "androidx.preference_preference", ], kotlincflags: ["-Xjvm-default=all"], }
packages/SettingsLib/Graph/AndroidManifest.xml 0 → 100644 +6 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.settingslib.graph"> <uses-sdk android:minSdkVersion="21" /> </manifest>
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceScreenManager.kt 0 → 100644 +70 −0 Original line number Diff line number Diff line package com.android.settingslib.graph import androidx.annotation.StringRes import androidx.annotation.XmlRes import androidx.preference.Preference import androidx.preference.PreferenceManager import androidx.preference.PreferenceScreen /** Manager to create and initialize preference screen. */ class PreferenceScreenManager(private val preferenceManager: PreferenceManager) { private val context = preferenceManager.context // the map will preserve order private val updaters = mutableMapOf<String, PreferenceUpdater>() private val screenUpdaters = mutableListOf<PreferenceScreenUpdater>() /** Creates an empty [PreferenceScreen]. */ fun createPreferenceScreen(): PreferenceScreen = preferenceManager.createPreferenceScreen(context) /** Creates [PreferenceScreen] from resource. */ fun createPreferenceScreen(@XmlRes xmlRes: Int): PreferenceScreen = preferenceManager.inflateFromResource(context, xmlRes, null) /** Adds updater for given preference. */ fun addPreferenceUpdater(@StringRes key: Int, updater: PreferenceUpdater) = addPreferenceUpdater(context.getString(key), updater) /** Adds updater for given preference. */ fun addPreferenceUpdater( key: String, updater: PreferenceUpdater, ): PreferenceScreenManager { updaters.put(key, updater)?.let { if (it != updater) throw IllegalArgumentException() } return this } /** Adds updater for preference screen. */ fun addPreferenceScreenUpdater(updater: PreferenceScreenUpdater): PreferenceScreenManager { screenUpdaters.add(updater) return this } /** Adds a list of updaters for preference screen. */ fun addPreferenceScreenUpdater( vararg updaters: PreferenceScreenUpdater, ): PreferenceScreenManager { screenUpdaters.addAll(updaters) return this } /** Updates preference screen with registered updaters. */ fun updatePreferenceScreen(preferenceScreen: PreferenceScreen) { for ((key, updater) in updaters) { preferenceScreen.findPreference<Preference>(key)?.let { updater.updatePreference(it) } } for (updater in screenUpdaters) { updater.updatePreferenceScreen(preferenceScreen) } } } /** Updater of [Preference]. */ interface PreferenceUpdater { fun updatePreference(preference: Preference) } /** Updater of [PreferenceScreen]. */ interface PreferenceScreenUpdater { fun updatePreferenceScreen(preferenceScreen: PreferenceScreen) }
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceScreenProvider.kt 0 → 100644 +26 −0 Original line number Diff line number Diff line package com.android.settingslib.graph import android.content.Context import androidx.preference.PreferenceScreen /** * Interface to provide [PreferenceScreen]. * * It is expected to be implemented by Activity/Fragment and the implementation needs to use * [Context] APIs (e.g. `getContext()`, `getActivity()`) with caution: preference screen creation * could happen in background service, where the Activity/Fragment lifecycle callbacks (`onCreate`, * `onDestroy`, etc.) are not invoked. */ interface PreferenceScreenProvider { /** * Creates [PreferenceScreen]. * * Preference screen creation could happen in background service. The implementation MUST use * given [context] instead of APIs like `getContext()`, `getActivity()`, etc. */ fun createPreferenceScreen( context: Context, preferenceScreenManager: PreferenceScreenManager, ): PreferenceScreen? }