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

Commit 7f4af891 authored by Caitlin Cassidy's avatar Caitlin Cassidy
Browse files

[Status Bar Refactor] 1/3: Have HeadsUpAppearanceController be created by

dagger and use it in CollapsedStatusBarFragment instead of using
StatusBar.java.

Note that HUAC can't be injected to the fragment directly because that
creates a dependency cycle: PhoneStatusBarView is injected into HUAC,
which is injected into the fragment, which provides PhoneStatusBarView.

Test: manual (verified HUAC callbacks still trigger, verified fragment
is still getting the correct value for shouldHeadsUpBeVisible)
Test: atest SystemUITests
Test: new unit tests
Bug: 205609837
Bug: 204792508

Change-Id: I33aa80f4866c9561302430cf9206cc96802896cc
parent 85aacccb
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -66,7 +66,6 @@ import com.android.systemui.statusbar.notification.row.dagger.NotificationShelfC
import com.android.systemui.statusbar.phone.ShadeController;
import com.android.systemui.statusbar.phone.StatusBar;
import com.android.systemui.statusbar.phone.dagger.StatusBarComponent;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentComponent;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.HeadsUpManager;
import com.android.systemui.statusbar.policy.ZenModeController;
@@ -125,7 +124,6 @@ import dagger.Provides;
        },
        subcomponents = {
            StatusBarComponent.class,
            StatusBarFragmentComponent.class,
            NotificationRowComponent.class,
            DozeComponent.class,
            ExpandableNotificationRowComponent.class,
+11 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.widget.ViewClippingUtil;
import com.android.systemui.Dependency;
import com.android.systemui.R;
import com.android.systemui.dagger.qualifiers.RootView;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
@@ -35,15 +36,19 @@ import com.android.systemui.statusbar.notification.NotificationWakeUpCoordinator
import com.android.systemui.statusbar.notification.collection.NotificationEntry;
import com.android.systemui.statusbar.notification.row.ExpandableNotificationRow;
import com.android.systemui.statusbar.notification.stack.NotificationStackScrollLayoutController;
import com.android.systemui.statusbar.phone.fragment.dagger.StatusBarFragmentScope;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.OnHeadsUpChangedListener;

import java.util.function.BiConsumer;
import java.util.function.Consumer;

import javax.inject.Inject;

/**
 * Controls the appearance of heads up notifications in the icon area and the header itself.
 */
@StatusBarFragmentScope
public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
        DarkIconDispatcher.DarkReceiver, NotificationWakeUpCoordinator.WakeUpListener {
    public static final int CONTENT_FADE_DURATION = 110;
@@ -83,7 +88,7 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
    Point mPoint;
    private KeyguardStateController mKeyguardStateController;


    @Inject
    public HeadsUpAppearanceController(
            NotificationIconAreaController notificationIconAreaController,
            HeadsUpManagerPhone headsUpManager,
@@ -92,11 +97,15 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
            KeyguardBypassController keyguardBypassController,
            KeyguardStateController keyguardStateController,
            NotificationWakeUpCoordinator wakeUpCoordinator, CommandQueue commandQueue,
            NotificationPanelViewController notificationPanelViewController, View statusBarView) {
            NotificationPanelViewController notificationPanelViewController,
            @RootView PhoneStatusBarView statusBarView) {
        this(notificationIconAreaController, headsUpManager, statusBarStateController,
                keyguardBypassController, wakeUpCoordinator, keyguardStateController,
                commandQueue, notificationStackScrollLayoutController,
                notificationPanelViewController,
                // TODO(b/205609837): We should have the StatusBarFragmentComponent provide these
                //  four views, and then we can delete this constructor and just use the one below
                //  (which also removes the undesirable @VisibleForTesting).
                statusBarView.findViewById(R.id.heads_up_status_bar_view),
                statusBarView.findViewById(R.id.clock),
                statusBarView.findViewById(R.id.operator_name_frame),
+6 −10
Original line number Diff line number Diff line
@@ -1167,16 +1167,16 @@ public class StatusBar extends SystemUI implements
                    HeadsUpAppearanceController oldController = mHeadsUpAppearanceController;
                    if (mHeadsUpAppearanceController != null) {
                        // This view is being recreated, let's destroy the old one
                        // TODO(b/205609837): Automatically destroy the old controller so that this
                        //  class doesn't need to hold a reference to the old one.
                        mHeadsUpAppearanceController.destroy();
                    }
                    // TODO (b/136993073) Separate notification shade and status bar
                    // TODO(b/205609837): Migrate this to StatusBarFragmentComponent.
                    mHeadsUpAppearanceController = new HeadsUpAppearanceController(
                            mNotificationIconAreaController, mHeadsUpManager,
                            mStackScrollerController,
                            mStatusBarStateController, mKeyguardBypassController,
                            mKeyguardStateController, mWakeUpCoordinator, mCommandQueue,
                            mNotificationPanelViewController, mStatusBarView);
                    mHeadsUpAppearanceController =
                            statusBarFragmentComponent.getHeadsUpAppearanceController();
                    // TODO(b/205609837): Delete this readFrom method so that this class doesn't
                    //  need to hold a reference to the old controller.
                    mHeadsUpAppearanceController.readFrom(oldController);

                    mLightsOutNotifController.setLightsOutNotifView(
@@ -1904,10 +1904,6 @@ public class StatusBar extends SystemUI implements
        mScrimController.setKeyguardOccluded(occluded);
    }

    public boolean headsUpShouldBeVisible() {
        return mHeadsUpAppearanceController.shouldBeVisible();
    }

    /** A launch animation was cancelled. */
    //TODO: These can / should probably be moved to NotificationPresenter or ShadeController
    public void onLaunchAnimationCancelled(boolean isLaunchForActivity) {
+1 −1
Original line number Diff line number Diff line
@@ -68,7 +68,7 @@ import dagger.Lazy;
import dagger.Module;
import dagger.Provides;

@Module
@Module(subcomponents = StatusBarFragmentComponent.class)
public abstract class StatusBarViewModule {

    public static final String SPLIT_SHADE_HEADER = "split_shade_header";
+2 −2
Original line number Diff line number Diff line
@@ -329,8 +329,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    }

    protected int adjustDisableFlags(int state) {
        boolean headsUpVisible = mStatusBarOptionalLazy.get()
                .map(StatusBar::headsUpShouldBeVisible).orElse(false);
        boolean headsUpVisible =
                mStatusBarFragmentComponent.getHeadsUpAppearanceController().shouldBeVisible();
        if (headsUpVisible) {
            state |= DISABLE_CLOCK;
        }
Loading