diff options
author | 2021-04-27 00:07:08 -0400 | |
---|---|---|
committer | 2021-05-07 20:41:03 -0400 | |
commit | d11e30df2c80708b15013e19c8cfaecc52af98a9 (patch) | |
tree | 000f244cb9d9125fd11396d232361df795dba75f | |
parent | 687043b78ef97e0866617d5b924136927f1339d8 (diff) |
Add injectable version of Assert.isMainThread()
Introduces:
Execution.assertIsMainThread()
Execution.isMainThread()
Which can be injected and manipulated during tests
Bug: 186481467
Test: atest
Change-Id: Iba1cee95946452e3f74e55865d2a7fee2089798d
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt | 58 | ||||
-rw-r--r-- | packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java | 8 |
2 files changed, 65 insertions, 1 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt b/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt new file mode 100644 index 000000000000..647faeba1e77 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/Execution.kt @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2021 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.systemui.util.concurrency + +import android.os.Looper +import javax.inject.Inject + +/** + * Methods to check or assert that we're on the main thread + */ +interface Execution { + fun assertIsMainThread() + fun isMainThread(): Boolean +} + +class ExecutionImpl @Inject constructor() : Execution { + private val mainLooper = Looper.getMainLooper() + + override fun assertIsMainThread() { + if (!mainLooper.isCurrentThread) { + throw IllegalStateException("should be called from the main thread." + + " Main thread name=" + mainLooper.thread.name + + " Thread.currentThread()=" + Thread.currentThread().name) + } + } + + override fun isMainThread(): Boolean { + return mainLooper.isCurrentThread + } +} + +class FakeExecution : Execution { + var simulateMainThread = true + + override fun assertIsMainThread() { + if (!simulateMainThread) { + throw IllegalStateException("should be called from the main thread") + } + } + + override fun isMainThread(): Boolean { + return simulateMainThread + } +} diff --git a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java index 5946af383b0f..1c504961e715 100644 --- a/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java +++ b/packages/SystemUI/src/com/android/systemui/util/concurrency/GlobalConcurrencyModule.java @@ -24,6 +24,8 @@ import com.android.systemui.dagger.qualifiers.Main; import java.util.concurrent.Executor; +import javax.inject.Singleton; + import dagger.Binds; import dagger.Module; import dagger.Provides; @@ -40,7 +42,7 @@ public abstract class GlobalConcurrencyModule { @Binds public abstract ThreadFactory bindExecutorFactory(ThreadFactoryImpl impl); - /** Main Looper */ + /** Main Looper */ @Provides @Main public static Looper provideMainLooper() { @@ -67,4 +69,8 @@ public abstract class GlobalConcurrencyModule { return context.getMainExecutor(); } + /** */ + @Binds + @Singleton + public abstract Execution provideExecution(ExecutionImpl execution); } |