Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt +5 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.settingslib.ipc.MessageCodec import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.usePreferenceHierarchyScope import com.android.settingslib.preference.PreferenceScreenProvider import java.util.Locale Loading Loading @@ -54,11 +55,12 @@ class GetPreferenceGraphApiHandler( callingPid: Int, callingUid: Int, request: GetPreferenceGraphRequest, ): PreferenceGraphProto { ): PreferenceGraphProto = usePreferenceHierarchyScope { val elapsedRealtime = SystemClock.elapsedRealtime() var success = false try { val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request) val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request, this) if (request.screens.isEmpty()) { val factories = PreferenceScreenRegistry.preferenceScreenMetadataFactories factories.forEachAsync { _, factory -> builder.addPreferenceScreen(factory) } Loading @@ -68,7 +70,7 @@ class GetPreferenceGraphApiHandler( } val result = builder.build() success = true return result result } finally { metricsLogger?.logGraphApi( application, Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt +4 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.settingslib.metadata.PreferenceHierarchyNode import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.usePreferenceHierarchyScope /** * Request to get preference information. Loading Loading @@ -101,7 +102,7 @@ class PreferenceGetterApiHandler( callingPid: Int, callingUid: Int, request: PreferenceGetterRequest, ): PreferenceGetterResponse { ): PreferenceGetterResponse = usePreferenceHierarchyScope { val elapsedRealtime = SystemClock.elapsedRealtime() val errors = mutableMapOf<PreferenceCoordinate, Int>() val preferences = mutableMapOf<PreferenceCoordinate, PreferenceProto>() Loading @@ -128,7 +129,7 @@ class PreferenceGetterApiHandler( } val nodes = mutableMapOf<String, PreferenceHierarchyNode?>() for (coordinate in coordinates) nodes[coordinate.key] = null screenMetadata.getPreferenceHierarchy(application).forEachRecursively { screenMetadata.getPreferenceHierarchy(application, this).forEachRecursively { val metadata = it.metadata val key = metadata.key if (nodes.containsKey(key)) nodes[key] = it Loading Loading @@ -181,7 +182,7 @@ class PreferenceGetterApiHandler( ) } } return PreferenceGetterResponse(errors, preferences) PreferenceGetterResponse(errors, preferences) } override val requestCodec = PreferenceGetterRequestCodec() Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +14 −4 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenFactory import com.android.settingslib.preference.PreferenceScreenProvider import java.util.Locale import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext Loading @@ -76,6 +77,7 @@ private constructor( private val callingPid: Int, private val callingUid: Int, private val request: GetPreferenceGraphRequest, private val coroutineScope: CoroutineScope, ) { private val preferenceScreenFactory by lazy { PreferenceScreenFactory(context.ofLocale(request.locale)) Loading Loading @@ -179,7 +181,10 @@ private constructor( val instance = newInstance() Log.d(TAG, "createPreferenceScreen $instance") if (instance is PreferenceScreenProvider) { return@withContext instance.createPreferenceScreen(preferenceScreenFactory) return@withContext instance.createPreferenceScreen( preferenceScreenFactory, coroutineScope, ) } else { Log.w(TAG, "$instance is not PreferenceScreenProvider") } Loading Loading @@ -221,7 +226,7 @@ private constructor( if (!checkScreenFlag(metadata)) return false return addPreferenceScreen(metadata.key, metadata.arguments) { completeHierarchy = metadata.hasCompleteHierarchy() root = metadata.getPreferenceHierarchy(context).toProto(metadata, true) root = metadata.getPreferenceHierarchy(context, coroutineScope).toProto(metadata, true) } } Loading Loading @@ -375,7 +380,8 @@ private constructor( } if (fragment is PreferenceScreenProvider) { try { val screen = fragment.createPreferenceScreen(preferenceScreenFactory) val screen = fragment.createPreferenceScreen(preferenceScreenFactory, coroutineScope) val screenKey = screen?.key if (!screenKey.isNullOrEmpty()) { @Suppress("CheckReturnValue") Loading Loading @@ -404,7 +410,11 @@ private constructor( callingPid: Int, callingUid: Int, request: GetPreferenceGraphRequest, ) = PreferenceGraphBuilder(context, callingPid, callingUid, request).also { it.init() } coroutineScope: CoroutineScope, ) = PreferenceGraphBuilder(context, callingPid, callingUid, request, coroutineScope).also { it.init() } } } Loading packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt +4 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.usePreferenceHierarchyScope /** Request to set preference value. */ class PreferenceSetterRequest( Loading Loading @@ -130,7 +131,9 @@ class PreferenceSetterApiHandler( PreferenceScreenRegistry.create(application, request) ?: return notFound() val key = request.key val metadata = screenMetadata.getPreferenceHierarchy(application).find(key) ?: return notFound() usePreferenceHierarchyScope { screenMetadata.getPreferenceHierarchy(application, this).find(key) } ?: return notFound() fun <T> PreferenceMetadata.checkWritePermit(value: T): Int { @Suppress("UNCHECKED_CAST") val preference = (this as PersistentPreference<T>) Loading packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +2 −3 Original line number Diff line number Diff line Loading @@ -209,11 +209,10 @@ internal constructor(private val context: Context, metadata: PreferenceMetadata) * Builder function to create [PreferenceHierarchy] in * [DSL](https://kotlinlang.org/docs/type-safe-builders.html) manner. */ fun preferenceHierarchy( fun PreferenceScreenMetadata.preferenceHierarchy( context: Context, metadata: PreferenceMetadata, init: PreferenceHierarchy.() -> Unit, ) = PreferenceHierarchy(context, metadata).also(init) ) = PreferenceHierarchy(context, this).also(init) /** * Builder function to create [PreferenceHierarchy] with coroutine in Loading Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/GetPreferenceGraphApiHandler.kt +5 −3 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ import com.android.settingslib.ipc.MessageCodec import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.usePreferenceHierarchyScope import com.android.settingslib.preference.PreferenceScreenProvider import java.util.Locale Loading Loading @@ -54,11 +55,12 @@ class GetPreferenceGraphApiHandler( callingPid: Int, callingUid: Int, request: GetPreferenceGraphRequest, ): PreferenceGraphProto { ): PreferenceGraphProto = usePreferenceHierarchyScope { val elapsedRealtime = SystemClock.elapsedRealtime() var success = false try { val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request) val builder = PreferenceGraphBuilder.of(application, callingPid, callingUid, request, this) if (request.screens.isEmpty()) { val factories = PreferenceScreenRegistry.preferenceScreenMetadataFactories factories.forEachAsync { _, factory -> builder.addPreferenceScreen(factory) } Loading @@ -68,7 +70,7 @@ class GetPreferenceGraphApiHandler( } val result = builder.build() success = true return result result } finally { metricsLogger?.logGraphApi( application, Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGetterApi.kt +4 −3 Original line number Diff line number Diff line Loading @@ -28,6 +28,7 @@ import com.android.settingslib.metadata.PreferenceHierarchyNode import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceScreenCoordinate import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.usePreferenceHierarchyScope /** * Request to get preference information. Loading Loading @@ -101,7 +102,7 @@ class PreferenceGetterApiHandler( callingPid: Int, callingUid: Int, request: PreferenceGetterRequest, ): PreferenceGetterResponse { ): PreferenceGetterResponse = usePreferenceHierarchyScope { val elapsedRealtime = SystemClock.elapsedRealtime() val errors = mutableMapOf<PreferenceCoordinate, Int>() val preferences = mutableMapOf<PreferenceCoordinate, PreferenceProto>() Loading @@ -128,7 +129,7 @@ class PreferenceGetterApiHandler( } val nodes = mutableMapOf<String, PreferenceHierarchyNode?>() for (coordinate in coordinates) nodes[coordinate.key] = null screenMetadata.getPreferenceHierarchy(application).forEachRecursively { screenMetadata.getPreferenceHierarchy(application, this).forEachRecursively { val metadata = it.metadata val key = metadata.key if (nodes.containsKey(key)) nodes[key] = it Loading Loading @@ -181,7 +182,7 @@ class PreferenceGetterApiHandler( ) } } return PreferenceGetterResponse(errors, preferences) PreferenceGetterResponse(errors, preferences) } override val requestCodec = PreferenceGetterRequestCodec() Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceGraphBuilder.kt +14 −4 Original line number Diff line number Diff line Loading @@ -64,6 +64,7 @@ import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenFactory import com.android.settingslib.preference.PreferenceScreenProvider import java.util.Locale import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext Loading @@ -76,6 +77,7 @@ private constructor( private val callingPid: Int, private val callingUid: Int, private val request: GetPreferenceGraphRequest, private val coroutineScope: CoroutineScope, ) { private val preferenceScreenFactory by lazy { PreferenceScreenFactory(context.ofLocale(request.locale)) Loading Loading @@ -179,7 +181,10 @@ private constructor( val instance = newInstance() Log.d(TAG, "createPreferenceScreen $instance") if (instance is PreferenceScreenProvider) { return@withContext instance.createPreferenceScreen(preferenceScreenFactory) return@withContext instance.createPreferenceScreen( preferenceScreenFactory, coroutineScope, ) } else { Log.w(TAG, "$instance is not PreferenceScreenProvider") } Loading Loading @@ -221,7 +226,7 @@ private constructor( if (!checkScreenFlag(metadata)) return false return addPreferenceScreen(metadata.key, metadata.arguments) { completeHierarchy = metadata.hasCompleteHierarchy() root = metadata.getPreferenceHierarchy(context).toProto(metadata, true) root = metadata.getPreferenceHierarchy(context, coroutineScope).toProto(metadata, true) } } Loading Loading @@ -375,7 +380,8 @@ private constructor( } if (fragment is PreferenceScreenProvider) { try { val screen = fragment.createPreferenceScreen(preferenceScreenFactory) val screen = fragment.createPreferenceScreen(preferenceScreenFactory, coroutineScope) val screenKey = screen?.key if (!screenKey.isNullOrEmpty()) { @Suppress("CheckReturnValue") Loading Loading @@ -404,7 +410,11 @@ private constructor( callingPid: Int, callingUid: Int, request: GetPreferenceGraphRequest, ) = PreferenceGraphBuilder(context, callingPid, callingUid, request).also { it.init() } coroutineScope: CoroutineScope, ) = PreferenceGraphBuilder(context, callingPid, callingUid, request, coroutineScope).also { it.init() } } } Loading
packages/SettingsLib/Graph/src/com/android/settingslib/graph/PreferenceSetterApi.kt +4 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import com.android.settingslib.metadata.PreferenceRemoteOpMetricsLogger import com.android.settingslib.metadata.PreferenceRestrictionProvider import com.android.settingslib.metadata.PreferenceScreenRegistry import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.usePreferenceHierarchyScope /** Request to set preference value. */ class PreferenceSetterRequest( Loading Loading @@ -130,7 +131,9 @@ class PreferenceSetterApiHandler( PreferenceScreenRegistry.create(application, request) ?: return notFound() val key = request.key val metadata = screenMetadata.getPreferenceHierarchy(application).find(key) ?: return notFound() usePreferenceHierarchyScope { screenMetadata.getPreferenceHierarchy(application, this).find(key) } ?: return notFound() fun <T> PreferenceMetadata.checkWritePermit(value: T): Int { @Suppress("UNCHECKED_CAST") val preference = (this as PersistentPreference<T>) Loading
packages/SettingsLib/Metadata/src/com/android/settingslib/metadata/PreferenceHierarchy.kt +2 −3 Original line number Diff line number Diff line Loading @@ -209,11 +209,10 @@ internal constructor(private val context: Context, metadata: PreferenceMetadata) * Builder function to create [PreferenceHierarchy] in * [DSL](https://kotlinlang.org/docs/type-safe-builders.html) manner. */ fun preferenceHierarchy( fun PreferenceScreenMetadata.preferenceHierarchy( context: Context, metadata: PreferenceMetadata, init: PreferenceHierarchy.() -> Unit, ) = PreferenceHierarchy(context, metadata).also(init) ) = PreferenceHierarchy(context, this).also(init) /** * Builder function to create [PreferenceHierarchy] with coroutine in Loading