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:
Dave Mankoff
2020-08-18 16:32:58 -04:00
parent e9fffe1c79
commit 776f978fe0
3 changed files with 6 additions and 9 deletions

View File

@@ -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();
}

View File

@@ -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}. */

View File

@@ -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);