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
This commit is contained in:
@@ -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
|
||||
}
|
||||
}
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user