Merge "Register hinge angle sensor listener in a background thread" into tm-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
4b6d20e55b
@@ -22,6 +22,7 @@ import android.hardware.SensorManager
|
||||
import android.hardware.devicestate.DeviceStateManager
|
||||
import android.os.Handler
|
||||
import com.android.systemui.dagger.qualifiers.Main
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground
|
||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig
|
||||
import com.android.systemui.unfold.updates.screen.ScreenStatusProvider
|
||||
import com.android.systemui.unfold.util.UnfoldTransitionATracePrefix
|
||||
@@ -53,6 +54,7 @@ internal interface UnfoldSharedComponent {
|
||||
@BindsInstance sensorManager: SensorManager,
|
||||
@BindsInstance @Main handler: Handler,
|
||||
@BindsInstance @Main executor: Executor,
|
||||
@BindsInstance @UiBackground backgroundExecutor: Executor,
|
||||
@BindsInstance @UnfoldTransitionATracePrefix tracingTagPrefix: String,
|
||||
@BindsInstance contentResolver: ContentResolver = context.contentResolver
|
||||
): UnfoldSharedComponent
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.android.systemui.unfold
|
||||
|
||||
import android.hardware.SensorManager
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground
|
||||
import com.android.systemui.unfold.config.UnfoldTransitionConfig
|
||||
import com.android.systemui.unfold.progress.FixedTimingTransitionProgressProvider
|
||||
import com.android.systemui.unfold.progress.PhysicsBasedUnfoldTransitionProgressProvider
|
||||
@@ -30,6 +31,7 @@ import com.android.systemui.unfold.util.ScaleAwareTransitionProgressProvider
|
||||
import dagger.Module
|
||||
import dagger.Provides
|
||||
import java.util.Optional
|
||||
import java.util.concurrent.Executor
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@@ -67,10 +69,11 @@ class UnfoldSharedModule {
|
||||
@Provides
|
||||
fun hingeAngleProvider(
|
||||
config: UnfoldTransitionConfig,
|
||||
sensorManager: SensorManager
|
||||
sensorManager: SensorManager,
|
||||
@UiBackground executor: Executor
|
||||
): HingeAngleProvider =
|
||||
if (config.isHingeAngleEnabled) {
|
||||
HingeSensorAngleProvider(sensorManager)
|
||||
HingeSensorAngleProvider(sensorManager, executor)
|
||||
} else {
|
||||
EmptyHingeAngleProvider
|
||||
}
|
||||
|
||||
@@ -42,6 +42,7 @@ fun createUnfoldTransitionProgressProvider(
|
||||
sensorManager: SensorManager,
|
||||
mainHandler: Handler,
|
||||
mainExecutor: Executor,
|
||||
backgroundExecutor: Executor,
|
||||
tracingTagPrefix: String
|
||||
): UnfoldTransitionProgressProvider =
|
||||
DaggerUnfoldSharedComponent.factory()
|
||||
@@ -53,6 +54,7 @@ fun createUnfoldTransitionProgressProvider(
|
||||
sensorManager,
|
||||
mainHandler,
|
||||
mainExecutor,
|
||||
backgroundExecutor,
|
||||
tracingTagPrefix)
|
||||
.unfoldTransitionProvider
|
||||
.orElse(null)
|
||||
|
||||
@@ -6,21 +6,29 @@ import android.hardware.SensorEventListener
|
||||
import android.hardware.SensorManager
|
||||
import android.os.Trace
|
||||
import androidx.core.util.Consumer
|
||||
import java.util.concurrent.Executor
|
||||
|
||||
internal class HingeSensorAngleProvider(private val sensorManager: SensorManager) :
|
||||
internal class HingeSensorAngleProvider(
|
||||
private val sensorManager: SensorManager,
|
||||
private val executor: Executor
|
||||
) :
|
||||
HingeAngleProvider {
|
||||
|
||||
private val sensorListener = HingeAngleSensorListener()
|
||||
private val listeners: MutableList<Consumer<Float>> = arrayListOf()
|
||||
|
||||
override fun start() {
|
||||
override fun start() = executor.execute {
|
||||
Trace.beginSection("HingeSensorAngleProvider#start")
|
||||
val sensor = sensorManager.getDefaultSensor(Sensor.TYPE_HINGE_ANGLE)
|
||||
sensorManager.registerListener(sensorListener, sensor, SensorManager.SENSOR_DELAY_FASTEST)
|
||||
sensorManager.registerListener(
|
||||
sensorListener,
|
||||
sensor,
|
||||
SensorManager.SENSOR_DELAY_FASTEST
|
||||
)
|
||||
Trace.endSection()
|
||||
}
|
||||
|
||||
override fun stop() {
|
||||
override fun stop() = executor.execute {
|
||||
sensorManager.unregisterListener(sensorListener)
|
||||
}
|
||||
|
||||
|
||||
@@ -23,10 +23,14 @@ import android.util.DisplayMetrics;
|
||||
import com.android.internal.logging.UiEventLogger;
|
||||
import com.android.internal.logging.UiEventLoggerImpl;
|
||||
import com.android.systemui.dagger.qualifiers.TestHarness;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
import com.android.systemui.plugins.PluginsModule;
|
||||
import com.android.systemui.unfold.UnfoldTransitionModule;
|
||||
import com.android.systemui.util.concurrency.GlobalConcurrencyModule;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import javax.inject.Singleton;
|
||||
|
||||
import dagger.Module;
|
||||
@@ -75,4 +79,16 @@ public class GlobalModule {
|
||||
static boolean provideIsTestHarness() {
|
||||
return ActivityManager.isRunningInUserTestHarness();
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide an Executor specifically for running UI operations on a separate thread.
|
||||
*
|
||||
* Keep submitted runnables short and to the point, just as with any other UI code.
|
||||
*/
|
||||
@Provides
|
||||
@Singleton
|
||||
@UiBackground
|
||||
public static Executor provideUiBackgroundExecutor() {
|
||||
return Executors.newSingleThreadExecutor();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -25,10 +25,8 @@ import com.android.systemui.dagger.SysUISingleton;
|
||||
import com.android.systemui.dagger.qualifiers.Background;
|
||||
import com.android.systemui.dagger.qualifiers.LongRunning;
|
||||
import com.android.systemui.dagger.qualifiers.Main;
|
||||
import com.android.systemui.dagger.qualifiers.UiBackground;
|
||||
|
||||
import java.util.concurrent.Executor;
|
||||
import java.util.concurrent.Executors;
|
||||
|
||||
import dagger.Module;
|
||||
import dagger.Provides;
|
||||
@@ -149,18 +147,6 @@ public abstract class SysUIConcurrencyModule {
|
||||
return new RepeatableExecutorImpl(exec);
|
||||
}
|
||||
|
||||
/**
|
||||
* Provide an Executor specifically for running UI operations on a separate thread.
|
||||
*
|
||||
* Keep submitted runnables short and to the point, just as with any other UI code.
|
||||
*/
|
||||
@Provides
|
||||
@SysUISingleton
|
||||
@UiBackground
|
||||
public static Executor provideUiBackgroundExecutor() {
|
||||
return Executors.newSingleThreadExecutor();
|
||||
}
|
||||
|
||||
/** */
|
||||
@Provides
|
||||
@Main
|
||||
|
||||
Reference in New Issue
Block a user