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

Commit e41d5cc7 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB Refactor] Turn the wifi ViewModel into an @SysUISingleton and

instead create separate view models per location.

This CL eliminates the many duplicate logs by:
1) Making WifiViewModel a Singleton, so we only ever have one of each
   flow.
2) Adding 1 ViewModel class per location, which just references the
   singleton view model flows.
3) Making each flow inside WifiViewModel a StateFlow, so that its logic
   (including its logging logic) isn't duplicated each time we re-use
   one of the flows.

Bug: 238425913
Test: manual: Verified wifi icon is tinted different colors in each of
the 3 locations
Test: manual: Verify wifi icon still updates
Test: manual: Verify we don't get duplicate activity logs
Test: statusbar.pipeline tests

Change-Id: I6ab0245a83858875c4e63baf9bb6a8c482d1fe55
parent 4513768e
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -30,6 +30,7 @@ import com.android.systemui.qs.carrier.QSCarrierGroupController;
import com.android.systemui.qs.dagger.QSScope;
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider;
import com.android.systemui.statusbar.phone.StatusBarIconController;
import com.android.systemui.statusbar.phone.StatusBarLocation;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.VariableDateViewController;
@@ -104,7 +105,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
                mView.requireViewById(R.id.date_clock)
        );

        mIconManager = tintedIconManagerFactory.create(mIconContainer);
        mIconManager = tintedIconManagerFactory.create(mIconContainer, StatusBarLocation.QS);
        mDemoModeReceiver = new ClockDemoModeReceiver(mClockView);
        mColorExtractor = colorExtractor;
        mOnColorsChangedListener = (extractor, which) -> {
+2 −1
Original line number Diff line number Diff line
@@ -48,6 +48,7 @@ import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QQS
import com.android.systemui.shade.LargeScreenShadeHeaderController.Companion.QS_HEADER_CONSTRAINT
import com.android.systemui.statusbar.phone.StatusBarContentInsetsProvider
import com.android.systemui.statusbar.phone.StatusBarIconController
import com.android.systemui.statusbar.phone.StatusBarLocation
import com.android.systemui.statusbar.phone.StatusIconContainer
import com.android.systemui.statusbar.phone.dagger.CentralSurfacesComponent.CentralSurfacesScope
import com.android.systemui.statusbar.phone.dagger.StatusBarViewModule.LARGE_SCREEN_BATTERY_CONTROLLER
@@ -261,7 +262,7 @@ class LargeScreenShadeHeaderController @Inject constructor(
        batteryMeterViewController.ignoreTunerUpdates()
        batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE)

        iconManager = tintedIconManagerFactory.create(iconContainer)
        iconManager = tintedIconManagerFactory.create(iconContainer, StatusBarLocation.QS)
        iconManager.setTint(
            Utils.getColorAttrDefaultColor(header.context, android.R.attr.textColorPrimary)
        )
+2 −2
Original line number Diff line number Diff line
@@ -352,8 +352,8 @@ public class KeyguardStatusBarViewController extends ViewController<KeyguardStat
        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
        mDisableStateTracker.startTracking(mCommandQueue, mView.getDisplay().getDisplayId());
        if (mTintedIconManager == null) {
            mTintedIconManager =
                    mTintedIconManagerFactory.create(mView.findViewById(R.id.statusIcons));
            mTintedIconManager = mTintedIconManagerFactory.create(
                    mView.findViewById(R.id.statusIcons), StatusBarLocation.KEYGUARD);
            mTintedIconManager.setBlockList(getBlockedIcons());
            mStatusBarIconController.addIconGroup(mTintedIconManager);
        }
+27 −19
Original line number Diff line number Diff line
@@ -56,7 +56,6 @@ import java.util.ArrayList;
import java.util.List;

import javax.inject.Inject;
import javax.inject.Provider;

public interface StatusBarIconController {

@@ -139,13 +138,15 @@ public interface StatusBarIconController {

        public DarkIconManager(
                LinearLayout linearLayout,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                Provider<WifiViewModel> wifiViewModelProvider,
                WifiViewModel wifiViewModel,
                MobileContextProvider mobileContextProvider,
                DarkIconDispatcher darkIconDispatcher) {
            super(linearLayout,
                    location,
                    statusBarPipelineFlags,
                    wifiViewModelProvider,
                    wifiViewModel,
                    mobileContextProvider);
            mIconHPadding = mContext.getResources().getDimensionPixelSize(
                    R.dimen.status_bar_icon_padding);
@@ -204,27 +205,28 @@ public interface StatusBarIconController {
        @SysUISingleton
        public static class Factory {
            private final StatusBarPipelineFlags mStatusBarPipelineFlags;
            private final Provider<WifiViewModel> mWifiViewModelProvider;
            private final WifiViewModel mWifiViewModel;
            private final MobileContextProvider mMobileContextProvider;
            private final DarkIconDispatcher mDarkIconDispatcher;

            @Inject
            public Factory(
                    StatusBarPipelineFlags statusBarPipelineFlags,
                    Provider<WifiViewModel> wifiViewModelProvider,
                    WifiViewModel wifiViewModel,
                    MobileContextProvider mobileContextProvider,
                    DarkIconDispatcher darkIconDispatcher) {
                mStatusBarPipelineFlags = statusBarPipelineFlags;
                mWifiViewModelProvider = wifiViewModelProvider;
                mWifiViewModel = wifiViewModel;
                mMobileContextProvider = mobileContextProvider;
                mDarkIconDispatcher = darkIconDispatcher;
            }

            public DarkIconManager create(LinearLayout group) {
            public DarkIconManager create(LinearLayout group, StatusBarLocation location) {
                return new DarkIconManager(
                        group,
                        location,
                        mStatusBarPipelineFlags,
                        mWifiViewModelProvider,
                        mWifiViewModel,
                        mMobileContextProvider,
                        mDarkIconDispatcher);
            }
@@ -239,12 +241,14 @@ public interface StatusBarIconController {

        public TintedIconManager(
                ViewGroup group,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                Provider<WifiViewModel> wifiViewModelProvider,
                WifiViewModel wifiViewModel,
                MobileContextProvider mobileContextProvider) {
            super(group,
                    location,
                    statusBarPipelineFlags,
                    wifiViewModelProvider,
                    wifiViewModel,
                    mobileContextProvider);
        }

@@ -278,24 +282,25 @@ public interface StatusBarIconController {
        @SysUISingleton
        public static class Factory {
            private final StatusBarPipelineFlags mStatusBarPipelineFlags;
            private final Provider<WifiViewModel> mWifiViewModelProvider;
            private final WifiViewModel mWifiViewModel;
            private final MobileContextProvider mMobileContextProvider;

            @Inject
            public Factory(
                    StatusBarPipelineFlags statusBarPipelineFlags,
                    Provider<WifiViewModel> wifiViewModelProvider,
                    WifiViewModel wifiViewModel,
                    MobileContextProvider mobileContextProvider) {
                mStatusBarPipelineFlags = statusBarPipelineFlags;
                mWifiViewModelProvider = wifiViewModelProvider;
                mWifiViewModel = wifiViewModel;
                mMobileContextProvider = mobileContextProvider;
            }

            public TintedIconManager create(ViewGroup group) {
            public TintedIconManager create(ViewGroup group, StatusBarLocation location) {
                return new TintedIconManager(
                        group,
                        location,
                        mStatusBarPipelineFlags,
                        mWifiViewModelProvider,
                        mWifiViewModel,
                        mMobileContextProvider);
            }
        }
@@ -306,8 +311,9 @@ public interface StatusBarIconController {
     */
    class IconManager implements DemoModeCommandReceiver {
        protected final ViewGroup mGroup;
        private final StatusBarLocation mLocation;
        private final StatusBarPipelineFlags mStatusBarPipelineFlags;
        private final Provider<WifiViewModel> mWifiViewModelProvider;
        private final WifiViewModel mWifiViewModel;
        private final MobileContextProvider mMobileContextProvider;
        protected final Context mContext;
        protected final int mIconSize;
@@ -324,12 +330,14 @@ public interface StatusBarIconController {

        public IconManager(
                ViewGroup group,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                Provider<WifiViewModel> wifiViewModelProvider,
                WifiViewModel wifiViewModel,
                MobileContextProvider mobileContextProvider) {
            mGroup = group;
            mLocation = location;
            mStatusBarPipelineFlags = statusBarPipelineFlags;
            mWifiViewModelProvider = wifiViewModelProvider;
            mWifiViewModel = wifiViewModel;
            mMobileContextProvider = mobileContextProvider;
            mContext = group.getContext();
            mIconSize = mContext.getResources().getDimensionPixelSize(
@@ -446,7 +454,7 @@ public interface StatusBarIconController {

        private ModernStatusBarWifiView onCreateModernStatusBarWifiView(String slot) {
            return ModernStatusBarWifiView.constructAndBind(
                    mContext, slot, mWifiViewModelProvider.get());
                    mContext, slot, mWifiViewModel, mLocation);
        }

        private StatusBarMobileView onCreateStatusBarMobileView(int subId, String slot) {
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 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.statusbar.phone

/** An enumeration of the different locations that host a status bar. */
enum class StatusBarLocation {
    /** Home screen or in-app. */
    HOME,
    /** Keyguard (aka lockscreen). */
    KEYGUARD,
    /** Quick settings (inside the shade). */
    QS,
}
Loading