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

Commit 8a5c787b authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Android (Google) Code Review
Browse files

Merge "Hide RSSI next to single carrier name" into sc-v2-dev

parents 03483236 66820d75
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -39,6 +39,13 @@
        android:singleLine="true"
        android:singleLine="true"
        android:maxEms="7"/>
        android:maxEms="7"/>


    <View
        android:id="@+id/spacer"
        android:layout_width="@dimen/qs_carrier_margin_width"
        android:layout_height="match_parent"
        android:visibility="gone"
    />

    <include
    <include
        layout="@layout/mobile_signal_group"
        layout="@layout/mobile_signal_group"
        android:layout_width="wrap_content"
        android:layout_width="wrap_content"
+26 −31
Original line number Original line Diff line number Diff line
@@ -32,6 +32,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.LinearLayout;
import android.widget.Space;
import android.widget.Space;


import androidx.annotation.NonNull;

import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.BatteryMeterView;
import com.android.systemui.R;
import com.android.systemui.R;
@@ -41,6 +43,8 @@ import com.android.systemui.statusbar.phone.StatusBarWindowView;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.Clock;


import java.util.List;

/**
/**
 * View that contains the top-most bits of the QS panel (primarily the status bar with date, time,
 * View that contains the top-most bits of the QS panel (primarily the status bar with date, time,
 * battery, carrier info and privacy icons) and also contains the {@link QuickQSPanel}.
 * battery, carrier info and privacy icons) and also contains the {@link QuickQSPanel}.
@@ -84,18 +88,13 @@ public class QuickStatusBarHeader extends FrameLayout {
    private float mKeyguardExpansionFraction;
    private float mKeyguardExpansionFraction;
    private int mTextColorPrimary = Color.TRANSPARENT;
    private int mTextColorPrimary = Color.TRANSPARENT;
    private int mTopViewMeasureHeight;
    private int mTopViewMeasureHeight;
    private boolean mProviderModel;


    private final String mMobileSlotName;
    @NonNull
    private final String mNoCallingSlotName;
    private List<String> mRssiIgnoredSlots;
    private final String mCallStrengthSlotName;
    private boolean mIsSingleCarrier;


    public QuickStatusBarHeader(Context context, AttributeSet attrs) {
    public QuickStatusBarHeader(Context context, AttributeSet attrs) {
        super(context, attrs);
        super(context, attrs);
        mMobileSlotName = context.getString(com.android.internal.R.string.status_bar_mobile);
        mNoCallingSlotName = context.getString(com.android.internal.R.string.status_bar_no_calling);
        mCallStrengthSlotName =
                context.getString(com.android.internal.R.string.status_bar_call_strength);
    }
    }


    /**
    /**
@@ -145,9 +144,9 @@ public class QuickStatusBarHeader extends FrameLayout {


    void onAttach(TintedIconManager iconManager,
    void onAttach(TintedIconManager iconManager,
            QSExpansionPathInterpolator qsExpansionPathInterpolator,
            QSExpansionPathInterpolator qsExpansionPathInterpolator,
            boolean providerModel) {
            List<String> rssiIgnoredSlots) {
        mProviderModel = providerModel;
        mTintedIconManager = iconManager;
        mTintedIconManager = iconManager;
        mRssiIgnoredSlots = rssiIgnoredSlots;
        int fillColor = Utils.getColorAttrDefaultColor(getContext(),
        int fillColor = Utils.getColorAttrDefaultColor(getContext(),
                android.R.attr.textColorPrimary);
                android.R.attr.textColorPrimary);


@@ -158,6 +157,15 @@ public class QuickStatusBarHeader extends FrameLayout {
        updateAnimators();
        updateAnimators();
    }
    }


    void setIsSingleCarrier(boolean isSingleCarrier) {
        mIsSingleCarrier = isSingleCarrier;
        updateAlphaAnimator();
    }

    public QuickQSPanel getHeaderQsPanel() {
        return mHeaderQsPanel;
    }

    @Override
    @Override
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
@@ -265,39 +273,26 @@ public class QuickStatusBarHeader extends FrameLayout {
                .setListener(new TouchAnimator.ListenerAdapter() {
                .setListener(new TouchAnimator.ListenerAdapter() {
                    @Override
                    @Override
                    public void onAnimationAtEnd() {
                    public void onAnimationAtEnd() {
                        // TODO(b/185580157): Remove the mProviderModel if the mobile slot can be
                        super.onAnimationAtEnd();
                        // hidden in Provider model.
                        if (!mIsSingleCarrier) {
                        if (mProviderModel) {
                            mIconContainer.addIgnoredSlots(mRssiIgnoredSlots);
                            mIconContainer.addIgnoredSlot(mNoCallingSlotName);
                            mIconContainer.addIgnoredSlot(mCallStrengthSlotName);
                        } else {
                            mIconContainer.addIgnoredSlot(mMobileSlotName);
                        }
                        }
                    }
                    }


                    @Override
                    @Override
                    public void onAnimationStarted() {
                    public void onAnimationStarted() {
                        if (mProviderModel) {
                            mIconContainer.addIgnoredSlot(mNoCallingSlotName);
                            mIconContainer.addIgnoredSlot(mCallStrengthSlotName);
                        } else {
                            mIconContainer.addIgnoredSlot(mMobileSlotName);
                        }

                        setSeparatorVisibility(false);
                        setSeparatorVisibility(false);
                        if (!mIsSingleCarrier) {
                            mIconContainer.addIgnoredSlots(mRssiIgnoredSlots);
                        }
                    }
                    }


                    @Override
                    @Override
                    public void onAnimationAtStart() {
                    public void onAnimationAtStart() {
                        super.onAnimationAtStart();
                        super.onAnimationAtStart();
                        if (mProviderModel) {
                            mIconContainer.removeIgnoredSlot(mNoCallingSlotName);
                            mIconContainer.removeIgnoredSlot(mCallStrengthSlotName);
                        } else {
                            mIconContainer.removeIgnoredSlot(mMobileSlotName);
                        }

                        setSeparatorVisibility(mShowClockIconsSeparator);
                        setSeparatorVisibility(mShowClockIconsSeparator);
                        // In QQS we never ignore RSSI.
                        mIconContainer.removeIgnoredSlots(mRssiIgnoredSlots);
                    }
                    }
                });
                });
        mAlphaAnimator = builder.build();
        mAlphaAnimator = builder.build();
+42 −16
Original line number Original line Diff line number Diff line
@@ -43,7 +43,6 @@ import com.android.systemui.statusbar.phone.StatusIconContainer;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.statusbar.policy.Clock;
import com.android.systemui.util.ViewController;
import com.android.systemui.util.ViewController;


import java.util.ArrayList;
import java.util.List;
import java.util.List;


import javax.inject.Inject;
import javax.inject.Inject;
@@ -76,6 +75,9 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
    private boolean mMicCameraIndicatorsEnabled;
    private boolean mMicCameraIndicatorsEnabled;
    private boolean mLocationIndicatorsEnabled;
    private boolean mLocationIndicatorsEnabled;
    private boolean mPrivacyChipLogged;
    private boolean mPrivacyChipLogged;
    private final String mCameraSlot;
    private final String mMicSlot;
    private final String mLocationSlot;


    private SysuiColorExtractor mColorExtractor;
    private SysuiColorExtractor mColorExtractor;
    private ColorExtractor.OnColorsChangedListener mOnColorsChangedListener;
    private ColorExtractor.OnColorsChangedListener mOnColorsChangedListener;
@@ -104,8 +106,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        }
        }


        private void update() {
        private void update() {
            StatusIconContainer iconContainer = mView.requireViewById(R.id.statusIcons);
            updatePrivacyIconSlots();
            iconContainer.setIgnoredSlots(getIgnoredIconSlots());
            setChipVisibility(!mPrivacyChip.getPrivacyList().isEmpty());
            setChipVisibility(!mPrivacyChip.getPrivacyList().isEmpty());
        }
        }
    };
    };
@@ -154,7 +155,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mClockView = mView.findViewById(R.id.clock);
        mClockView = mView.findViewById(R.id.clock);
        mIconContainer = mView.findViewById(R.id.statusIcons);
        mIconContainer = mView.findViewById(R.id.statusIcons);


        mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer, mFeatureFlags);
        mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer, featureFlags);
        mDemoModeReceiver = new ClockDemoModeReceiver(mClockView);
        mDemoModeReceiver = new ClockDemoModeReceiver(mClockView);
        mColorExtractor = colorExtractor;
        mColorExtractor = colorExtractor;
        mOnColorsChangedListener = (extractor, which) -> {
        mOnColorsChangedListener = (extractor, which) -> {
@@ -162,6 +163,10 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
            mClockView.onColorsChanged(lightTheme);
            mClockView.onColorsChanged(lightTheme);
        };
        };
        mColorExtractor.addOnColorsChangedListener(mOnColorsChangedListener);
        mColorExtractor.addOnColorsChangedListener(mOnColorsChangedListener);

        mCameraSlot = getResources().getString(com.android.internal.R.string.status_bar_camera);
        mMicSlot = getResources().getString(com.android.internal.R.string.status_bar_microphone);
        mLocationSlot = getResources().getString(com.android.internal.R.string.status_bar_location);
    }
    }


    @Override
    @Override
@@ -172,14 +177,30 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mLocationIndicatorsEnabled = mPrivacyItemController.getLocationAvailable();
        mLocationIndicatorsEnabled = mPrivacyItemController.getLocationAvailable();


        // Ignore privacy icons because they show in the space above QQS
        // Ignore privacy icons because they show in the space above QQS
        mIconContainer.setIgnoredSlots(getIgnoredIconSlots());
        updatePrivacyIconSlots();
        mIconContainer.setShouldRestrictIcons(false);
        mIconContainer.setShouldRestrictIcons(false);
        mStatusBarIconController.addIconGroup(mIconManager);
        mStatusBarIconController.addIconGroup(mIconManager);


        setChipVisibility(mPrivacyChip.getVisibility() == View.VISIBLE);
        setChipVisibility(mPrivacyChip.getVisibility() == View.VISIBLE);


        mView.onAttach(mIconManager, mQSExpansionPathInterpolator,
        mView.setIsSingleCarrier(mQSCarrierGroupController.isSingleCarrier());
                mFeatureFlags.isCombinedStatusBarSignalIconsEnabled());
        mQSCarrierGroupController
                .setOnSingleCarrierChangedListener(mView::setIsSingleCarrier);

        List<String> rssiIgnoredSlots;

        if (mFeatureFlags.isCombinedStatusBarSignalIconsEnabled()) {
            rssiIgnoredSlots = List.of(
                    getResources().getString(com.android.internal.R.string.status_bar_no_calling),
                    getResources().getString(com.android.internal.R.string.status_bar_call_strength)
            );
        } else {
            rssiIgnoredSlots = List.of(
                    getResources().getString(com.android.internal.R.string.status_bar_mobile)
            );
        }

        mView.onAttach(mIconManager, mQSExpansionPathInterpolator, rssiIgnoredSlots);


        mDemoModeController.addCallback(mDemoModeReceiver);
        mDemoModeController.addCallback(mDemoModeReceiver);
    }
    }
@@ -189,6 +210,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mColorExtractor.removeOnColorsChangedListener(mOnColorsChangedListener);
        mColorExtractor.removeOnColorsChangedListener(mOnColorsChangedListener);
        mPrivacyChip.setOnClickListener(null);
        mPrivacyChip.setOnClickListener(null);
        mStatusBarIconController.removeIconGroup(mIconManager);
        mStatusBarIconController.removeIconGroup(mIconManager);
        mQSCarrierGroupController.setOnSingleCarrierChangedListener(null);
        mDemoModeController.removeCallback(mDemoModeReceiver);
        mDemoModeController.removeCallback(mDemoModeReceiver);
        setListening(false);
        setListening(false);
    }
    }
@@ -236,21 +258,25 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mView.setChipVisibility(chipVisible);
        mView.setChipVisibility(chipVisible);
    }
    }


    private List<String> getIgnoredIconSlots() {
    private void updatePrivacyIconSlots() {
        ArrayList<String> ignored = new ArrayList<>();
        if (getChipEnabled()) {
        if (getChipEnabled()) {
            if (mMicCameraIndicatorsEnabled) {
            if (mMicCameraIndicatorsEnabled) {
                ignored.add(mView.getResources().getString(
                mIconContainer.addIgnoredSlot(mCameraSlot);
                        com.android.internal.R.string.status_bar_camera));
                mIconContainer.addIgnoredSlot(mMicSlot);
                ignored.add(mView.getResources().getString(
            } else {
                        com.android.internal.R.string.status_bar_microphone));
                mIconContainer.removeIgnoredSlot(mCameraSlot);
                mIconContainer.removeIgnoredSlot(mMicSlot);
            }
            }
            if (mLocationIndicatorsEnabled) {
            if (mLocationIndicatorsEnabled) {
                ignored.add(mView.getResources().getString(
                mIconContainer.addIgnoredSlot(mLocationSlot);
                        com.android.internal.R.string.status_bar_location));
            } else {
                mIconContainer.removeIgnoredSlot(mLocationSlot);
            }
            }
        } else {
            mIconContainer.removeIgnoredSlot(mCameraSlot);
            mIconContainer.removeIgnoredSlot(mMicSlot);
            mIconContainer.removeIgnoredSlot(mLocationSlot);
        }
        }
        return ignored;
    }
    }


    private boolean getChipEnabled() {
    private boolean getChipEnabled() {
+20 −4
Original line number Original line Diff line number Diff line
@@ -25,6 +25,8 @@ import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.TextView;


import androidx.annotation.VisibleForTesting;

import com.android.settingslib.Utils;
import com.android.settingslib.Utils;
import com.android.settingslib.graph.SignalDrawable;
import com.android.settingslib.graph.SignalDrawable;
import com.android.systemui.R;
import com.android.systemui.R;
@@ -37,8 +39,10 @@ public class QSCarrier extends LinearLayout {
    private TextView mCarrierText;
    private TextView mCarrierText;
    private ImageView mMobileSignal;
    private ImageView mMobileSignal;
    private ImageView mMobileRoaming;
    private ImageView mMobileRoaming;
    private View mSpacer;
    private CellSignalState mLastSignalState;
    private CellSignalState mLastSignalState;
    private boolean mProviderModelInitialized = false;
    private boolean mProviderModelInitialized = false;
    private boolean mIsSingleCarrier;


    public QSCarrier(Context context) {
    public QSCarrier(Context context) {
        super(context);
        super(context);
@@ -63,18 +67,25 @@ public class QSCarrier extends LinearLayout {
        mMobileRoaming = findViewById(R.id.mobile_roaming);
        mMobileRoaming = findViewById(R.id.mobile_roaming);
        mMobileSignal = findViewById(R.id.mobile_signal);
        mMobileSignal = findViewById(R.id.mobile_signal);
        mCarrierText = findViewById(R.id.qs_carrier_text);
        mCarrierText = findViewById(R.id.qs_carrier_text);
        mSpacer = findViewById(R.id.spacer);
    }
    }


    /**
    /**
     * Update the state of this view
     * Update the state of this view
     * @param state the current state of the signal for this view
     * @param state the current state of the signal for this view
     * @param isSingleCarrier whether there is a single carrier being shown in the container
     * @return true if the state was actually changed
     * @return true if the state was actually changed
     */
     */
    public boolean updateState(CellSignalState state) {
    public boolean updateState(CellSignalState state, boolean isSingleCarrier) {
        if (Objects.equals(state, mLastSignalState)) return false;
        if (Objects.equals(state, mLastSignalState) && isSingleCarrier == mIsSingleCarrier) {
            return false;
        }
        mLastSignalState = state;
        mLastSignalState = state;
        mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
        mIsSingleCarrier = isSingleCarrier;
        if (state.visible) {
        final boolean visible = state.visible && !isSingleCarrier;
        mMobileGroup.setVisibility(visible ? View.VISIBLE : View.GONE);
        mSpacer.setVisibility(isSingleCarrier ? View.VISIBLE : View.GONE);
        if (visible) {
            mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
            mMobileRoaming.setVisibility(state.roaming ? View.VISIBLE : View.GONE);
            ColorStateList colorStateList = Utils.getColorAttr(mContext,
            ColorStateList colorStateList = Utils.getColorAttr(mContext,
                    android.R.attr.textColorPrimary);
                    android.R.attr.textColorPrimary);
@@ -125,6 +136,11 @@ public class QSCarrier extends LinearLayout {
                        com.android.settingslib.R.string.not_default_data_content_description));
                        com.android.settingslib.R.string.not_default_data_content_description));
    }
    }


    @VisibleForTesting
    View getRSSIView() {
        return mMobileGroup;
    }

    public void setCarrierText(CharSequence text) {
    public void setCarrierText(CharSequence text) {
        mCarrierText.setText(text);
        mCarrierText.setText(text);
    }
    }
+79 −8
Original line number Original line Diff line number Diff line
@@ -37,6 +37,7 @@ import com.android.keyguard.CarrierTextManager;
import com.android.settingslib.AccessibilityContentDescriptions;
import com.android.settingslib.AccessibilityContentDescriptions;
import com.android.settingslib.mobile.TelephonyIcons;
import com.android.settingslib.mobile.TelephonyIcons;
import com.android.systemui.R;
import com.android.systemui.R;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Background;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.dagger.qualifiers.Main;
import com.android.systemui.plugins.ActivityStarter;
import com.android.systemui.plugins.ActivityStarter;
@@ -62,7 +63,8 @@ public class QSCarrierGroupController {
    private final NetworkController mNetworkController;
    private final NetworkController mNetworkController;
    private final CarrierTextManager mCarrierTextManager;
    private final CarrierTextManager mCarrierTextManager;
    private final TextView mNoSimTextView;
    private final TextView mNoSimTextView;
    private final H mMainHandler;
    // Non final for testing
    private H mMainHandler;
    private final Callback mCallback;
    private final Callback mCallback;
    private boolean mListening;
    private boolean mListening;
    private final CellSignalState[] mInfos =
    private final CellSignalState[] mInfos =
@@ -74,6 +76,11 @@ public class QSCarrierGroupController {
    private final boolean mProviderModel;
    private final boolean mProviderModel;
    private final CarrierConfigTracker mCarrierConfigTracker;
    private final CarrierConfigTracker mCarrierConfigTracker;


    private boolean mIsSingleCarrier;
    private OnSingleCarrierChangedListener mOnSingleCarrierChangedListener;

    private final SlotIndexResolver mSlotIndexResolver;

    private final NetworkController.SignalCallback mSignalCallback =
    private final NetworkController.SignalCallback mSignalCallback =
            new NetworkController.SignalCallback() {
            new NetworkController.SignalCallback() {
                @Override
                @Override
@@ -207,7 +214,8 @@ public class QSCarrierGroupController {
            @Background Handler bgHandler, @Main Looper mainLooper,
            @Background Handler bgHandler, @Main Looper mainLooper,
            NetworkController networkController,
            NetworkController networkController,
            CarrierTextManager.Builder carrierTextManagerBuilder, Context context,
            CarrierTextManager.Builder carrierTextManagerBuilder, Context context,
            CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags) {
            CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags,
            SlotIndexResolver slotIndexResolver) {


        if (featureFlags.isCombinedStatusBarSignalIconsEnabled()) {
        if (featureFlags.isCombinedStatusBarSignalIconsEnabled()) {
            mProviderModel = true;
            mProviderModel = true;
@@ -222,6 +230,7 @@ public class QSCarrierGroupController {
                .setShowMissingSim(false)
                .setShowMissingSim(false)
                .build();
                .build();
        mCarrierConfigTracker = carrierConfigTracker;
        mCarrierConfigTracker = carrierConfigTracker;
        mSlotIndexResolver = slotIndexResolver;
        View.OnClickListener onClickListener = v -> {
        View.OnClickListener onClickListener = v -> {
            if (!v.isVisibleToUser()) {
            if (!v.isVisibleToUser()) {
                return;
                return;
@@ -256,6 +265,7 @@ public class QSCarrierGroupController {
                            .toString();
                            .toString();
            mCarrierGroups[i].setOnClickListener(onClickListener);
            mCarrierGroups[i].setOnClickListener(onClickListener);
        }
        }
        mIsSingleCarrier = computeIsSingleCarrier();
        view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);
        view.setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_YES);


        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
        view.addOnAttachStateChangeListener(new View.OnAttachStateChangeListener() {
@@ -272,10 +282,24 @@ public class QSCarrierGroupController {


    @VisibleForTesting
    @VisibleForTesting
    protected int getSlotIndex(int subscriptionId) {
    protected int getSlotIndex(int subscriptionId) {
        return SubscriptionManager.getSlotIndex(subscriptionId);
        return mSlotIndexResolver.getSlotIndex(subscriptionId);
    }
    }


    private boolean isSingleCarrier() {
    /**
     * Sets a {@link OnSingleCarrierChangedListener}.
     *
     * This will get notified when the number of carriers changes between 1 and "not one".
     * @param listener
     */
    public void setOnSingleCarrierChangedListener(OnSingleCarrierChangedListener listener) {
        mOnSingleCarrierChangedListener = listener;
    }

    public boolean isSingleCarrier() {
        return mIsSingleCarrier;
    }

    private boolean computeIsSingleCarrier() {
        int carrierCount = 0;
        int carrierCount = 0;
        for (int i = 0; i < SIM_SLOTS; i++) {
        for (int i = 0; i < SIM_SLOTS; i++) {


@@ -315,7 +339,9 @@ public class QSCarrierGroupController {
            return;
            return;
        }
        }


        if (isSingleCarrier()) {
        boolean singleCarrier = computeIsSingleCarrier();

        if (singleCarrier) {
            for (int i = 0; i < SIM_SLOTS; i++) {
            for (int i = 0; i < SIM_SLOTS; i++) {
                if (mInfos[i].visible
                if (mInfos[i].visible
                        && mInfos[i].mobileSignalIconId == R.drawable.ic_qs_sim_card) {
                        && mInfos[i].mobileSignalIconId == R.drawable.ic_qs_sim_card) {
@@ -326,7 +352,7 @@ public class QSCarrierGroupController {
        }
        }


        for (int i = 0; i < SIM_SLOTS; i++) {
        for (int i = 0; i < SIM_SLOTS; i++) {
            mCarrierGroups[i].updateState(mInfos[i]);
            mCarrierGroups[i].updateState(mInfos[i], singleCarrier);
        }
        }


        mCarrierDividers[0].setVisibility(
        mCarrierDividers[0].setVisibility(
@@ -337,6 +363,12 @@ public class QSCarrierGroupController {
        mCarrierDividers[1].setVisibility(
        mCarrierDividers[1].setVisibility(
                (mInfos[1].visible && mInfos[2].visible)
                (mInfos[1].visible && mInfos[2].visible)
                        || (mInfos[0].visible && mInfos[2].visible) ? View.VISIBLE : View.GONE);
                        || (mInfos[0].visible && mInfos[2].visible) ? View.VISIBLE : View.GONE);
        if (mIsSingleCarrier != singleCarrier) {
            mIsSingleCarrier = singleCarrier;
            if (mOnSingleCarrierChangedListener != null) {
                mOnSingleCarrierChangedListener.onSingleCarrierChanged(singleCarrier);
            }
        }
    }
    }


    @MainThread
    @MainThread
@@ -433,12 +465,14 @@ public class QSCarrierGroupController {
        private final Context mContext;
        private final Context mContext;
        private final CarrierConfigTracker mCarrierConfigTracker;
        private final CarrierConfigTracker mCarrierConfigTracker;
        private final FeatureFlags mFeatureFlags;
        private final FeatureFlags mFeatureFlags;
        private final SlotIndexResolver mSlotIndexResolver;


        @Inject
        @Inject
        public Builder(ActivityStarter activityStarter, @Background Handler handler,
        public Builder(ActivityStarter activityStarter, @Background Handler handler,
                @Main Looper looper, NetworkController networkController,
                @Main Looper looper, NetworkController networkController,
                CarrierTextManager.Builder carrierTextControllerBuilder, Context context,
                CarrierTextManager.Builder carrierTextControllerBuilder, Context context,
                CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags) {
                CarrierConfigTracker carrierConfigTracker, FeatureFlags featureFlags,
                SlotIndexResolver slotIndexResolver) {
            mActivityStarter = activityStarter;
            mActivityStarter = activityStarter;
            mHandler = handler;
            mHandler = handler;
            mLooper = looper;
            mLooper = looper;
@@ -447,6 +481,7 @@ public class QSCarrierGroupController {
            mContext = context;
            mContext = context;
            mCarrierConfigTracker = carrierConfigTracker;
            mCarrierConfigTracker = carrierConfigTracker;
            mFeatureFlags = featureFlags;
            mFeatureFlags = featureFlags;
            mSlotIndexResolver = slotIndexResolver;
        }
        }


        public Builder setQSCarrierGroup(QSCarrierGroup view) {
        public Builder setQSCarrierGroup(QSCarrierGroup view) {
@@ -457,7 +492,43 @@ public class QSCarrierGroupController {
        public QSCarrierGroupController build() {
        public QSCarrierGroupController build() {
            return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
            return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
                    mNetworkController, mCarrierTextControllerBuilder, mContext,
                    mNetworkController, mCarrierTextControllerBuilder, mContext,
                    mCarrierConfigTracker, mFeatureFlags);
                    mCarrierConfigTracker, mFeatureFlags, mSlotIndexResolver);
        }
    }

    /**
     * Notify when the state changes from 1 carrier to "not one" and viceversa
     */
    @FunctionalInterface
    public interface OnSingleCarrierChangedListener {
        void onSingleCarrierChanged(boolean isSingleCarrier);
    }

    /**
     * Interface for resolving slot index from subscription ID.
     */
    @FunctionalInterface
    public interface SlotIndexResolver {
        /**
         * Get slot index for given sub id.
         */
        int getSlotIndex(int subscriptionId);
    }

    /**
     * Default implementation for {@link SlotIndexResolver}.
     *
     * It retrieves the slot index using {@link SubscriptionManager#getSlotIndex}.
     */
    @SysUISingleton
    public static class SubscriptionManagerSlotIndexResolver implements SlotIndexResolver {

        @Inject
        public SubscriptionManagerSlotIndexResolver() {}

        @Override
        public int getSlotIndex(int subscriptionId) {
            return SubscriptionManager.getSlotIndex(subscriptionId);
        }
        }
    }
    }
}
}
Loading