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

Commit 7ef2acbf authored by Niklas Lindgren's avatar Niklas Lindgren Committed by Evan Laird
Browse files

Add carrier config support to operator name in statusbar

Move configuration of showing operator name from resource to
carrier config. By moving this to carrier config, this will also
support Dual SIM scenario.

Bug: 116847905
Test: Add item for carrier in vendor.xml and swap sim cards
between ones that have the item enabled and disabled. We have
also tested to swap data sim cards on dual sim device.

Change-Id: If3b7bbe165c8f0d0305b8ae4f77c91a41a98ca14
parent d9ac8b2a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -65,6 +65,7 @@ import android.safetycenter.SafetyCenterManager;
import android.service.dreams.DreamService;
import android.service.dreams.IDreamManager;
import android.telecom.TelecomManager;
import android.telephony.CarrierConfigManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.view.CrossWindowBlurListeners;
@@ -450,6 +451,12 @@ public class FrameworkServicesModule {
        return context.getSystemService(OverlayManager.class);
    }

    @Provides
    @Singleton
    static CarrierConfigManager provideCarrierConfigManager(Context context) {
        return context.getSystemService(CarrierConfigManager.class);
    }

    @Provides
    @Singleton
    static WindowManager provideWindowManager(Context context) {
+13 −16
Original line number Diff line number Diff line
@@ -21,8 +21,6 @@ import android.widget.TextView;

import com.android.settingslib.WirelessUtils;

import java.util.List;

/** Shows the operator name */
public class OperatorNameView extends TextView {
    private boolean mDemoMode;
@@ -43,8 +41,10 @@ public class OperatorNameView extends TextView {
        mDemoMode = demoMode;
    }

    void update(boolean showOperatorName, boolean hasMobile,
            List<OperatorNameViewController.SubInfo> subs) {
    void update(boolean showOperatorName,
            boolean hasMobile,
            OperatorNameViewController.SubInfo sub
    ) {
        setVisibility(showOperatorName ? VISIBLE : GONE);

        boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext);
@@ -55,24 +55,21 @@ public class OperatorNameView extends TextView {
        }

        if (!mDemoMode) {
            updateText(subs);
            updateText(sub);
        }
    }

    void updateText(List<OperatorNameViewController.SubInfo> subs) {
    void updateText(OperatorNameViewController.SubInfo subInfo) {
        CharSequence carrierName = null;
        CharSequence displayText = null;
        final int N = subs.size();
        for (int i = 0; i < N; i++) {
            OperatorNameViewController.SubInfo subInfo = subs.get(i);
            CharSequence carrierName = subs.get(i).getCarrierName();
        if (subInfo != null) {
            carrierName = subInfo.getCarrierName();
        }
        if (!TextUtils.isEmpty(carrierName) && subInfo.simReady()) {
            if (subInfo.stateInService()) {
                    displayText = subInfo.getCarrierName();
                    break;
                displayText = carrierName;
            }
        }
        }

        setText(displayText);
    }
}
+48 −28
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
import android.os.Bundle;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.view.View;

@@ -30,12 +31,11 @@ import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.connectivity.IconState;
import com.android.systemui.statusbar.connectivity.NetworkController;
import com.android.systemui.statusbar.connectivity.SignalCallback;
import com.android.systemui.statusbar.phone.fragment.CollapsedStatusBarFragment;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.ViewController;

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

import javax.inject.Inject;

/** Controller for {@link OperatorNameView}. */
@@ -47,19 +47,22 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
    private final TunerService mTunerService;
    private final TelephonyManager mTelephonyManager;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
    private final CarrierConfigTracker mCarrierConfigTracker;

    private OperatorNameViewController(OperatorNameView view,
            DarkIconDispatcher darkIconDispatcher,
            NetworkController networkController,
            TunerService tunerService,
            TelephonyManager telephonyManager,
            KeyguardUpdateMonitor keyguardUpdateMonitor) {
            KeyguardUpdateMonitor keyguardUpdateMonitor,
            CarrierConfigTracker carrierConfigTracker) {
        super(view);
        mDarkIconDispatcher = darkIconDispatcher;
        mNetworkController = networkController;
        mTunerService = tunerService;
        mTelephonyManager = telephonyManager;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mCarrierConfigTracker = carrierConfigTracker;
    }

    @Override
@@ -79,24 +82,22 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
    }

    private void update() {
        mView.update(mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0,
                mTelephonyManager.isDataCapable(), getSubInfos());
        SubInfo defaultSubInfo = getDefaultSubInfo();
        boolean showOperatorName =
                mCarrierConfigTracker
                        .getShowOperatorNameInStatusBarConfig(defaultSubInfo.getSubId())
                        && (mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0);
        mView.update(showOperatorName, mTelephonyManager.isDataCapable(), getDefaultSubInfo());
    }

    private List<SubInfo> getSubInfos() {
        List<SubInfo> result = new ArrayList<>();
        List<SubscriptionInfo> subscritionInfos =
                mKeyguardUpdateMonitor.getFilteredSubscriptionInfo(false);

        for (SubscriptionInfo subscriptionInfo : subscritionInfos) {
            int subId = subscriptionInfo.getSubscriptionId();
            result.add(new SubInfo(
                    subscriptionInfo.getCarrierName(),
                    mKeyguardUpdateMonitor.getSimState(subId),
                    mKeyguardUpdateMonitor.getServiceState(subId)));
        }

        return result;
    private SubInfo getDefaultSubInfo() {
        int defaultSubId = SubscriptionManager.getDefaultDataSubscriptionId();
        SubscriptionInfo sI = mKeyguardUpdateMonitor.getSubscriptionInfoForSubId(defaultSubId);
        return new SubInfo(
                sI.getSubscriptionId(),
                sI.getCarrierName(),
                mKeyguardUpdateMonitor.getSimState(defaultSubId),
                mKeyguardUpdateMonitor.getServiceState(defaultSubId));
    }

    /** Factory for constructing an {@link OperatorNameViewController}. */
@@ -106,22 +107,32 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
        private final TunerService mTunerService;
        private final TelephonyManager mTelephonyManager;
        private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;
        private final CarrierConfigTracker mCarrierConfigTracker;

        @Inject
        public Factory(DarkIconDispatcher darkIconDispatcher, NetworkController networkController,
                TunerService tunerService, TelephonyManager telephonyManager,
                KeyguardUpdateMonitor keyguardUpdateMonitor) {
        public Factory(DarkIconDispatcher darkIconDispatcher,
                NetworkController networkController,
                TunerService tunerService,
                TelephonyManager telephonyManager,
                KeyguardUpdateMonitor keyguardUpdateMonitor,
                CarrierConfigTracker carrierConfigTracker) {
            mDarkIconDispatcher = darkIconDispatcher;
            mNetworkController = networkController;
            mTunerService = tunerService;
            mTelephonyManager = telephonyManager;
            mKeyguardUpdateMonitor = keyguardUpdateMonitor;
            mCarrierConfigTracker = carrierConfigTracker;
        }

        /** Create an {@link OperatorNameViewController}. */
        public OperatorNameViewController create(OperatorNameView view) {
            return new OperatorNameViewController(view, mDarkIconDispatcher, mNetworkController,
                    mTunerService, mTelephonyManager, mKeyguardUpdateMonitor);
            return new OperatorNameViewController(view,
                    mDarkIconDispatcher,
                    mNetworkController,
                    mTunerService,
                    mTelephonyManager,
                    mKeyguardUpdateMonitor,
                    mCarrierConfigTracker);
        }
    }

@@ -152,7 +163,7 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
            new KeyguardUpdateMonitorCallback() {
        @Override
        public void onRefreshCarrierInfo() {
            mView.updateText(getSubInfos());
            mView.updateText(getDefaultSubInfo());
        }
    };

@@ -176,17 +187,26 @@ public class OperatorNameViewController extends ViewController<OperatorNameView>
    };

    static class SubInfo {
        private final int mSubId;
        private final CharSequence mCarrierName;
        private final int mSimState;
        private final ServiceState mServiceState;

        private SubInfo(CharSequence carrierName,
                int simState, ServiceState serviceState) {
        private SubInfo(
                int subId,
                CharSequence carrierName,
                int simState,
                ServiceState serviceState) {
            mSubId = subId;
            mCarrierName = carrierName;
            mSimState = simState;
            mServiceState = serviceState;
        }

        int getSubId() {
            return mSubId;
        }

        boolean simReady() {
            return mSimState == TelephonyManager.SIM_STATE_READY;
        }
+3 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ import com.android.systemui.statusbar.policy.BatteryController;
import com.android.systemui.statusbar.policy.ConfigurationController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.settings.SecureSettings;

import java.util.concurrent.Executor;
@@ -263,6 +264,7 @@ public abstract class StatusBarViewModule {
            NetworkController networkController,
            StatusBarStateController statusBarStateController,
            CommandQueue commandQueue,
            CarrierConfigTracker carrierConfigTracker,
            CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
            OperatorNameViewController.Factory operatorNameViewControllerFactory,
            SecureSettings secureSettings,
@@ -282,6 +284,7 @@ public abstract class StatusBarViewModule {
                networkController,
                statusBarStateController,
                commandQueue,
                carrierConfigTracker,
                collapsedStatusBarFragmentLogger,
                operatorNameViewControllerFactory,
                secureSettings,
+39 −1
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.database.ContentObserver;
import android.os.Bundle;
import android.os.Parcelable;
import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
@@ -69,6 +70,9 @@ import com.android.systemui.statusbar.phone.ongoingcall.OngoingCallListener;
import com.android.systemui.statusbar.phone.panelstate.PanelExpansionStateManager;
import com.android.systemui.statusbar.policy.EncryptionHelper;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.util.CarrierConfigTracker;
import com.android.systemui.util.CarrierConfigTracker.CarrierConfigChangedListener;
import com.android.systemui.util.CarrierConfigTracker.DefaultDataSubscriptionChangedListener;
import com.android.systemui.util.settings.SecureSettings;

import java.util.ArrayList;
@@ -115,6 +119,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private final NotificationIconAreaController mNotificationIconAreaController;
    private final PanelExpansionStateManager mPanelExpansionStateManager;
    private final StatusBarIconController mStatusBarIconController;
    private final CarrierConfigTracker mCarrierConfigTracker;
    private final StatusBarHideIconsForBouncerManager mStatusBarHideIconsForBouncerManager;
    private final SecureSettings mSecureSettings;
    private final Executor mMainExecutor;
@@ -137,6 +142,28 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private OperatorNameViewController mOperatorNameViewController;
    private StatusBarSystemEventAnimator mSystemEventAnimator;

    private final CarrierConfigChangedListener mCarrierConfigCallback =
            new CarrierConfigChangedListener() {
                @Override
                public void onCarrierConfigChanged() {
                    if (mOperatorNameViewController == null) {
                        initOperatorName();
                    } else {
                        // Already initialized, KeyguardUpdateMonitorCallback will handle the update
                    }
                }
            };

    private final DefaultDataSubscriptionChangedListener mDefaultDataListener =
            new DefaultDataSubscriptionChangedListener() {
                @Override
                public void onDefaultSubscriptionChanged(int subId) {
                    if (mOperatorNameViewController == null) {
                        initOperatorName();
                    }
                }
            };

    @SuppressLint("ValidFragment")
    public CollapsedStatusBarFragment(
            StatusBarFragmentComponent.Factory statusBarFragmentComponentFactory,
@@ -153,6 +180,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
            NetworkController networkController,
            StatusBarStateController statusBarStateController,
            CommandQueue commandQueue,
            CarrierConfigTracker carrierConfigTracker,
            CollapsedStatusBarFragmentLogger collapsedStatusBarFragmentLogger,
            OperatorNameViewController.Factory operatorNameViewControllerFactory,
            SecureSettings secureSettings,
@@ -172,6 +200,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        mNetworkController = networkController;
        mStatusBarStateController = statusBarStateController;
        mCommandQueue = commandQueue;
        mCarrierConfigTracker = carrierConfigTracker;
        mCollapsedStatusBarFragmentLogger = collapsedStatusBarFragmentLogger;
        mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
        mSecureSettings = secureSettings;
@@ -212,6 +241,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        initNotificationIconArea();
        mSystemEventAnimator =
                new StatusBarSystemEventAnimator(mSystemIconArea, getResources());
        mCarrierConfigTracker.addCallback(mCarrierConfigCallback);
        mCarrierConfigTracker.addDefaultDataSubscriptionChangedListener(mDefaultDataListener);
    }

    @VisibleForTesting
@@ -283,6 +314,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        if (mNetworkController.hasEmergencyCryptKeeperText()) {
            mNetworkController.removeCallback(mSignalCallback);
        }
        mCarrierConfigTracker.removeCallback(mCarrierConfigCallback);
        mCarrierConfigTracker.removeDataSubscriptionChangedListener(mDefaultDataListener);
    }

    /** Initializes views related to the notification icon area. */
@@ -569,11 +602,16 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    }

    private void initOperatorName() {
        if (getResources().getBoolean(R.bool.config_showOperatorNameInStatusBar)) {
        int subId = SubscriptionManager.getDefaultDataSubscriptionId();
        if (mCarrierConfigTracker.getShowOperatorNameInStatusBarConfig(subId)) {
            ViewStub stub = mStatusBar.findViewById(R.id.operator_name);
            mOperatorNameViewController =
                    mOperatorNameViewControllerFactory.create((OperatorNameView) stub.inflate());
            mOperatorNameViewController.init();
            // This view should not be visible on lock-screen
            if (mKeyguardStateController.isShowing()) {
                hideOperatorName(false);
            }
        }
    }

Loading