Loading packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt +6 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,12 @@ open class KeyedDataObservable<K> : KeyedObservable<K> { entry.value.execute { observer.onKeyChanged(key, reason) } } } fun hasAnyObserver(): Boolean { synchronized(observers) { if (observers.isNotEmpty()) return true } synchronized(keyedObservers) { if (keyedObservers.isNotEmpty()) return true } return false } } /** [KeyedObservable] with no-op implementations for all interfaces. */ Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +13 −12 Original line number Diff line number Diff line Loading @@ -136,6 +136,18 @@ class PreferenceHierarchy internal constructor(metadata: PreferenceMetadata) : for (it in children) action(it) } /** Traversals preference hierarchy recursively and applies given action. */ fun forEachRecursively(action: (PreferenceHierarchyNode) -> Unit) { action(this) for (child in children) { if (child is PreferenceHierarchy) { child.forEachRecursively(action) } else { action(child) } } } /** Traversals preference hierarchy and applies given action. */ suspend fun forEachAsync(action: suspend (PreferenceHierarchyNode) -> Unit) { for (it in children) action(it) Loading @@ -157,18 +169,7 @@ class PreferenceHierarchy internal constructor(metadata: PreferenceMetadata) : /** Returns all the [PreferenceHierarchyNode]s appear in the hierarchy. */ fun getAllPreferences(): List<PreferenceHierarchyNode> = mutableListOf<PreferenceHierarchyNode>().also { getAllPreferences(it) } private fun getAllPreferences(result: MutableList<PreferenceHierarchyNode>) { result.add(this) for (child in children) { if (child is PreferenceHierarchy) { child.getAllPreferences(result) } else { result.add(child) } } } mutableListOf<PreferenceHierarchyNode>().apply { forEachRecursively { add(it) } } } /** Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt +4 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ import com.android.settingslib.widget.SettingsBasePreferenceFragment open class PreferenceFragment : SettingsBasePreferenceFragment(), PreferenceScreenProvider, PreferenceScreenBindingKeyProvider { private var preferenceScreenBindingHelper: PreferenceScreenBindingHelper? = null protected var preferenceScreenBindingHelper: PreferenceScreenBindingHelper? = null override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceScreen = createPreferenceScreen() Loading Loading @@ -129,7 +129,9 @@ open class PreferenceFragment : } protected fun getPreferenceKeysInHierarchy(): Set<String> = preferenceScreenBindingHelper?.getPreferences()?.map { it.metadata.key }?.toSet() ?: setOf() preferenceScreenBindingHelper?.let { mutableSetOf<String>().apply { it.forEachRecursively { add(it.metadata.key) } } } ?: setOf() companion object { private const val TAG = "PreferenceFragment" Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +5 −4 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ class PreferenceScreenBindingHelper( } } fun getPreferences() = preferenceHierarchy.getAllPreferences() fun forEachRecursively(action: (PreferenceHierarchyNode) -> Unit) = preferenceHierarchy.forEachRecursively(action) fun onCreate() { for (preference in lifecycleAwarePreferences) { Loading Loading @@ -191,11 +192,11 @@ class PreferenceScreenBindingHelper( companion object { /** Preference value is changed. */ private const val CHANGE_REASON_VALUE = 0 const val CHANGE_REASON_VALUE = 0 /** Preference state (title/summary, enable state, etc.) is changed. */ private const val CHANGE_REASON_STATE = 1 const val CHANGE_REASON_STATE = 1 /** Dependent preference state is changed. */ private const val CHANGE_REASON_DEPENDENT = 2 const val CHANGE_REASON_DEPENDENT = 2 /** Updates preference screen that has incomplete hierarchy. */ @JvmStatic Loading Loading
packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/KeyedObserver.kt +6 −0 Original line number Diff line number Diff line Loading @@ -202,6 +202,12 @@ open class KeyedDataObservable<K> : KeyedObservable<K> { entry.value.execute { observer.onKeyChanged(key, reason) } } } fun hasAnyObserver(): Boolean { synchronized(observers) { if (observers.isNotEmpty()) return true } synchronized(keyedObservers) { if (keyedObservers.isNotEmpty()) return true } return false } } /** [KeyedObservable] with no-op implementations for all interfaces. */ Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +13 −12 Original line number Diff line number Diff line Loading @@ -136,6 +136,18 @@ class PreferenceHierarchy internal constructor(metadata: PreferenceMetadata) : for (it in children) action(it) } /** Traversals preference hierarchy recursively and applies given action. */ fun forEachRecursively(action: (PreferenceHierarchyNode) -> Unit) { action(this) for (child in children) { if (child is PreferenceHierarchy) { child.forEachRecursively(action) } else { action(child) } } } /** Traversals preference hierarchy and applies given action. */ suspend fun forEachAsync(action: suspend (PreferenceHierarchyNode) -> Unit) { for (it in children) action(it) Loading @@ -157,18 +169,7 @@ class PreferenceHierarchy internal constructor(metadata: PreferenceMetadata) : /** Returns all the [PreferenceHierarchyNode]s appear in the hierarchy. */ fun getAllPreferences(): List<PreferenceHierarchyNode> = mutableListOf<PreferenceHierarchyNode>().also { getAllPreferences(it) } private fun getAllPreferences(result: MutableList<PreferenceHierarchyNode>) { result.add(this) for (child in children) { if (child is PreferenceHierarchy) { child.getAllPreferences(result) } else { result.add(child) } } } mutableListOf<PreferenceHierarchyNode>().apply { forEachRecursively { add(it) } } } /** Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceFragment.kt +4 −2 Original line number Diff line number Diff line Loading @@ -32,7 +32,7 @@ import com.android.settingslib.widget.SettingsBasePreferenceFragment open class PreferenceFragment : SettingsBasePreferenceFragment(), PreferenceScreenProvider, PreferenceScreenBindingKeyProvider { private var preferenceScreenBindingHelper: PreferenceScreenBindingHelper? = null protected var preferenceScreenBindingHelper: PreferenceScreenBindingHelper? = null override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { preferenceScreen = createPreferenceScreen() Loading Loading @@ -129,7 +129,9 @@ open class PreferenceFragment : } protected fun getPreferenceKeysInHierarchy(): Set<String> = preferenceScreenBindingHelper?.getPreferences()?.map { it.metadata.key }?.toSet() ?: setOf() preferenceScreenBindingHelper?.let { mutableSetOf<String>().apply { it.forEachRecursively { add(it.metadata.key) } } } ?: setOf() companion object { private const val TAG = "PreferenceFragment" Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +5 −4 Original line number Diff line number Diff line Loading @@ -143,7 +143,8 @@ class PreferenceScreenBindingHelper( } } fun getPreferences() = preferenceHierarchy.getAllPreferences() fun forEachRecursively(action: (PreferenceHierarchyNode) -> Unit) = preferenceHierarchy.forEachRecursively(action) fun onCreate() { for (preference in lifecycleAwarePreferences) { Loading Loading @@ -191,11 +192,11 @@ class PreferenceScreenBindingHelper( companion object { /** Preference value is changed. */ private const val CHANGE_REASON_VALUE = 0 const val CHANGE_REASON_VALUE = 0 /** Preference state (title/summary, enable state, etc.) is changed. */ private const val CHANGE_REASON_STATE = 1 const val CHANGE_REASON_STATE = 1 /** Dependent preference state is changed. */ private const val CHANGE_REASON_DEPENDENT = 2 const val CHANGE_REASON_DEPENDENT = 2 /** Updates preference screen that has incomplete hierarchy. */ @JvmStatic Loading