diff options
| author | 2024-11-16 09:28:39 +0000 | |
|---|---|---|
| committer | 2024-11-16 09:28:39 +0000 | |
| commit | 4044f94dea79bbffaccc1c5fd8be8259fce6b194 (patch) | |
| tree | 0060e2c76ac8880cb7bc6a5851a31dbfa14c4156 | |
| parent | ed1117385223afc36499db86f9cec15ad9ea820e (diff) | |
| parent | f33c358436e874fa39113ef1a8846221454b06f4 (diff) | |
Merge changes from topic "settings-proxy-coroutinescope" into main
* changes:
Cache CoroutineScope for settings APIs
Apply new code formatting to SettingsProxy
11 files changed, 193 insertions, 169 deletions
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/SettingsProxyTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/SettingsProxyTest.kt index 2e6d0fc847bb..e25bf13c41f2 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/SettingsProxyTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/SettingsProxyTest.kt @@ -27,7 +27,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestScope @@ -57,7 +57,7 @@ class SettingsProxyTest : SysuiTestCase() { @Before fun setUp() { testScope = TestScope(testDispatcher) - mSettings = FakeSettingsProxy(testDispatcher) + mSettings = FakeSettingsProxy(testScope) mContentObserver = object : ContentObserver(Handler(Looper.getMainLooper())) {} } @@ -92,7 +92,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverSync( TEST_SETTING, notifyForDescendants = true, - mContentObserver + mContentObserver, ) verify(mSettings.getContentResolver()) .registerContentObserver(eq(TEST_SETTING_URI), eq(true), eq(mContentObserver)) @@ -104,7 +104,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserver( TEST_SETTING, notifyForDescendants = true, - mContentObserver + mContentObserver, ) verify(mSettings.getContentResolver()) .registerContentObserver(eq(TEST_SETTING_URI), eq(true), eq(mContentObserver)) @@ -116,7 +116,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverAsync( TEST_SETTING, notifyForDescendants = true, - mContentObserver + mContentObserver, ) testScope.advanceUntilIdle() verify(mSettings.getContentResolver()) @@ -154,7 +154,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverSync( TEST_SETTING_URI, notifyForDescendants = true, - mContentObserver + mContentObserver, ) verify(mSettings.getContentResolver()) .registerContentObserver(eq(TEST_SETTING_URI), eq(true), eq(mContentObserver)) @@ -166,7 +166,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserver( TEST_SETTING_URI, notifyForDescendants = true, - mContentObserver + mContentObserver, ) verify(mSettings.getContentResolver()) .registerContentObserver(eq(TEST_SETTING_URI), eq(true), eq(mContentObserver)) @@ -178,7 +178,7 @@ class SettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverAsync( TEST_SETTING_URI, notifyForDescendants = true, - mContentObserver + mContentObserver, ) testScope.advanceUntilIdle() verify(mSettings.getContentResolver()) @@ -202,7 +202,7 @@ class SettingsProxyTest : SysuiTestCase() { TEST_SETTING_URI, false, mContentObserver, - it + it, ) } } @@ -382,15 +382,15 @@ class SettingsProxyTest : SysuiTestCase() { assertThat(mSettings.getFloat(TEST_SETTING, 2.5F)).isEqualTo(2.5F) } - private class FakeSettingsProxy(val testDispatcher: CoroutineDispatcher) : SettingsProxy { + private class FakeSettingsProxy(val testScope: CoroutineScope) : SettingsProxy { private val mContentResolver = mock(ContentResolver::class.java) private val settingToValueMap: MutableMap<String, String?> = mutableMapOf() override fun getContentResolver() = mContentResolver - override val backgroundDispatcher: CoroutineDispatcher - get() = testDispatcher + override val settingsScope: CoroutineScope + get() = testScope override fun getUriFor(name: String) = Uri.parse(StringBuilder().append("content://settings/").append(name).toString()) @@ -408,7 +408,7 @@ class SettingsProxyTest : SysuiTestCase() { name: String, value: String?, tag: String?, - makeDefault: Boolean + makeDefault: Boolean, ): Boolean { settingToValueMap[name] = value return true diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/UserSettingsProxyTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/UserSettingsProxyTest.kt index 00b8cd04bdaf..5787f7dfc61f 100644 --- a/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/UserSettingsProxyTest.kt +++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/util/settings/UserSettingsProxyTest.kt @@ -28,7 +28,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.google.common.truth.Truth.assertThat -import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.launch import kotlinx.coroutines.test.StandardTestDispatcher @@ -36,7 +36,6 @@ import kotlinx.coroutines.test.TestScope import kotlinx.coroutines.test.advanceUntilIdle import kotlinx.coroutines.test.runTest import org.junit.Assert.assertThrows -import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mockito.mock @@ -51,14 +50,9 @@ class UserSettingsProxyTest : SysuiTestCase() { private var userId = MAIN_USER_ID private val testDispatcher = StandardTestDispatcher() - private var mSettings: UserSettingsProxy = FakeUserSettingsProxy({ userId }, testDispatcher) + private val testScope = TestScope(testDispatcher) + private var mSettings: UserSettingsProxy = FakeUserSettingsProxy({ userId }, testScope) private var mContentObserver = object : ContentObserver(Handler(Looper.getMainLooper())) {} - private lateinit var testScope: TestScope - - @Before - fun setUp() { - testScope = TestScope(testDispatcher) - } @Test fun registerContentObserverForUser_inputString_success() = @@ -69,7 +63,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -82,7 +76,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -96,7 +90,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -107,14 +101,14 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING, notifyForDescendants = true, mContentObserver, - userId + userId, ) verify(mSettings.getContentResolver()) .registerContentObserver( eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -125,16 +119,14 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING, notifyForDescendants = true, mContentObserver, - userId + userId, ) verify(mSettings.getContentResolver()) .registerContentObserver( eq(TEST_SETTING_URI), - eq( - true, - ), + eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -145,7 +137,7 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING, notifyForDescendants = true, mContentObserver, - userId + userId, ) testScope.advanceUntilIdle() verify(mSettings.getContentResolver()) @@ -153,7 +145,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -166,7 +158,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -179,7 +171,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -189,7 +181,7 @@ class UserSettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverForUserAsync( TEST_SETTING_URI, mContentObserver, - userId + userId, ) testScope.advanceUntilIdle() @@ -198,7 +190,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -213,7 +205,7 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING_URI, mContentObserver, userId, - runnable + runnable, ) testScope.advanceUntilIdle() assertThat(callbackCalled).isTrue() @@ -226,14 +218,14 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING_URI, notifyForDescendants = true, mContentObserver, - userId + userId, ) verify(mSettings.getContentResolver()) .registerContentObserver( eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -244,14 +236,14 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING_URI, notifyForDescendants = true, mContentObserver, - userId + userId, ) verify(mSettings.getContentResolver()) .registerContentObserver( eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -262,7 +254,7 @@ class UserSettingsProxyTest : SysuiTestCase() { TEST_SETTING_URI, notifyForDescendants = true, mContentObserver, - userId + userId, ) testScope.advanceUntilIdle() verify(mSettings.getContentResolver()) @@ -270,7 +262,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(MAIN_USER_ID) + eq(MAIN_USER_ID), ) } @@ -283,7 +275,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(0) + eq(0), ) } @@ -296,7 +288,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(0) + eq(0), ) } @@ -309,7 +301,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(0) + eq(0), ) } } @@ -320,14 +312,14 @@ class UserSettingsProxyTest : SysuiTestCase() { mSettings.registerContentObserverSync( TEST_SETTING_URI, notifyForDescendants = true, - mContentObserver + mContentObserver, ) verify(mSettings.getContentResolver()) .registerContentObserver( eq(TEST_SETTING_URI), eq(true), eq(mContentObserver), - eq(0) + eq(0), ) } @@ -340,7 +332,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(0) + eq(0), ) } @@ -354,7 +346,7 @@ class UserSettingsProxyTest : SysuiTestCase() { eq(TEST_SETTING_URI), eq(false), eq(mContentObserver), - eq(0) + eq(0), ) } } @@ -557,7 +549,7 @@ class UserSettingsProxyTest : SysuiTestCase() { */ private class FakeUserSettingsProxy( override val currentUserProvider: SettingsProxy.CurrentUserIdProvider, - val testDispatcher: CoroutineDispatcher + val testScope: CoroutineScope, ) : UserSettingsProxy { private val mContentResolver = mock(ContentResolver::class.java) @@ -569,8 +561,8 @@ class UserSettingsProxyTest : SysuiTestCase() { override fun getUriFor(name: String) = Uri.parse(StringBuilder().append(URI_PREFIX).append(name).toString()) - override val backgroundDispatcher: CoroutineDispatcher - get() = testDispatcher + override val settingsScope: CoroutineScope + get() = testScope override fun getStringForUser(name: String, userHandle: Int) = userIdToSettingsValueMap[userHandle]?.get(name) ?: "" @@ -578,7 +570,7 @@ class UserSettingsProxyTest : SysuiTestCase() { override fun putString( name: String, value: String?, - overrideableByRestore: Boolean + overrideableByRestore: Boolean, ): Boolean { userIdToSettingsValueMap[DEFAULT_USER_ID]?.put(name, value) return true @@ -588,7 +580,7 @@ class UserSettingsProxyTest : SysuiTestCase() { name: String, value: String?, tag: String?, - makeDefault: Boolean + makeDefault: Boolean, ): Boolean { putStringForUser(name, value, DEFAULT_USER_ID) return true @@ -605,7 +597,7 @@ class UserSettingsProxyTest : SysuiTestCase() { tag: String?, makeDefault: Boolean, userHandle: Int, - overrideableByRestore: Boolean + overrideableByRestore: Boolean, ): Boolean { userIdToSettingsValueMap[userHandle]?.set(name, value) return true diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/GlobalSettingsImpl.java b/packages/SystemUI/pods/com/android/systemui/util/settings/GlobalSettingsImpl.java index d68501f69bc0..6b909529e33a 100644 --- a/packages/SystemUI/pods/com/android/systemui/util/settings/GlobalSettingsImpl.java +++ b/packages/SystemUI/pods/com/android/systemui/util/settings/GlobalSettingsImpl.java @@ -25,7 +25,7 @@ import android.provider.Settings; import com.android.systemui.util.settings.SettingsSingleThreadBackground; -import kotlinx.coroutines.CoroutineDispatcher; +import kotlinx.coroutines.CoroutineScope; import javax.inject.Inject; @@ -33,13 +33,13 @@ import javax.inject.Inject; @SuppressLint("StaticSettingsProvider") class GlobalSettingsImpl implements GlobalSettings { private final ContentResolver mContentResolver; - private final CoroutineDispatcher mBgDispatcher; + private final CoroutineScope mSettingsScope; @Inject GlobalSettingsImpl(ContentResolver contentResolver, - @SettingsSingleThreadBackground CoroutineDispatcher bgDispatcher) { + @SettingsSingleThreadBackground CoroutineScope settingsScope) { mContentResolver = contentResolver; - mBgDispatcher = bgDispatcher; + mSettingsScope = settingsScope; } @NonNull @@ -56,8 +56,8 @@ class GlobalSettingsImpl implements GlobalSettings { @NonNull @Override - public CoroutineDispatcher getBackgroundDispatcher() { - return mBgDispatcher; + public CoroutineScope getSettingsScope() { + return mSettingsScope; } @Override diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/SecureSettingsImpl.java b/packages/SystemUI/pods/com/android/systemui/util/settings/SecureSettingsImpl.java index 211a6f48e475..ae89a5f021c2 100644 --- a/packages/SystemUI/pods/com/android/systemui/util/settings/SecureSettingsImpl.java +++ b/packages/SystemUI/pods/com/android/systemui/util/settings/SecureSettingsImpl.java @@ -23,23 +23,23 @@ import android.provider.Settings; import com.android.systemui.util.settings.SettingsSingleThreadBackground; -import kotlinx.coroutines.CoroutineDispatcher; +import kotlinx.coroutines.CoroutineScope; import javax.inject.Inject; class SecureSettingsImpl implements SecureSettings { private final ContentResolver mContentResolver; private final CurrentUserIdProvider mCurrentUserProvider; - private final CoroutineDispatcher mBgDispatcher; + private final CoroutineScope mSettingsScope; @Inject SecureSettingsImpl( ContentResolver contentResolver, CurrentUserIdProvider currentUserProvider, - @SettingsSingleThreadBackground CoroutineDispatcher bgDispatcher) { + @SettingsSingleThreadBackground CoroutineScope settingsScope) { mContentResolver = contentResolver; mCurrentUserProvider = currentUserProvider; - mBgDispatcher = bgDispatcher; + mSettingsScope = settingsScope; } @NonNull @@ -62,8 +62,8 @@ class SecureSettingsImpl implements SecureSettings { @NonNull @Override - public CoroutineDispatcher getBackgroundDispatcher() { - return mBgDispatcher; + public CoroutineScope getSettingsScope() { + return mSettingsScope; } @Override diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt index 5d0b0d55e1f6..154d3cc9eda1 100644 --- a/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt +++ b/packages/SystemUI/pods/com/android/systemui/util/settings/SettingsProxy.kt @@ -23,10 +23,12 @@ import android.provider.Settings.SettingNotFoundException import androidx.annotation.AnyThread import androidx.annotation.WorkerThread import com.android.app.tracing.TraceUtils.trace -import com.android.systemui.coroutines.newTracingContext +import com.android.app.tracing.coroutines.launchTraced as launch +import com.android.app.tracing.coroutines.nameCoroutine +import kotlin.coroutines.CoroutineContext +import kotlin.coroutines.EmptyCoroutineContext import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope -import com.android.app.tracing.coroutines.launchTraced as launch import kotlinx.coroutines.withContext /** @@ -47,11 +49,14 @@ interface SettingsProxy { /** Returns the [ContentResolver] this instance was constructed with. */ fun getContentResolver(): ContentResolver - /** - * Returns the background [CoroutineDispatcher] that the async APIs will use for a specific - * implementation. - */ - val backgroundDispatcher: CoroutineDispatcher + /** Returns the [CoroutineScope] that the async APIs will use. */ + val settingsScope: CoroutineScope + + @OptIn(ExperimentalStdlibApi::class) + fun settingsDispatcherContext(name: String): CoroutineContext { + return (settingsScope.coroutineContext[CoroutineDispatcher] ?: EmptyCoroutineContext) + + nameCoroutine(name) + } /** * Construct the content URI for a particular name/value pair, useful for monitoring changes @@ -82,7 +87,7 @@ interface SettingsProxy { * wish to synchronize execution. */ suspend fun registerContentObserver(name: String, settingsObserver: ContentObserver) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserver-A")) { registerContentObserverSync(getUriFor(name), settingsObserver) } } @@ -94,7 +99,7 @@ interface SettingsProxy { */ @AnyThread fun registerContentObserverAsync(name: String, settingsObserver: ContentObserver) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-A")).launch { + settingsScope.launch("registerContentObserverAsync-A") { registerContentObserverSync(getUriFor(name), settingsObserver) } @@ -111,7 +116,7 @@ interface SettingsProxy { settingsObserver: ContentObserver, @WorkerThread registered: Runnable, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-B")).launch { + settingsScope.launch("registerContentObserverAsync-B") { registerContentObserverSync(getUriFor(name), settingsObserver) registered.run() } @@ -134,7 +139,9 @@ interface SettingsProxy { * wish to synchronize execution. */ suspend fun registerContentObserver(uri: Uri, settingsObserver: ContentObserver) { - withContext(backgroundDispatcher) { registerContentObserverSync(uri, settingsObserver) } + withContext(settingsDispatcherContext("registerContentObserver-B")) { + registerContentObserverSync(uri, settingsObserver) + } } /** @@ -144,7 +151,7 @@ interface SettingsProxy { */ @AnyThread fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-C")).launch { + settingsScope.launch("registerContentObserverAsync-C") { registerContentObserverSync(uri, settingsObserver) } @@ -161,7 +168,7 @@ interface SettingsProxy { settingsObserver: ContentObserver, @WorkerThread registered: Runnable, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-D")).launch { + settingsScope.launch("registerContentObserverAsync-D") { registerContentObserverSync(uri, settingsObserver) registered.run() } @@ -188,9 +195,9 @@ interface SettingsProxy { suspend fun registerContentObserver( name: String, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserver-C")) { registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver) } } @@ -206,7 +213,7 @@ interface SettingsProxy { notifyForDescendants: Boolean, settingsObserver: ContentObserver, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-E")).launch { + settingsScope.launch("registerContentObserverAsync-E") { registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver) } @@ -224,7 +231,7 @@ interface SettingsProxy { settingsObserver: ContentObserver, @WorkerThread registered: Runnable, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-F")).launch { + settingsScope.launch("registerContentObserverAsync-F") { registerContentObserverSync(getUriFor(name), notifyForDescendants, settingsObserver) registered.run() } @@ -239,7 +246,7 @@ interface SettingsProxy { fun registerContentObserverSync( uri: Uri, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ) { trace({ "SP#registerObserver#[$uri]" }) { getContentResolver() @@ -257,9 +264,9 @@ interface SettingsProxy { suspend fun registerContentObserver( uri: Uri, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserver-D")) { registerContentObserverSync(uri, notifyForDescendants, settingsObserver) } } @@ -275,7 +282,7 @@ interface SettingsProxy { notifyForDescendants: Boolean, settingsObserver: ContentObserver, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-G")).launch { + settingsScope.launch("registerContentObserverAsync-G") { registerContentObserverSync(uri, notifyForDescendants, settingsObserver) } @@ -293,7 +300,7 @@ interface SettingsProxy { settingsObserver: ContentObserver, @WorkerThread registered: Runnable, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-H")).launch { + settingsScope.launch("registerContentObserverAsync-H") { registerContentObserverSync(uri, notifyForDescendants, settingsObserver) registered.run() } @@ -319,7 +326,9 @@ interface SettingsProxy { * async block if they wish to synchronize execution. */ suspend fun unregisterContentObserver(settingsObserver: ContentObserver) { - withContext(backgroundDispatcher) { unregisterContentObserverSync(settingsObserver) } + withContext(settingsDispatcherContext("unregisterContentObserver")) { + unregisterContentObserverSync(settingsObserver) + } } /** @@ -330,7 +339,7 @@ interface SettingsProxy { */ @AnyThread fun unregisterContentObserverAsync(settingsObserver: ContentObserver) = - CoroutineScope(backgroundDispatcher + newTracingContext("SettingsProxy-I")).launch { + settingsScope.launch("unregisterContentObserverAsync") { unregisterContentObserver(settingsObserver) } diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/SystemSettingsImpl.java b/packages/SystemUI/pods/com/android/systemui/util/settings/SystemSettingsImpl.java index 1b3f74e0c983..65d1c276cbfa 100644 --- a/packages/SystemUI/pods/com/android/systemui/util/settings/SystemSettingsImpl.java +++ b/packages/SystemUI/pods/com/android/systemui/util/settings/SystemSettingsImpl.java @@ -23,22 +23,22 @@ import android.provider.Settings; import com.android.systemui.util.settings.SettingsSingleThreadBackground; -import kotlinx.coroutines.CoroutineDispatcher; +import kotlinx.coroutines.CoroutineScope; import javax.inject.Inject; class SystemSettingsImpl implements SystemSettings { private final ContentResolver mContentResolver; private final CurrentUserIdProvider mCurrentUserProvider; - private final CoroutineDispatcher mBgCoroutineDispatcher; + private final CoroutineScope mSettingsScope; @Inject SystemSettingsImpl(ContentResolver contentResolver, CurrentUserIdProvider currentUserProvider, - @SettingsSingleThreadBackground CoroutineDispatcher bgDispatcher) { + @SettingsSingleThreadBackground CoroutineScope settingsScope) { mContentResolver = contentResolver; mCurrentUserProvider = currentUserProvider; - mBgCoroutineDispatcher = bgDispatcher; + mSettingsScope = settingsScope; } @NonNull @@ -61,8 +61,8 @@ class SystemSettingsImpl implements SystemSettings { @NonNull @Override - public CoroutineDispatcher getBackgroundDispatcher() { - return mBgCoroutineDispatcher; + public CoroutineScope getSettingsScope() { + return mSettingsScope; } @Override diff --git a/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt b/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt index 4b03df6b0070..1a5517059ca4 100644 --- a/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt +++ b/packages/SystemUI/pods/com/android/systemui/util/settings/UserSettingsProxy.kt @@ -23,13 +23,11 @@ import android.net.Uri import android.os.UserHandle import android.provider.Settings.SettingNotFoundException import com.android.app.tracing.TraceUtils.trace -import com.android.systemui.coroutines.newTracingContext +import com.android.app.tracing.coroutines.launchTraced as launch import com.android.systemui.util.settings.SettingsProxy.Companion.parseFloat import com.android.systemui.util.settings.SettingsProxy.Companion.parseFloatOrThrow import com.android.systemui.util.settings.SettingsProxy.Companion.parseLongOrThrow import com.android.systemui.util.settings.SettingsProxy.Companion.parseLongOrUseDefault -import kotlinx.coroutines.CoroutineScope -import com.android.app.tracing.coroutines.launchTraced as launch import kotlinx.coroutines.withContext /** @@ -73,13 +71,13 @@ interface UserSettingsProxy : SettingsProxy { } override suspend fun registerContentObserver(uri: Uri, settingsObserver: ContentObserver) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserver-A")) { registerContentObserverForUserSync(uri, settingsObserver, userId) } } override fun registerContentObserverAsync(uri: Uri, settingsObserver: ContentObserver) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-A")).launch { + settingsScope.launch("registerContentObserverAsync-A") { registerContentObserverForUserSync(uri, settingsObserver, userId) } @@ -96,9 +94,9 @@ interface UserSettingsProxy : SettingsProxy { override suspend fun registerContentObserver( uri: Uri, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserver-B")) { registerContentObserverForUserSync(uri, notifyForDescendants, settingsObserver, userId) } } @@ -113,7 +111,7 @@ interface UserSettingsProxy : SettingsProxy { notifyForDescendants: Boolean, settingsObserver: ContentObserver, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-B")).launch { + settingsScope.launch("registerContentObserverAsync-B") { registerContentObserverForUserSync(uri, notifyForDescendants, settingsObserver, userId) } @@ -126,7 +124,7 @@ interface UserSettingsProxy : SettingsProxy { fun registerContentObserverForUserSync( name: String, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { registerContentObserverForUserSync(getUriFor(name), settingsObserver, userHandle) } @@ -141,9 +139,9 @@ interface UserSettingsProxy : SettingsProxy { suspend fun registerContentObserverForUser( name: String, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserverForUser-A")) { registerContentObserverForUserSync(name, settingsObserver, userHandle) } } @@ -158,7 +156,7 @@ interface UserSettingsProxy : SettingsProxy { settingsObserver: ContentObserver, userHandle: Int, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-C")).launch { + settingsScope.launch("registerContentObserverForUserAsync-A") { registerContentObserverForUserSync(getUriFor(name), settingsObserver, userHandle) } @@ -167,7 +165,7 @@ interface UserSettingsProxy : SettingsProxy { fun registerContentObserverForUserSync( uri: Uri, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { registerContentObserverForUserSync(uri, false, settingsObserver, userHandle) } @@ -182,9 +180,9 @@ interface UserSettingsProxy : SettingsProxy { suspend fun registerContentObserverForUser( uri: Uri, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserverForUser-B")) { registerContentObserverForUserSync(uri, settingsObserver, userHandle) } } @@ -199,7 +197,7 @@ interface UserSettingsProxy : SettingsProxy { settingsObserver: ContentObserver, userHandle: Int, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-D")).launch { + settingsScope.launch("registerContentObserverForUserAsync-B") { registerContentObserverForUserSync(uri, settingsObserver, userHandle) } @@ -216,7 +214,7 @@ interface UserSettingsProxy : SettingsProxy { userHandle: Int, @WorkerThread registered: Runnable, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-E")).launch { + settingsScope.launch("registerContentObserverForUserAsync-C") { registerContentObserverForUserSync(uri, settingsObserver, userHandle) registered.run() } @@ -231,13 +229,13 @@ interface UserSettingsProxy : SettingsProxy { name: String, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { registerContentObserverForUserSync( getUriFor(name), notifyForDescendants, settingsObserver, - userHandle + userHandle, ) } @@ -252,14 +250,14 @@ interface UserSettingsProxy : SettingsProxy { name: String, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserverForUser-C")) { registerContentObserverForUserSync( name, notifyForDescendants, settingsObserver, - userHandle + userHandle, ) } } @@ -275,7 +273,7 @@ interface UserSettingsProxy : SettingsProxy { settingsObserver: ContentObserver, userHandle: Int, ) { - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-F")).launch { + settingsScope.launch("registerContentObserverForUserAsync-D") { registerContentObserverForUserSync( getUriFor(name), notifyForDescendants, @@ -291,7 +289,7 @@ interface UserSettingsProxy : SettingsProxy { uri: Uri, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { trace({ "USP#registerObserver#[$uri]" }) { getContentResolver() @@ -299,7 +297,7 @@ interface UserSettingsProxy : SettingsProxy { uri, notifyForDescendants, settingsObserver, - getRealUserHandle(userHandle) + getRealUserHandle(userHandle), ) Unit } @@ -316,14 +314,14 @@ interface UserSettingsProxy : SettingsProxy { uri: Uri, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { - withContext(backgroundDispatcher) { + withContext(settingsDispatcherContext("registerContentObserverForUser-D")) { registerContentObserverForUserSync( uri, notifyForDescendants, settingsObserver, - getRealUserHandle(userHandle) + getRealUserHandle(userHandle), ) } } @@ -339,7 +337,7 @@ interface UserSettingsProxy : SettingsProxy { settingsObserver: ContentObserver, userHandle: Int, ) = - CoroutineScope(backgroundDispatcher + newTracingContext("UserSettingsProxy-G")).launch { + settingsScope.launch("registerContentObserverForUserAsync-E") { registerContentObserverForUserSync( uri, notifyForDescendants, @@ -385,7 +383,7 @@ interface UserSettingsProxy : SettingsProxy { tag: String?, makeDefault: Boolean, @UserIdInt userHandle: Int, - overrideableByRestore: Boolean + overrideableByRestore: Boolean, ): Boolean override fun getInt(name: String, default: Int): Int { diff --git a/packages/SystemUI/src/com/android/systemui/util/kotlin/SysUICoroutinesModule.kt b/packages/SystemUI/src/com/android/systemui/util/kotlin/SysUICoroutinesModule.kt index 2a9b1b97b48f..e5c1e7daa25a 100644 --- a/packages/SystemUI/src/com/android/systemui/util/kotlin/SysUICoroutinesModule.kt +++ b/packages/SystemUI/src/com/android/systemui/util/kotlin/SysUICoroutinesModule.kt @@ -17,14 +17,16 @@ package com.android.systemui.util.kotlin import android.os.Handler +import com.android.systemui.coroutines.newTracingContext import com.android.systemui.dagger.SysUISingleton import com.android.systemui.dagger.qualifiers.Application import com.android.systemui.dagger.qualifiers.Background -import com.android.systemui.dagger.qualifiers.Tracing import com.android.systemui.dagger.qualifiers.UiBackground import com.android.systemui.util.settings.SettingsSingleThreadBackground import dagger.Module import dagger.Provides +import java.util.concurrent.Executor +import kotlin.coroutines.CoroutineContext import kotlinx.coroutines.CoroutineDispatcher import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.DelicateCoroutinesApi @@ -33,8 +35,6 @@ import kotlinx.coroutines.android.asCoroutineDispatcher import kotlinx.coroutines.asCoroutineDispatcher import kotlinx.coroutines.newFixedThreadPoolContext import kotlinx.coroutines.plus -import java.util.concurrent.Executor -import kotlin.coroutines.CoroutineContext private const val LIMIT_BACKGROUND_DISPATCHER_THREADS = true @@ -62,7 +62,7 @@ class SysUICoroutinesModule { @Background @Deprecated( "Use @Background CoroutineContext instead", - ReplaceWith("bgCoroutineContext()", "kotlin.coroutines.CoroutineContext") + ReplaceWith("bgCoroutineContext()", "kotlin.coroutines.CoroutineContext"), ) fun bgDispatcher(): CoroutineDispatcher { return if (LIMIT_BACKGROUND_DISPATCHER_THREADS) { @@ -73,7 +73,7 @@ class SysUICoroutinesModule { // code on those. newFixedThreadPoolContext( nThreads = Runtime.getRuntime().availableProcessors(), - name = "SystemUIBg" + name = "SystemUIBg", ) } else { Dispatchers.IO @@ -89,10 +89,17 @@ class SysUICoroutinesModule { } @Provides + @SysUISingleton + @SettingsSingleThreadBackground + fun settingsScope(@Background bgDispatcher: CoroutineDispatcher): CoroutineScope { + return CoroutineScope(bgDispatcher + newTracingContext("SettingsProxy")) + } + + @Provides @Background @SysUISingleton fun bgCoroutineContext( - @Background bgCoroutineDispatcher: CoroutineDispatcher, + @Background bgCoroutineDispatcher: CoroutineDispatcher ): CoroutineContext { return bgCoroutineDispatcher } @@ -103,7 +110,7 @@ class SysUICoroutinesModule { @UiBackground @Deprecated( "Use @UiBackground CoroutineContext instead", - ReplaceWith("uiBgCoroutineContext()", "kotlin.coroutines.CoroutineContext") + ReplaceWith("uiBgCoroutineContext()", "kotlin.coroutines.CoroutineContext"), ) fun uiBgDispatcher(@UiBackground uiBgExecutor: Executor): CoroutineDispatcher = uiBgExecutor.asCoroutineDispatcher() @@ -112,7 +119,7 @@ class SysUICoroutinesModule { @UiBackground @SysUISingleton fun uiBgCoroutineContext( - @UiBackground uiBgCoroutineDispatcher: CoroutineDispatcher, + @UiBackground uiBgCoroutineDispatcher: CoroutineDispatcher ): CoroutineContext { return uiBgCoroutineDispatcher } diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettings.java b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettings.java index 65f4122f773e..21a910b67dff 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettings.java +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettings.java @@ -16,6 +16,8 @@ package com.android.systemui.util.settings; +import static com.android.systemui.util.settings.JavaAdapter.newCoroutineScope; + import static kotlinx.coroutines.test.TestCoroutineDispatchersKt.StandardTestDispatcher; import android.annotation.NonNull; @@ -25,6 +27,7 @@ import android.database.ContentObserver; import android.net.Uri; import kotlinx.coroutines.CoroutineDispatcher; +import kotlinx.coroutines.CoroutineScope; import java.util.ArrayList; import java.util.HashMap; @@ -34,7 +37,7 @@ import java.util.Map; public class FakeGlobalSettings implements GlobalSettings { private final Map<String, String> mValues = new HashMap<>(); private final Map<String, List<ContentObserver>> mContentObserversAllUsers = new HashMap<>(); - private final CoroutineDispatcher mDispatcher; + private final CoroutineScope mSettingsScope; public static final Uri CONTENT_URI = Uri.parse("content://settings/fake_global"); @@ -44,11 +47,15 @@ public class FakeGlobalSettings implements GlobalSettings { */ @Deprecated public FakeGlobalSettings() { - mDispatcher = StandardTestDispatcher(/* scheduler = */ null, /* name = */ null); + CoroutineDispatcher dispatcher = StandardTestDispatcher( + /* scheduler = */ null, + /* name = */ null + ); + mSettingsScope = newCoroutineScope(dispatcher); } public FakeGlobalSettings(CoroutineDispatcher dispatcher) { - mDispatcher = dispatcher; + mSettingsScope = newCoroutineScope(dispatcher); } @NonNull @@ -61,8 +68,8 @@ public class FakeGlobalSettings implements GlobalSettings { @NonNull @Override - public CoroutineDispatcher getBackgroundDispatcher() { - return mDispatcher; + public CoroutineScope getSettingsScope() { + return mSettingsScope; } @Override diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettingsKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettingsKosmos.kt index 35fa2af7639f..78b78ca86a8d 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettingsKosmos.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeGlobalSettingsKosmos.kt @@ -19,5 +19,14 @@ package com.android.systemui.util.settings import com.android.systemui.kosmos.Kosmos import com.android.systemui.kosmos.Kosmos.Fixture import com.android.systemui.kosmos.testDispatcher +import kotlin.coroutines.CoroutineContext +import kotlinx.coroutines.CoroutineScope val Kosmos.fakeGlobalSettings: FakeGlobalSettings by Fixture { FakeGlobalSettings(testDispatcher) } + +object JavaAdapter { + @JvmStatic + fun newCoroutineScope(context: CoroutineContext): CoroutineScope { + return CoroutineScope(context) + } +} diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.kt index e5d113be7ca2..a3572754ab19 100644 --- a/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.kt +++ b/packages/SystemUI/tests/utils/src/com/android/systemui/util/settings/FakeSettings.kt @@ -24,6 +24,7 @@ import android.util.Pair import androidx.annotation.VisibleForTesting import com.android.systemui.util.settings.SettingsProxy.CurrentUserIdProvider import kotlinx.coroutines.CoroutineDispatcher +import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Job import kotlinx.coroutines.test.StandardTestDispatcher import kotlinx.coroutines.test.TestDispatcher @@ -33,7 +34,7 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { private val contentObservers = mutableMapOf<SettingsKey, MutableList<ContentObserver>>() private val contentObserversAllUsers = mutableMapOf<String, MutableList<ContentObserver>>() - override val backgroundDispatcher: CoroutineDispatcher + override val settingsScope: CoroutineScope @UserIdInt override var userId = UserHandle.USER_CURRENT override val currentUserProvider: CurrentUserIdProvider @@ -43,17 +44,17 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { by main test scope.""" ) constructor() { - backgroundDispatcher = StandardTestDispatcher(scheduler = null, name = null) + settingsScope = CoroutineScope(StandardTestDispatcher(scheduler = null, name = null)) currentUserProvider = CurrentUserIdProvider { userId } } constructor(dispatcher: CoroutineDispatcher) { - backgroundDispatcher = dispatcher + settingsScope = CoroutineScope(dispatcher) currentUserProvider = CurrentUserIdProvider { userId } } constructor(dispatcher: CoroutineDispatcher, currentUserProvider: CurrentUserIdProvider) { - backgroundDispatcher = dispatcher + settingsScope = CoroutineScope(dispatcher) this.currentUserProvider = currentUserProvider } @@ -77,7 +78,7 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { uri: Uri, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) { if (userHandle == UserHandle.USER_ALL) { contentObserversAllUsers @@ -107,31 +108,31 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { override suspend fun registerContentObserver( uri: Uri, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ) = suspendAdvanceDispatcher { super<UserSettingsProxy>.registerContentObserver( uri, notifyForDescendants, - settingsObserver + settingsObserver, ) } override fun registerContentObserverAsync( uri: Uri, notifyForDescendants: Boolean, - settingsObserver: ContentObserver + settingsObserver: ContentObserver, ): Job = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverAsync( uri, notifyForDescendants, - settingsObserver + settingsObserver, ) } override suspend fun registerContentObserverForUser( name: String, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) = suspendAdvanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUser(name, settingsObserver, userHandle) } @@ -139,12 +140,12 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { override fun registerContentObserverForUserAsync( name: String, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ): Job = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUserAsync( name, settingsObserver, - userHandle + userHandle, ) } @@ -156,7 +157,7 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { override suspend fun registerContentObserverForUser( uri: Uri, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) = suspendAdvanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUser(uri, settingsObserver, userHandle) } @@ -164,12 +165,12 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { override fun registerContentObserverForUserAsync( uri: Uri, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ): Job = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUserAsync( uri, settingsObserver, - userHandle + userHandle, ) } @@ -177,13 +178,13 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { uri: Uri, settingsObserver: ContentObserver, userHandle: Int, - registered: Runnable + registered: Runnable, ): Job = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUserAsync( uri, settingsObserver, userHandle, - registered + registered, ) } @@ -191,13 +192,13 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { name: String, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) = suspendAdvanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUser( name, notifyForDescendants, settingsObserver, - userHandle + userHandle, ) } @@ -205,13 +206,13 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { name: String, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ) = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUserAsync( name, notifyForDescendants, settingsObserver, - userHandle + userHandle, ) } @@ -219,13 +220,13 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { uri: Uri, notifyForDescendants: Boolean, settingsObserver: ContentObserver, - userHandle: Int + userHandle: Int, ): Job = advanceDispatcher { super<UserSettingsProxy>.registerContentObserverForUserAsync( uri, notifyForDescendants, settingsObserver, - userHandle + userHandle, ) } @@ -259,7 +260,7 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { tag: String?, makeDefault: Boolean, userHandle: Int, - overrideableByRestore: Boolean + overrideableByRestore: Boolean, ): Boolean { val key = SettingsKey(userHandle, getUriFor(name).toString()) values[key] = value @@ -275,7 +276,7 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { name: String, value: String?, tag: String?, - makeDefault: Boolean + makeDefault: Boolean, ): Boolean { return putString(name, value) } @@ -293,8 +294,9 @@ class FakeSettings : SecureSettings, SystemSettings, UserSettingsProxy { return result } + @OptIn(ExperimentalStdlibApi::class) private fun testDispatcherRunCurrent() { - val testDispatcher = backgroundDispatcher as? TestDispatcher + val testDispatcher = settingsScope.coroutineContext[CoroutineDispatcher] as? TestDispatcher testDispatcher?.scheduler?.runCurrent() } |