Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 196d6398 authored by Jason Monk's avatar Jason Monk
Browse files

Clean up DependencyProvider a bit

Create DependencyBinder which is abstract and can tell dagger how
to convert directly between interfaces and implementations without
requiring code for it.

Test: compile (which runs dagger)
Change-Id: I7013ee12d37172441e2c70cf2fe36f707975c821
parent b93b626c
Loading
Loading
Loading
Loading
+3 −7
Original line number Original line Diff line number Diff line
@@ -36,7 +36,8 @@ public interface SystemUIRootComponent {
The root modules are what provides the global singleton dependencies across
The root modules are what provides the global singleton dependencies across
SystemUI. ContextHolder is just a wrapper that provides a context.
SystemUI. ContextHolder is just a wrapper that provides a context.
SystemUIFactory @Provide dependencies that need to be overridden by SystemUI
SystemUIFactory @Provide dependencies that need to be overridden by SystemUI
variants (like other form factors). DependencyProvider provides or binds any
variants (like other form factors). DependencyBinder creates the mapping from
interfaces to implementation classes. DependencyProvider provides or binds any
remaining depedencies required.
remaining depedencies required.


### Adding injection to a new SystemUI object
### Adding injection to a new SystemUI object
@@ -195,10 +196,5 @@ public CustomView(@Named(VIEW_CONTEXT) Context themedViewContext, AttributeSet a


## TODO List
## TODO List


 - Eliminate usages of Depndency#get
 - Eliminate usages of Dependency#get
 - Add support for Fragments to handle injection automatically
   - (this could be through dagger2-android or something custom)
 - Reduce number of things with @Provide in DependencyProvider (many can be
   @Inject instead)
 - Migrate as many remaining DependencyProvider instances to @Bind
 - Add links in above TODO
 - Add links in above TODO
+8 −0
Original line number Original line Diff line number Diff line
@@ -19,14 +19,22 @@ import android.content.Intent;


import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;


import javax.inject.Inject;
import javax.inject.Singleton;

/**
/**
 * Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but
 * Single common instance of ActivityStarter that can be gotten and referenced from anywhere, but
 * delegates to an actual implementation such as StatusBar, assuming it exists.
 * delegates to an actual implementation such as StatusBar, assuming it exists.
 */
 */
@Singleton
public class ActivityStarterDelegate implements ActivityStarter {
public class ActivityStarterDelegate implements ActivityStarter {


    private ActivityStarter mActualStarter;
    private ActivityStarter mActualStarter;


    @Inject
    public ActivityStarterDelegate() {
    }

    @Override
    @Override
    public void startPendingIntentDismissingKeyguard(PendingIntent intent) {
    public void startPendingIntentDismissingKeyguard(PendingIntent intent) {
        if (mActualStarter == null) {
        if (mActualStarter == null) {
+227 −0
Original line number Original line Diff line number Diff line
/*
 * Copyright (C) 2018 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;

import com.android.systemui.appops.AppOpsController;
import com.android.systemui.appops.AppOpsControllerImpl;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.VolumeDialogController;
import com.android.systemui.power.PowerNotificationWarnings;
import com.android.systemui.power.PowerUI;
import com.android.systemui.statusbar.NotificationRemoteInputManager;
import com.android.systemui.statusbar.phone.DarkIconDispatcherImpl;
import com.android.systemui.statusbar.phone.ManagedProfileController;
import com.android.systemui.statusbar.phone.ManagedProfileControllerImpl;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarIconControllerImpl;
import com.android.systemui.statusbar.phone.StatusBarRemoteInputCallback;
import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.BatteryControllerImpl;
import com.android.systemui.statusbar.policy.BluetoothController;
import com.android.systemui.statusbar.policy.BluetoothControllerImpl;
import com.android.systemui.statusbar.policy.CastController;
import com.android.systemui.statusbar.policy.CastControllerImpl;
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
import com.android.systemui.statusbar.policy.DeviceProvisionedController;
import com.android.systemui.statusbar.policy.DeviceProvisionedControllerImpl;
import com.android.systemui.statusbar.policy.ExtensionController;
import com.android.systemui.statusbar.policy.ExtensionControllerImpl;
import com.android.systemui.statusbar.policy.FlashlightController;
import com.android.systemui.statusbar.policy.FlashlightControllerImpl;
import com.android.systemui.statusbar.policy.HotspotController;
import com.android.systemui.statusbar.policy.HotspotControllerImpl;
import com.android.systemui.statusbar.policy.IconLogger;
import com.android.systemui.statusbar.policy.IconLoggerImpl;
import com.android.systemui.statusbar.policy.KeyguardMonitor;
import com.android.systemui.statusbar.policy.KeyguardMonitorImpl;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.LocationControllerImpl;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkControllerImpl;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
import com.android.systemui.statusbar.policy.RotationLockController;
import com.android.systemui.statusbar.policy.RotationLockControllerImpl;
import com.android.systemui.statusbar.policy.SecurityController;
import com.android.systemui.statusbar.policy.SecurityControllerImpl;
import com.android.systemui.statusbar.policy.UserInfoController;
import com.android.systemui.statusbar.policy.UserInfoControllerImpl;
import com.android.systemui.statusbar.policy.ZenModeController;
import com.android.systemui.statusbar.policy.ZenModeControllerImpl;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerServiceImpl;
import com.android.systemui.volume.VolumeDialogControllerImpl;

import dagger.Binds;
import dagger.Module;

/**
 * Maps interfaces to implementations for use with Dagger.
 */
@Module
public abstract class DependencyBinder {

    /**
     */
    @Binds
    public abstract ActivityStarter provideActivityStarter(ActivityStarterDelegate delegate);

    /**
     */
    @Binds
    public abstract BluetoothController provideBluetoothController(
            BluetoothControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract LocationController provideLocationController(
            LocationControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract RotationLockController provideRotationLockController(
            RotationLockControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract NetworkController provideNetworkController(
            NetworkControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract ZenModeController provideZenModeController(
            ZenModeControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract HotspotController provideHotspotController(
            HotspotControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract AppOpsController provideAppOpsController(
            AppOpsControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract NotificationRemoteInputManager.Callback provideNotificationRemoteInputManager(
            StatusBarRemoteInputCallback callbackImpl);

    /**
     */
    @Binds
    public abstract IconLogger provideIconLogger(IconLoggerImpl loggerImpl);

    /**
     */
    @Binds
    public abstract CastController provideCastController(CastControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract FlashlightController provideFlashlightController(
            FlashlightControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract KeyguardMonitor provideKeyguardMonitor(KeyguardMonitorImpl controllerImpl);

    /**
     */
    @Binds
    public abstract UserInfoController provideUserInfoContrller(
            UserInfoControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract BatteryController provideBatteryController(
            BatteryControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract ManagedProfileController provideManagedProfileController(
            ManagedProfileControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract NextAlarmController provideNextAlarmController(
            NextAlarmControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract DeviceProvisionedController provideDeviceProvisionedController(
            DeviceProvisionedControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract SecurityController provideSecurityController(
            SecurityControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract TunerService provideTunerService(TunerServiceImpl controllerImpl);

    /**
     */
    @Binds
    public abstract DarkIconDispatcher provideDarkIconDispatcher(
            DarkIconDispatcherImpl controllerImpl);

    /**
     */
    @Binds
    public abstract StatusBarIconController provideStatusBarIconController(
            StatusBarIconControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract ExtensionController provideExtensionController(
            ExtensionControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract VolumeDialogController provideVolumeDialogController(
            VolumeDialogControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract ForegroundServiceController provideForegroundService(
            ForegroundServiceControllerImpl controllerImpl);

    /**
     */
    @Binds
    public abstract PowerUI.WarningsUI provideWarningsUi(PowerNotificationWarnings controllerImpl);
}
+13 −407

File changed.

Preview size limit exceeded, changes collapsed.

+5 −0
Original line number Original line Diff line number Diff line
@@ -29,9 +29,13 @@ import com.android.internal.messages.nano.SystemMessageProto;


import java.util.Arrays;
import java.util.Arrays;


import javax.inject.Inject;
import javax.inject.Singleton;

/**
/**
 * Foreground service controller, a/k/a Dianne's Dungeon.
 * Foreground service controller, a/k/a Dianne's Dungeon.
 */
 */
@Singleton
public class ForegroundServiceControllerImpl
public class ForegroundServiceControllerImpl
        implements ForegroundServiceController {
        implements ForegroundServiceController {


@@ -45,6 +49,7 @@ public class ForegroundServiceControllerImpl
    private final SparseArray<UserServices> mUserServices = new SparseArray<>();
    private final SparseArray<UserServices> mUserServices = new SparseArray<>();
    private final Object mMutex = new Object();
    private final Object mMutex = new Object();


    @Inject
    public ForegroundServiceControllerImpl(Context context) {
    public ForegroundServiceControllerImpl(Context context) {
        mContext = context;
        mContext = context;
    }
    }
Loading