Loading packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/HandlerExecutor.kt 0 → 100644 +45 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settingslib.datastore import android.os.Handler import android.os.Looper import java.util.concurrent.Executor /** * Adapter of [Handler] and [Executor], where the task is executed on handler with given looper. * * When current looper is same with the given looper, task passed to [Executor.execute] will be * executed immediately to improve better performance. * * @param looper Looper of the handler. */ open class HandlerExecutor(looper: Looper) : Handler(looper), Executor { override fun execute(command: Runnable) { if (looper == Looper.myLooper()) { command.run() } else { post(command) } } companion object { /** The main thread [HandlerExecutor]. */ val main = HandlerExecutor(Looper.getMainLooper()) } } packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsStore.kt +1 −3 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ package com.android.settingslib.datastore import android.content.ContentResolver import android.database.ContentObserver import android.net.Uri import android.os.Handler import android.os.Looper import android.util.Log import java.util.concurrent.Executor import java.util.concurrent.atomic.AtomicInteger Loading @@ -39,7 +37,7 @@ abstract class SettingsStore(protected val contentResolver: ContentResolver) : private val counter = AtomicInteger() private val contentObserver = object : ContentObserver(Handler(Looper.getMainLooper())) { object : ContentObserver(HandlerExecutor.main) { override fun onChange(selfChange: Boolean) { super.onChange(selfChange, null) } Loading packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +4 −12 Original line number Diff line number Diff line Loading @@ -19,12 +19,11 @@ package com.android.settingslib.preference import android.content.Context import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper import androidx.preference.Preference import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceGroup import androidx.preference.PreferenceScreen import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedDataObservable import com.android.settingslib.datastore.KeyedObservable Loading @@ -37,7 +36,6 @@ import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceScreenRegistry import com.google.common.collect.ImmutableMap import com.google.common.collect.ImmutableMultimap import java.util.concurrent.Executor /** * Helper to bind preferences on given [preferenceScreen]. Loading @@ -54,13 +52,7 @@ class PreferenceScreenBindingHelper( private val preferenceHierarchy: PreferenceHierarchy, ) : KeyedDataObservable<String>() { private val handler = Handler(Looper.getMainLooper()) private val executor = object : Executor { override fun execute(command: Runnable) { handler.post(command) } } private val mainExecutor = HandlerExecutor.main private val preferenceLifecycleContext = object : PreferenceLifecycleContext(context) { Loading Loading @@ -121,8 +113,8 @@ class PreferenceScreenBindingHelper( this.lifecycleAwarePreferences = lifecycleAwarePreferences.toTypedArray() preferenceObserver = KeyedObserver { key, reason -> onPreferenceChange(key, reason) } addObserver(preferenceObserver, executor) for (storage in storages) storage.addObserver(storageObserver, executor) addObserver(preferenceObserver, mainExecutor) for (storage in storages) storage.addObserver(storageObserver, mainExecutor) } private fun onPreferenceChange(key: String?, reason: Int) { Loading Loading
packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/HandlerExecutor.kt 0 → 100644 +45 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.settingslib.datastore import android.os.Handler import android.os.Looper import java.util.concurrent.Executor /** * Adapter of [Handler] and [Executor], where the task is executed on handler with given looper. * * When current looper is same with the given looper, task passed to [Executor.execute] will be * executed immediately to improve better performance. * * @param looper Looper of the handler. */ open class HandlerExecutor(looper: Looper) : Handler(looper), Executor { override fun execute(command: Runnable) { if (looper == Looper.myLooper()) { command.run() } else { post(command) } } companion object { /** The main thread [HandlerExecutor]. */ val main = HandlerExecutor(Looper.getMainLooper()) } }
packages/SettingsLib/DataStore/src/com/android/settingslib/datastore/SettingsStore.kt +1 −3 Original line number Diff line number Diff line Loading @@ -19,8 +19,6 @@ package com.android.settingslib.datastore import android.content.ContentResolver import android.database.ContentObserver import android.net.Uri import android.os.Handler import android.os.Looper import android.util.Log import java.util.concurrent.Executor import java.util.concurrent.atomic.AtomicInteger Loading @@ -39,7 +37,7 @@ abstract class SettingsStore(protected val contentResolver: ContentResolver) : private val counter = AtomicInteger() private val contentObserver = object : ContentObserver(Handler(Looper.getMainLooper())) { object : ContentObserver(HandlerExecutor.main) { override fun onChange(selfChange: Boolean) { super.onChange(selfChange, null) } Loading
packages/SettingsLib/Preference/src/com/android/settingslib/preference/PreferenceScreenBindingHelper.kt +4 −12 Original line number Diff line number Diff line Loading @@ -19,12 +19,11 @@ package com.android.settingslib.preference import android.content.Context import android.content.Intent import android.os.Bundle import android.os.Handler import android.os.Looper import androidx.preference.Preference import androidx.preference.PreferenceDataStore import androidx.preference.PreferenceGroup import androidx.preference.PreferenceScreen import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyedDataObservable import com.android.settingslib.datastore.KeyedObservable Loading @@ -37,7 +36,6 @@ import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceScreenRegistry import com.google.common.collect.ImmutableMap import com.google.common.collect.ImmutableMultimap import java.util.concurrent.Executor /** * Helper to bind preferences on given [preferenceScreen]. Loading @@ -54,13 +52,7 @@ class PreferenceScreenBindingHelper( private val preferenceHierarchy: PreferenceHierarchy, ) : KeyedDataObservable<String>() { private val handler = Handler(Looper.getMainLooper()) private val executor = object : Executor { override fun execute(command: Runnable) { handler.post(command) } } private val mainExecutor = HandlerExecutor.main private val preferenceLifecycleContext = object : PreferenceLifecycleContext(context) { Loading Loading @@ -121,8 +113,8 @@ class PreferenceScreenBindingHelper( this.lifecycleAwarePreferences = lifecycleAwarePreferences.toTypedArray() preferenceObserver = KeyedObserver { key, reason -> onPreferenceChange(key, reason) } addObserver(preferenceObserver, executor) for (storage in storages) storage.addObserver(storageObserver, executor) addObserver(preferenceObserver, mainExecutor) for (storage in storages) storage.addObserver(storageObserver, mainExecutor) } private fun onPreferenceChange(key: String?, reason: Int) { Loading