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

Commit 949af334 authored by Fabian Kozynski's avatar Fabian Kozynski Committed by Automerger Merge Worker
Browse files

Merge "Hide RSSI next to single carrier name" into sc-dev am: ef8407ab

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15315720

Change-Id: Ia588a31fb99044843b28eeec07923c4aa12b8f9f
parents 22bfc66d ef8407ab
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -39,6 +39,13 @@
        android:singleLine="true"
        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
        layout="@layout/mobile_signal_group"
        android:layout_width="wrap_content"
+22 −31
Original line number Diff line number Diff line
@@ -32,6 +32,8 @@ import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Space;

import androidx.annotation.NonNull;

import com.android.settingslib.Utils;
import com.android.systemui.BatteryMeterView;
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.policy.Clock;

import java.util.List;

/**
 * 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}.
@@ -86,18 +90,13 @@ public class QuickStatusBarHeader extends FrameLayout {
    private float mKeyguardExpansionFraction;
    private int mTextColorPrimary = Color.TRANSPARENT;
    private int mTopViewMeasureHeight;
    private boolean mProviderModel;

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

    public QuickStatusBarHeader(Context context, AttributeSet 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);
    }

    /**
@@ -148,9 +147,9 @@ public class QuickStatusBarHeader extends FrameLayout {

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

@@ -161,6 +160,11 @@ public class QuickStatusBarHeader extends FrameLayout {
        updateAnimators();
    }

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

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

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

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

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

                        setSeparatorVisibility(mShowClockIconsSeparator);
                        // In QQS we never ignore RSSI.
                        mIconContainer.removeIgnoredSlots(mRssiIgnoredSlots);
                    }
                });
        mAlphaAnimator = builder.build();
+42 −16
Original line number 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.util.ViewController;

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

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

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

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

        mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer, mFeatureFlags);
        mIconManager = new StatusBarIconController.TintedIconManager(mIconContainer, featureFlags);
        mDemoModeReceiver = new ClockDemoModeReceiver(mClockView);
        mColorExtractor = colorExtractor;
        mOnColorsChangedListener = (extractor, which) -> {
@@ -162,6 +163,10 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
            mClockView.onColorsChanged(lightTheme);
        };
        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
@@ -172,14 +177,30 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mLocationIndicatorsEnabled = mPrivacyItemController.getLocationAvailable();

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

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

        mView.onAttach(mIconManager, mQSExpansionPathInterpolator,
                mFeatureFlags.isCombinedStatusBarSignalIconsEnabled());
        mView.setIsSingleCarrier(mQSCarrierGroupController.isSingleCarrier());
        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);
    }
@@ -189,6 +210,7 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mColorExtractor.removeOnColorsChangedListener(mOnColorsChangedListener);
        mPrivacyChip.setOnClickListener(null);
        mStatusBarIconController.removeIconGroup(mIconManager);
        mQSCarrierGroupController.setOnSingleCarrierChangedListener(null);
        mDemoModeController.removeCallback(mDemoModeReceiver);
        setListening(false);
    }
@@ -236,21 +258,25 @@ class QuickStatusBarHeaderController extends ViewController<QuickStatusBarHeader
        mView.setChipVisibility(chipVisible);
    }

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

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

import androidx.annotation.VisibleForTesting;

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

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

    /**
     * Update the state of 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
     */
    public boolean updateState(CellSignalState state) {
        if (Objects.equals(state, mLastSignalState)) return false;
    public boolean updateState(CellSignalState state, boolean isSingleCarrier) {
        if (Objects.equals(state, mLastSignalState) && isSingleCarrier == mIsSingleCarrier) {
            return false;
        }
        mLastSignalState = state;
        mMobileGroup.setVisibility(state.visible ? View.VISIBLE : View.GONE);
        if (state.visible) {
        mIsSingleCarrier = isSingleCarrier;
        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);
            ColorStateList colorStateList = Utils.getColorAttr(mContext,
                    android.R.attr.textColorPrimary);
@@ -125,6 +136,11 @@ public class QSCarrier extends LinearLayout {
                        com.android.settingslib.R.string.not_default_data_content_description));
    }

    @VisibleForTesting
    View getRSSIView() {
        return mMobileGroup;
    }

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

    private boolean mIsSingleCarrier;
    private OnSingleCarrierChangedListener mOnSingleCarrierChangedListener;

    private final SlotIndexResolver mSlotIndexResolver;

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

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

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

    @VisibleForTesting
    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;
        for (int i = 0; i < SIM_SLOTS; i++) {

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

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

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

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

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

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

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

        public Builder setQSCarrierGroup(QSCarrierGroup view) {
@@ -457,7 +492,43 @@ public class QSCarrierGroupController {
        public QSCarrierGroupController build() {
            return new QSCarrierGroupController(mView, mActivityStarter, mHandler, mLooper,
                    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