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

Commit ae04682d authored by Govinda Wasserman's avatar Govinda Wasserman Committed by Android (Google) Code Review
Browse files

Merge "Refactor SysUI to allow daggerization of implementations"

parents 93244a3d 2e86fb67
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -47,6 +47,8 @@ android_app {
        "androidx.lifecycle_lifecycle-extensions",
        "SystemUI-tags",
        "SystemUI-proto",
        "dagger2-2.19",
        "//external/kotlinc:kotlin-annotations",
    ],

    libs: [
+5 −41
Original line number Diff line number Diff line
@@ -20,12 +20,8 @@ import android.content.Context;

import com.android.internal.widget.LockPatternUtils;
import com.android.keyguard.ViewMediatorCallback;
import com.android.systemui.car.CarNotificationEntryManager;
import com.android.systemui.car.CarNotificationInterruptionStateProvider;
import com.android.systemui.statusbar.car.CarFacetButtonController;
import com.android.systemui.statusbar.car.CarStatusBarKeyguardViewManager;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager;
import com.android.systemui.volume.CarVolumeDialogComponent;
import com.android.systemui.volume.VolumeDialogComponent;
@@ -33,8 +29,6 @@ import com.android.systemui.volume.VolumeDialogComponent;
import javax.inject.Singleton;

import dagger.Component;
import dagger.Module;
import dagger.Provides;

/**
 * Class factory to provide car specific SystemUI components.
@@ -44,11 +38,14 @@ public class CarSystemUIFactory extends SystemUIFactory {
    private CarDependencyComponent mCarDependencyComponent;

    @Override
    protected void init(Context context) {
        super.init(context);
    protected SystemUIRootComponent buildSystemUIRootComponent(Context context) {
        mCarDependencyComponent = DaggerCarSystemUIFactory_CarDependencyComponent.builder()
                .contextHolder(new ContextHolder(context))
                .build();
        return DaggerCarSystemUIRootComponent.builder()
                .dependencyProvider(new com.android.systemui.DependencyProvider())
                .contextHolder(new ContextHolder(context))
                .build();
    }

    public CarDependencyComponent getCarDependencyComponent() {
@@ -64,42 +61,9 @@ public class CarSystemUIFactory extends SystemUIFactory {
        return new CarVolumeDialogComponent(systemUi, context);
    }

    @Override
    public NotificationInterruptionStateProvider provideNotificationInterruptionStateProvider(
            Context context) {
        return new CarNotificationInterruptionStateProvider(context);
    }

    @Override
    public boolean provideAllowNotificationLongPress() {
        return false;
    }

    @Module
    protected static class ContextHolder {
        private Context mContext;

        public ContextHolder(Context context) {
            mContext = context;
        }

        @Provides
        public Context provideContext() {
            return mContext;
        }
    }

    @Singleton
    @Component(modules = ContextHolder.class)
    public interface CarDependencyComponent {
        CarFacetButtonController getCarFacetButtonController();
    }

    /**
     * Use {@link CarNotificationEntryManager}, which does nothing when adding a notification.
     */
    @Singleton
    public NotificationEntryManager provideNotificationEntryManager(Context context) {
        return new CarNotificationEntryManager(context);
    }
}
+97 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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 static com.android.systemui.Dependency.ALLOW_NOTIFICATION_LONG_PRESS_NAME;
import static com.android.systemui.Dependency.LEAK_REPORT_EMAIL_NAME;

import android.content.Context;

import com.android.systemui.car.CarNotificationEntryManager;
import com.android.systemui.car.CarNotificationInterruptionStateProvider;
import com.android.systemui.dock.DockManager;
import com.android.systemui.dock.DockManagerImpl;
import com.android.systemui.power.EnhancedEstimates;
import com.android.systemui.power.EnhancedEstimatesImpl;
import com.android.systemui.statusbar.NotificationLockscreenUserManager;
import com.android.systemui.statusbar.NotificationLockscreenUserManagerImpl;
import com.android.systemui.statusbar.notification.NotificationEntryManager;
import com.android.systemui.statusbar.notification.NotificationInterruptionStateProvider;
import com.android.systemui.statusbar.notification.collection.NotificationData;
import com.android.systemui.statusbar.phone.KeyguardEnvironmentImpl;
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;

import javax.inject.Named;
import javax.inject.Singleton;

import dagger.Binds;
import dagger.Module;
import dagger.Provides;

@Module
abstract class CarSystemUIModule {

    @Binds
    abstract NotificationInterruptionStateProvider bindNotificationInterruptionStateProvider(
            CarNotificationInterruptionStateProvider notificationInterruptionStateProvider);

    @Singleton
    @Provides
    @Named(ALLOW_NOTIFICATION_LONG_PRESS_NAME)
    static boolean provideAllowNotificationLongPress() {
        return false;
    }

    /**
     * Use {@link CarNotificationEntryManager}, which does nothing when adding a notification.
     */
    @Binds
    abstract NotificationEntryManager bindNotificationEntryManager(
            CarNotificationEntryManager notificationEntryManager);

    @Singleton
    @Provides
    @Named(LEAK_REPORT_EMAIL_NAME)
    static String provideLeakReportEmail() {
        return "buganizer-system+181579@google.com";
    }

    @Binds
    abstract EnhancedEstimates bindEnhancedEstimates(EnhancedEstimatesImpl enhancedEstimates);

    @Binds
    abstract NotificationLockscreenUserManager bindNotificationLockscreenUserManager(
            NotificationLockscreenUserManagerImpl notificationLockscreenUserManager);

    @Binds
    abstract DockManager bindDockManager(DockManagerImpl dockManager);

    @Binds
    abstract NotificationData.KeyguardEnvironment bindKeyguardEnvironment(
            KeyguardEnvironmentImpl keyguardEnvironment);

    @Singleton
    @Provides
    static ShadeController provideShadeController(Context context) {
        return SysUiServiceProvider.getComponent(context, StatusBar.class);
    }

    @Binds
    abstract SystemUIRootComponent bindSystemUIRootComponent(
            CarSystemUIRootComponent systemUIRootComponent);
}
+35 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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 javax.inject.Singleton;

import dagger.Component;

@Singleton
@Component(
        modules = {
                DependencyProvider.class,
                DependencyBinder.class,
                ServiceBinder.class,
                SystemUIFactory.ContextHolder.class,
                SystemUIModule.class,
                CarSystemUIModule.class
        })
interface CarSystemUIRootComponent extends SystemUIRootComponent {

}
+6 −0
Original line number Diff line number Diff line
@@ -21,13 +21,19 @@ import android.service.notification.StatusBarNotification;

import com.android.systemui.statusbar.notification.NotificationEntryManager;

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

/**
 * Car specific notification entry manager that does nothing when adding a notification.
 *
 * <p> This is because system UI notifications are disabled and we have a different implementation.
 * Please see {@link com.android.car.notification}.
 */
@Singleton
public class CarNotificationEntryManager extends NotificationEntryManager {

    @Inject
    public CarNotificationEntryManager(Context context) {
        super(context);
    }
Loading