Prevent dagger from hanging onto DozeService
Evidently, dagger hangs on to classes marked with @Reusable. This is not desirable for DozeService. Instead, institute a better fix which is binding an interface implementation into its subcomponent, which is the part that needs DozeService to exist. We can't bind DozeService directly as Dagger complains that you can't bind classes that already exist in a parent scope. Binding an interface implementation, however, works well. Fixes: 165208002 Test: manual Change-Id: Iae061d636b6e4bdc8bc6a03e9c7daf900610d19f
This commit is contained in:
@@ -33,9 +33,6 @@ import java.io.PrintWriter;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import dagger.Reusable;
|
||||
|
||||
@Reusable // Don't create multiple DozeServices.
|
||||
public class DozeService extends DreamService
|
||||
implements DozeMachine.Service, RequestDoze, PluginListener<DozeServicePlugin> {
|
||||
private static final String TAG = "DozeService";
|
||||
@@ -60,7 +57,7 @@ public class DozeService extends DreamService
|
||||
setWindowless(true);
|
||||
|
||||
mPluginManager.addPluginListener(this, DozeServicePlugin.class, false /* allowMultiple */);
|
||||
DozeComponent dozeComponent = mDozeComponentBuilder.build();
|
||||
DozeComponent dozeComponent = mDozeComponentBuilder.build(this);
|
||||
mDozeMachine = dozeComponent.getDozeMachine();
|
||||
}
|
||||
|
||||
|
||||
@@ -19,6 +19,7 @@ package com.android.systemui.doze.dagger;
|
||||
import com.android.systemui.doze.DozeMachine;
|
||||
import com.android.systemui.doze.DozeService;
|
||||
|
||||
import dagger.BindsInstance;
|
||||
import dagger.Subcomponent;
|
||||
|
||||
/**
|
||||
@@ -30,7 +31,7 @@ public interface DozeComponent {
|
||||
/** Simple Builder for {@link DozeComponent}. */
|
||||
@Subcomponent.Factory
|
||||
interface Builder {
|
||||
DozeComponent build();
|
||||
DozeComponent build(@BindsInstance DozeMachine.Service dozeMachineService);
|
||||
}
|
||||
|
||||
/** Supply a {@link DozeMachine}. */
|
||||
|
||||
@@ -33,7 +33,6 @@ import com.android.systemui.doze.DozeScreenBrightness;
|
||||
import com.android.systemui.doze.DozeScreenState;
|
||||
import com.android.systemui.doze.DozeScreenStatePreventingAdapter;
|
||||
import com.android.systemui.doze.DozeSensors;
|
||||
import com.android.systemui.doze.DozeService;
|
||||
import com.android.systemui.doze.DozeSuspendScreenStatePreventingAdapter;
|
||||
import com.android.systemui.doze.DozeTriggers;
|
||||
import com.android.systemui.doze.DozeUi;
|
||||
@@ -52,9 +51,9 @@ public abstract class DozeModule {
|
||||
@Provides
|
||||
@DozeScope
|
||||
@WrappedService
|
||||
static DozeMachine.Service providesWrappedService(DozeService dozeService, DozeHost dozeHost,
|
||||
DozeParameters dozeParameters) {
|
||||
DozeMachine.Service wrappedService = dozeService;
|
||||
static DozeMachine.Service providesWrappedService(DozeMachine.Service dozeMachineService,
|
||||
DozeHost dozeHost, DozeParameters dozeParameters) {
|
||||
DozeMachine.Service wrappedService = dozeMachineService;
|
||||
wrappedService = new DozeBrightnessHostForwarder(wrappedService, dozeHost);
|
||||
wrappedService = DozeScreenStatePreventingAdapter.wrapIfNeeded(
|
||||
wrappedService, dozeParameters);
|
||||
|
||||
Reference in New Issue
Block a user