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

Commit 0660b921 authored by Caitlin Shkuratov's avatar Caitlin Shkuratov Committed by Automerger Merge Worker
Browse files

Merge changes I7125da88,Id6a26bd0 into tm-qpr-dev am: 60194445

parents c5d095d1 60194445
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -179,10 +179,18 @@ object Flags {
    @Deprecated("Replaced by mobile and wifi specific flags.")
    val NEW_STATUS_BAR_PIPELINE_FRONTEND = UnreleasedFlag(605, teamfood = false)

    // TODO(b/256614753): Tracking Bug
    val NEW_STATUS_BAR_MOBILE_ICONS = UnreleasedFlag(606)

    // TODO(b/256614210): Tracking Bug
    val NEW_STATUS_BAR_WIFI_ICON = UnreleasedFlag(607)

    // TODO(b/256614751): Tracking Bug
    val NEW_STATUS_BAR_MOBILE_ICONS_BACKEND = UnreleasedFlag(608)

    // TODO(b/256613548): Tracking Bug
    val NEW_STATUS_BAR_WIFI_ICON_BACKEND = UnreleasedFlag(609)

    // 700 - dialer/calls
    // TODO(b/254512734): Tracking Bug
    val ONGOING_CALL_STATUS_BAR_CHIP = ReleasedFlag(700)
+62 −32
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_ICON
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_MOBILE_NEW;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI;
import static com.android.systemui.statusbar.phone.StatusBarIconHolder.TYPE_WIFI_NEW;

import android.annotation.Nullable;
import android.content.Context;
@@ -53,8 +54,9 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.MobileUiAdapter;
import com.android.systemui.statusbar.pipeline.mobile.ui.binder.MobileIconsBinder;
import com.android.systemui.statusbar.pipeline.mobile.ui.view.ModernStatusBarMobileView;
import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.MobileIconsViewModel;
import com.android.systemui.statusbar.pipeline.wifi.ui.WifiUiAdapter;
import com.android.systemui.statusbar.pipeline.wifi.ui.view.ModernStatusBarWifiView;
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel;
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel;
import com.android.systemui.util.Assert;

import java.util.ArrayList;
@@ -84,7 +86,18 @@ public interface StatusBarIconController {
    /** */
    void setIcon(String slot, StatusBarIcon icon);
    /** */
    void setSignalIcon(String slot, WifiIconState state);
    void setWifiIcon(String slot, WifiIconState state);

    /**
     * Sets up a wifi icon using the new data pipeline. No effect if the wifi icon has already been
     * set up (inflated and added to the view hierarchy).
     *
     * This method completely replaces {@link #setWifiIcon} with the information from the new wifi
     * data pipeline. Icons will automatically keep their state up to date, so we don't have to
     * worry about funneling state objects through anymore.
     */
    void setNewWifiIcon();

    /** */
    void setMobileIcons(String slot, List<MobileIconState> states);

@@ -151,14 +164,14 @@ public interface StatusBarIconController {
                LinearLayout linearLayout,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                WifiViewModel wifiViewModel,
                WifiUiAdapter wifiUiAdapter,
                MobileUiAdapter mobileUiAdapter,
                MobileContextProvider mobileContextProvider,
                DarkIconDispatcher darkIconDispatcher) {
            super(linearLayout,
                    location,
                    statusBarPipelineFlags,
                    wifiViewModel,
                    wifiUiAdapter,
                    mobileUiAdapter,
                    mobileContextProvider);
            mIconHPadding = mContext.getResources().getDimensionPixelSize(
@@ -218,7 +231,7 @@ public interface StatusBarIconController {
        @SysUISingleton
        public static class Factory {
            private final StatusBarPipelineFlags mStatusBarPipelineFlags;
            private final WifiViewModel mWifiViewModel;
            private final WifiUiAdapter mWifiUiAdapter;
            private final MobileContextProvider mMobileContextProvider;
            private final MobileUiAdapter mMobileUiAdapter;
            private final DarkIconDispatcher mDarkIconDispatcher;
@@ -226,12 +239,12 @@ public interface StatusBarIconController {
            @Inject
            public Factory(
                    StatusBarPipelineFlags statusBarPipelineFlags,
                    WifiViewModel wifiViewModel,
                    WifiUiAdapter wifiUiAdapter,
                    MobileContextProvider mobileContextProvider,
                    MobileUiAdapter mobileUiAdapter,
                    DarkIconDispatcher darkIconDispatcher) {
                mStatusBarPipelineFlags = statusBarPipelineFlags;
                mWifiViewModel = wifiViewModel;
                mWifiUiAdapter = wifiUiAdapter;
                mMobileContextProvider = mobileContextProvider;
                mMobileUiAdapter = mobileUiAdapter;
                mDarkIconDispatcher = darkIconDispatcher;
@@ -242,7 +255,7 @@ public interface StatusBarIconController {
                        group,
                        location,
                        mStatusBarPipelineFlags,
                        mWifiViewModel,
                        mWifiUiAdapter,
                        mMobileUiAdapter,
                        mMobileContextProvider,
                        mDarkIconDispatcher);
@@ -260,14 +273,14 @@ public interface StatusBarIconController {
                ViewGroup group,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                WifiViewModel wifiViewModel,
                WifiUiAdapter wifiUiAdapter,
                MobileUiAdapter mobileUiAdapter,
                MobileContextProvider mobileContextProvider
        ) {
            super(group,
                    location,
                    statusBarPipelineFlags,
                    wifiViewModel,
                    wifiUiAdapter,
                    mobileUiAdapter,
                    mobileContextProvider);
        }
@@ -302,19 +315,19 @@ public interface StatusBarIconController {
        @SysUISingleton
        public static class Factory {
            private final StatusBarPipelineFlags mStatusBarPipelineFlags;
            private final WifiViewModel mWifiViewModel;
            private final WifiUiAdapter mWifiUiAdapter;
            private final MobileContextProvider mMobileContextProvider;
            private final MobileUiAdapter mMobileUiAdapter;

            @Inject
            public Factory(
                    StatusBarPipelineFlags statusBarPipelineFlags,
                    WifiViewModel wifiViewModel,
                    WifiUiAdapter wifiUiAdapter,
                    MobileUiAdapter mobileUiAdapter,
                    MobileContextProvider mobileContextProvider
            ) {
                mStatusBarPipelineFlags = statusBarPipelineFlags;
                mWifiViewModel = wifiViewModel;
                mWifiUiAdapter = wifiUiAdapter;
                mMobileUiAdapter = mobileUiAdapter;
                mMobileContextProvider = mobileContextProvider;
            }
@@ -324,7 +337,7 @@ public interface StatusBarIconController {
                        group,
                        location,
                        mStatusBarPipelineFlags,
                        mWifiViewModel,
                        mWifiUiAdapter,
                        mMobileUiAdapter,
                        mMobileContextProvider);
            }
@@ -336,10 +349,9 @@ public interface StatusBarIconController {
     */
    class IconManager implements DemoModeCommandReceiver {
        protected final ViewGroup mGroup;
        private final StatusBarLocation mLocation;
        private final StatusBarPipelineFlags mStatusBarPipelineFlags;
        private final WifiViewModel mWifiViewModel;
        private final MobileContextProvider mMobileContextProvider;
        private final LocationBasedWifiViewModel mWifiViewModel;
        private final MobileIconsViewModel mMobileIconsViewModel;

        protected final Context mContext;
@@ -359,26 +371,33 @@ public interface StatusBarIconController {
                ViewGroup group,
                StatusBarLocation location,
                StatusBarPipelineFlags statusBarPipelineFlags,
                WifiViewModel wifiViewModel,
                WifiUiAdapter wifiUiAdapter,
                MobileUiAdapter mobileUiAdapter,
                MobileContextProvider mobileContextProvider
        ) {
            mGroup = group;
            mLocation = location;
            mStatusBarPipelineFlags = statusBarPipelineFlags;
            mWifiViewModel = wifiViewModel;
            mMobileContextProvider = mobileContextProvider;
            mContext = group.getContext();
            mIconSize = mContext.getResources().getDimensionPixelSize(
                    com.android.internal.R.dimen.status_bar_icon_size);

            if (statusBarPipelineFlags.useNewMobileIcons()) {
                // This starts the flow for the new pipeline, and will notify us of changes
            if (statusBarPipelineFlags.runNewMobileIconsBackend()) {
                // This starts the flow for the new pipeline, and will notify us of changes if
                // {@link StatusBarPipelineFlags#useNewMobileIcons} is also true.
                mMobileIconsViewModel = mobileUiAdapter.createMobileIconsViewModel();
                MobileIconsBinder.bind(mGroup, mMobileIconsViewModel);
            } else {
                mMobileIconsViewModel = null;
            }

            if (statusBarPipelineFlags.runNewWifiIconBackend()) {
                // This starts the flow for the new pipeline, and will notify us of changes if
                // {@link StatusBarPipelineFlags#useNewWifiIcon} is also true.
                mWifiViewModel = wifiUiAdapter.bindGroup(mGroup, location);
            } else {
                mWifiViewModel = null;
            }
        }

        public boolean isDemoable() {
@@ -429,6 +448,9 @@ public interface StatusBarIconController {
                case TYPE_WIFI:
                    return addWifiIcon(index, slot, holder.getWifiState());

                case TYPE_WIFI_NEW:
                    return addNewWifiIcon(index, slot);

                case TYPE_MOBILE:
                    return addMobileIcon(index, slot, holder.getMobileState());

@@ -450,16 +472,13 @@ public interface StatusBarIconController {

        @VisibleForTesting
        protected StatusIconDisplayable addWifiIcon(int index, String slot, WifiIconState state) {
            final BaseStatusBarFrameLayout view;
            if (mStatusBarPipelineFlags.useNewWifiIcon()) {
                view = onCreateModernStatusBarWifiView(slot);
                // When [ModernStatusBarWifiView] is created, it will automatically apply the
                // correct view state so we don't need to call applyWifiState.
            } else {
                StatusBarWifiView wifiView = onCreateStatusBarWifiView(slot);
                wifiView.applyWifiState(state);
                view = wifiView;
                throw new IllegalStateException("Attempting to add a mobile icon while the new "
                        + "icons are enabled is not supported");
            }

            final StatusBarWifiView view = onCreateStatusBarWifiView(slot);
            view.applyWifiState(state);
            mGroup.addView(view, index, onCreateLayoutParams());

            if (mIsInDemoMode) {
@@ -468,6 +487,17 @@ public interface StatusBarIconController {
            return view;
        }

        protected StatusIconDisplayable addNewWifiIcon(int index, String slot) {
            if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
                throw new IllegalStateException("Attempting to add a wifi icon using the new"
                        + "pipeline, but the enabled flag is false.");
            }

            ModernStatusBarWifiView view = onCreateModernStatusBarWifiView(slot);
            mGroup.addView(view, index, onCreateLayoutParams());
            return view;
        }

        @VisibleForTesting
        protected StatusIconDisplayable addMobileIcon(
                int index,
@@ -523,8 +553,7 @@ public interface StatusBarIconController {
        }

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

        private StatusBarMobileView onCreateStatusBarMobileView(int subId, String slot) {
@@ -600,7 +629,8 @@ public interface StatusBarIconController {
                    onSetMobileIcon(viewIndex, holder.getMobileState());
                    return;
                case TYPE_MOBILE_NEW:
                    // Nothing, the icon updates itself now
                case TYPE_WIFI_NEW:
                    // Nothing, the new icons update themselves
                    return;
                default:
                    break;
+29 −9
Original line number Diff line number Diff line
@@ -195,12 +195,13 @@ public class StatusBarIconControllerImpl implements Tunable,
        }
    }

    /**
     * Signal icons need to be handled differently, because they can be
     * composite views
     */
    @Override
    public void setSignalIcon(String slot, WifiIconState state) {
    public void setWifiIcon(String slot, WifiIconState state) {
        if (mStatusBarPipelineFlags.useNewWifiIcon()) {
            Log.d(TAG, "ignoring old pipeline callback because the new wifi icon is enabled");
            return;
        }

        if (state == null) {
            removeIcon(slot, 0);
            return;
@@ -216,6 +217,24 @@ public class StatusBarIconControllerImpl implements Tunable,
        }
    }


    @Override
    public void setNewWifiIcon() {
        if (!mStatusBarPipelineFlags.useNewWifiIcon()) {
            Log.d(TAG, "ignoring new pipeline callback because the new wifi icon is disabled");
            return;
        }

        String slot = mContext.getString(com.android.internal.R.string.status_bar_wifi);
        StatusBarIconHolder holder = mStatusBarIconList.getIconHolder(slot, /* tag= */ 0);
        if (holder == null) {
            holder = StatusBarIconHolder.forNewWifiIcon();
            setIcon(slot, holder);
        } else {
            // Don't have to do anything in the new world
        }
    }

    /**
     * Accept a list of MobileIconStates, which all live in the same slot(?!), and then are sorted
     * by subId. Don't worry this definitely makes sense and works.
@@ -225,7 +244,7 @@ public class StatusBarIconControllerImpl implements Tunable,
    @Override
    public void setMobileIcons(String slot, List<MobileIconState> iconStates) {
        if (mStatusBarPipelineFlags.useNewMobileIcons()) {
            Log.d(TAG, "ignoring old pipeline callbacks, because the new "
            Log.d(TAG, "ignoring old pipeline callbacks, because the new mobile "
                    + "icons are enabled");
            return;
        }
@@ -251,10 +270,11 @@ public class StatusBarIconControllerImpl implements Tunable,
    public void setNewMobileIconSubIds(List<Integer> subIds) {
        if (!mStatusBarPipelineFlags.useNewMobileIcons()) {
            Log.d(TAG, "ignoring new pipeline callback, "
                    + "since the new icons are disabled");
                    + "since the new mobile icons are disabled");
            return;
        }
        Slot mobileSlot = mStatusBarIconList.getSlot("mobile");
        String slotName = mContext.getString(com.android.internal.R.string.status_bar_mobile);
        Slot mobileSlot = mStatusBarIconList.getSlot(slotName);

        Collections.reverse(subIds);

@@ -262,7 +282,7 @@ public class StatusBarIconControllerImpl implements Tunable,
            StatusBarIconHolder holder = mobileSlot.getHolderForTag(subId);
            if (holder == null) {
                holder = StatusBarIconHolder.fromSubIdForModernMobileIcon(subId);
                setIcon("mobile", holder);
                setIcon(slotName, holder);
            } else {
                // Don't have to do anything in the new world
            }
+27 −4
Original line number Diff line number Diff line
@@ -51,11 +51,24 @@ public class StatusBarIconHolder {
    @Deprecated
    public static final int TYPE_MOBILE_NEW = 3;

    /**
     * TODO (b/238425913): address this once the new pipeline is in place
     * This type exists so that the new wifi pipeline can be used to inform the old view system
     * about the existence of the wifi icon. The design of the new pipeline should allow for removal
     * of this icon holder type, and obsolete the need for this entire class.
     *
     * @deprecated This field only exists so the new status bar pipeline can interface with the
     * view holder system.
     */
    @Deprecated
    public static final int TYPE_WIFI_NEW = 4;

    @IntDef({
            TYPE_ICON,
            TYPE_WIFI,
            TYPE_MOBILE,
            TYPE_MOBILE_NEW
            TYPE_MOBILE_NEW,
            TYPE_WIFI_NEW
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface IconType {}
@@ -95,6 +108,13 @@ public class StatusBarIconHolder {
        return holder;
    }

    /** Creates a new holder with for the new wifi icon. */
    public static StatusBarIconHolder forNewWifiIcon() {
        StatusBarIconHolder holder = new StatusBarIconHolder();
        holder.mType = TYPE_WIFI_NEW;
        return holder;
    }

    /** */
    public static StatusBarIconHolder fromMobileIconState(MobileIconState state) {
        StatusBarIconHolder holder = new StatusBarIconHolder();
@@ -172,9 +192,10 @@ public class StatusBarIconHolder {
            case TYPE_MOBILE:
                return mMobileState.visible;
            case TYPE_MOBILE_NEW:
                //TODO (b/249790733), the new pipeline can control visibility via the ViewModel
            case TYPE_WIFI_NEW:
                // The new pipeline controls visibilities via the view model and view binder, so
                // this is effectively an unused return value.
                return true;

            default:
                return true;
        }
@@ -199,7 +220,9 @@ public class StatusBarIconHolder {
                break;

            case TYPE_MOBILE_NEW:
                //TODO (b/249790733), the new pipeline can control visibility via the ViewModel
            case TYPE_WIFI_NEW:
                // The new pipeline controls visibilities via the view model and view binder, so
                // ignore setVisible.
                break;
        }
    }
+1 −1
Original line number Diff line number Diff line
@@ -212,7 +212,7 @@ public class StatusBarSignalPolicy implements SignalCallback,
    private void updateWifiIconWithState(WifiIconState state) {
        if (DEBUG) Log.d(TAG, "WifiIconState: " + state == null ? "" : state.toString());
        if (state.visible && state.resId > 0) {
            mIconController.setSignalIcon(mSlotWifi, state);
            mIconController.setWifiIcon(mSlotWifi, state);
            mIconController.setIconVisibility(mSlotWifi, true);
        } else {
            mIconController.setIconVisibility(mSlotWifi, false);
Loading