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

Commit ebf67700 authored by Dave Mankoff's avatar Dave Mankoff Committed by Android (Google) Code Review
Browse files

Merge changes from topic "b196625757-operator-name-view" into sc-v2-dev

* changes:
  6/6 Remove NetworkController from Dependency.
  5/N Move KeyguardUpdateMonitor to OperatorNameViewController.
  4/N Move Tunable to OperatorNameViewController
  3/N Move SignalCallback to OperatorNameViewController.
  2/N Move DarkModeReceiver to OperatorNameViewController.
  1/N Add an OperatorNameViewController.
parents 3767ba99 28f9c933
Loading
Loading
Loading
Loading
+0 −4
Original line number Diff line number Diff line
@@ -114,7 +114,6 @@ import com.android.systemui.statusbar.policy.FlashlightController;
import com.android.systemui.statusbar.policy.HotspotController;
import com.android.systemui.statusbar.policy.KeyguardStateController;
import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NextAlarmController;
import com.android.systemui.statusbar.policy.RemoteInputQuickSettingsDisabler;
import com.android.systemui.statusbar.policy.RotationLockController;
@@ -244,7 +243,6 @@ public class Dependency {
    @Inject Lazy<BluetoothController> mBluetoothController;
    @Inject Lazy<LocationController> mLocationController;
    @Inject Lazy<RotationLockController> mRotationLockController;
    @Inject Lazy<NetworkController> mNetworkController;
    @Inject Lazy<ZenModeController> mZenModeController;
    @Inject Lazy<HotspotController> mHotspotController;
    @Inject Lazy<CastController> mCastController;
@@ -389,8 +387,6 @@ public class Dependency {

        mProviders.put(RotationLockController.class, mRotationLockController::get);

        mProviders.put(NetworkController.class, mNetworkController::get);

        mProviders.put(ZenModeController.class, mZenModeController::get);

        mProviders.put(HotspotController.class, mHotspotController::get);
+11 −90
Original line number Diff line number Diff line
@@ -15,46 +15,18 @@
package com.android.systemui.statusbar;

import android.content.Context;
import android.graphics.Rect;
import android.os.Bundle;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.widget.TextView;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.settingslib.WirelessUtils;
import com.android.systemui.Dependency;
import com.android.systemui.demomode.DemoModeCommandReceiver;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.plugins.DarkIconDispatcher.DarkReceiver;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.tuner.TunerService.Tunable;

import java.util.List;

/** Shows the operator name */
public class OperatorNameView extends TextView implements DemoModeCommandReceiver, DarkReceiver,
        SignalCallback, Tunable {

    private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name";

    private KeyguardUpdateMonitor mKeyguardUpdateMonitor;
public class OperatorNameView extends TextView {
    private boolean mDemoMode;

    private final KeyguardUpdateMonitorCallback mCallback = new KeyguardUpdateMonitorCallback() {
        @Override
        public void onRefreshCarrierInfo() {
            updateText();
        }
    };

    public OperatorNameView(Context context) {
        this(context, null);
    }
@@ -67,62 +39,14 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive
        super(context, attrs, defStyle);
    }

    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        mKeyguardUpdateMonitor = Dependency.get(KeyguardUpdateMonitor.class);
        mKeyguardUpdateMonitor.registerCallback(mCallback);
        Dependency.get(DarkIconDispatcher.class).addDarkReceiver(this);
        Dependency.get(NetworkController.class).addCallback(this);
        Dependency.get(TunerService.class).addTunable(this, KEY_SHOW_OPERATOR_NAME);
    }

    @Override
    protected void onDetachedFromWindow() {
        super.onDetachedFromWindow();
        mKeyguardUpdateMonitor.removeCallback(mCallback);
        Dependency.get(DarkIconDispatcher.class).removeDarkReceiver(this);
        Dependency.get(NetworkController.class).removeCallback(this);
        Dependency.get(TunerService.class).removeTunable(this);
    }

    @Override
    public void onDarkChanged(Rect area, float darkIntensity, int tint) {
        setTextColor(DarkIconDispatcher.getTint(area, this, tint));
    }

    @Override
    public void setIsAirplaneMode(IconState icon) {
        update();
    }

    @Override
    public void onTuningChanged(String key, String newValue) {
        update();
    }

    @Override
    public void dispatchDemoCommand(String command, Bundle args) {
        setText(args.getString("name"));
    }

    @Override
    public void onDemoModeStarted() {
        mDemoMode = true;
    }

    @Override
    public void onDemoModeFinished() {
        mDemoMode = false;
        update();
    void setDemoMode(boolean demoMode) {
        mDemoMode = demoMode;
    }

    private void update() {
        boolean showOperatorName = Dependency.get(TunerService.class)
                .getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0;
    void update(boolean showOperatorName, boolean hasMobile,
            List<OperatorNameViewController.SubInfo> subs) {
        setVisibility(showOperatorName ? VISIBLE : GONE);

        boolean hasMobile = mContext.getSystemService(TelephonyManager.class).isDataCapable();
        boolean airplaneMode = WirelessUtils.isAirplaneModeOn(mContext);
        if (!hasMobile || airplaneMode) {
            setText(null);
@@ -131,22 +55,19 @@ public class OperatorNameView extends TextView implements DemoModeCommandReceive
        }

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

    private void updateText() {
    void updateText(List<OperatorNameViewController.SubInfo> subs) {
        CharSequence displayText = null;
        List<SubscriptionInfo> subs = mKeyguardUpdateMonitor.getFilteredSubscriptionInfo(false);
        final int N = subs.size();
        for (int i = 0; i < N; i++) {
            int subId = subs.get(i).getSubscriptionId();
            int simState = mKeyguardUpdateMonitor.getSimState(subId);
            OperatorNameViewController.SubInfo subInfo = subs.get(i);
            CharSequence carrierName = subs.get(i).getCarrierName();
            if (!TextUtils.isEmpty(carrierName) && simState == TelephonyManager.SIM_STATE_READY) {
                ServiceState ss = mKeyguardUpdateMonitor.getServiceState(subId);
                if (ss != null && ss.getState() == ServiceState.STATE_IN_SERVICE) {
                    displayText = carrierName;
            if (!TextUtils.isEmpty(carrierName) && subInfo.simReady()) {
                if (subInfo.stateInService()) {
                    displayText = subInfo.getCarrierName();
                    break;
                }
            }
+201 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 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;

import android.os.Bundle;
import android.telephony.ServiceState;
import android.telephony.SubscriptionInfo;
import android.telephony.TelephonyManager;
import android.view.View;

import com.android.keyguard.KeyguardUpdateMonitor;
import com.android.keyguard.KeyguardUpdateMonitorCallback;
import com.android.systemui.demomode.DemoModeCommandReceiver;
import com.android.systemui.plugins.DarkIconDispatcher;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.tuner.TunerService;
import com.android.systemui.util.ViewController;

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

import javax.inject.Inject;

/** Controller for {@link OperatorNameView}. */
public class OperatorNameViewController extends ViewController<OperatorNameView> {
    private static final String KEY_SHOW_OPERATOR_NAME = "show_operator_name";

    private final DarkIconDispatcher mDarkIconDispatcher;
    private final NetworkController mNetworkController;
    private final TunerService mTunerService;
    private final TelephonyManager mTelephonyManager;
    private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;

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

    @Override
    protected void onViewAttached() {
        mDarkIconDispatcher.addDarkReceiver(mDarkReceiver);
        mNetworkController.addCallback(mSignalCallback);
        mTunerService.addTunable(mTunable, KEY_SHOW_OPERATOR_NAME);
        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateMonitorCallback);
    }

    @Override
    protected void onViewDetached() {
        mDarkIconDispatcher.removeDarkReceiver(mDarkReceiver);
        mNetworkController.removeCallback(mSignalCallback);
        mTunerService.removeTunable(mTunable);
        mKeyguardUpdateMonitor.removeCallback(mKeyguardUpdateMonitorCallback);
    }

    private void update() {
        mView.update(mTunerService.getValue(KEY_SHOW_OPERATOR_NAME, 1) != 0,
                mTelephonyManager.isDataCapable(), getSubInfos());
    }

    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;
    }

    /** Factory for constructing an {@link OperatorNameViewController}. */
    public static class Factory {
        private final DarkIconDispatcher mDarkIconDispatcher;
        private final NetworkController mNetworkController;
        private final TunerService mTunerService;
        private final TelephonyManager mTelephonyManager;
        private final KeyguardUpdateMonitor mKeyguardUpdateMonitor;

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

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

    /**
     * Needed because of how {@link CollapsedStatusBarFragment} works.
     *
     * Ideally this can be done internally.
     **/
    public View getView() {
        return mView;
    }

    private final DarkIconDispatcher.DarkReceiver mDarkReceiver =
            (area, darkIntensity, tint) ->
                    mView.setTextColor(DarkIconDispatcher.getTint(area, mView, tint));

    private final NetworkController.SignalCallback mSignalCallback =
            new NetworkController.SignalCallback() {
        @Override
        public void setIsAirplaneMode(NetworkController.IconState icon) {
            update();
        }
    };

    private final TunerService.Tunable mTunable = (key, newValue) -> update();


    private final KeyguardUpdateMonitorCallback mKeyguardUpdateMonitorCallback =
            new KeyguardUpdateMonitorCallback() {
        @Override
        public void onRefreshCarrierInfo() {
            mView.updateText(getSubInfos());
        }
    };

    // TODO: do we even register this anywhere?
    private final DemoModeCommandReceiver mDemoModeCommandReceiver = new DemoModeCommandReceiver() {
        @Override
        public void onDemoModeStarted() {
            mView.setDemoMode(true);
        }

        @Override
        public void onDemoModeFinished() {
            mView.setDemoMode(false);
            update();
        }

        @Override
        public void dispatchDemoCommand(String command, Bundle args) {
            mView.setText(args.getString("name"));
        }
    };

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

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

        boolean simReady() {
            return mSimState == TelephonyManager.SIM_STATE_READY;
        }

        CharSequence getCarrierName() {
            return mCarrierName;
        }

        boolean stateInService() {
            return mServiceState != null
                    && mServiceState.getState() == ServiceState.STATE_IN_SERVICE;
        }
    }
}
+14 −7
Original line number Diff line number Diff line
@@ -42,6 +42,8 @@ import com.android.systemui.animation.Interpolators;
import com.android.systemui.flags.FeatureFlags;
import com.android.systemui.plugins.statusbar.StatusBarStateController;
import com.android.systemui.statusbar.CommandQueue;
import com.android.systemui.statusbar.OperatorNameView;
import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.StatusBarState;
import com.android.systemui.statusbar.events.SystemStatusAnimationCallback;
import com.android.systemui.statusbar.events.SystemStatusAnimationScheduler;
@@ -90,8 +92,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private int mDisabled2;
    private Lazy<Optional<StatusBar>> mStatusBarOptionalLazy;
    private DarkIconManager mDarkIconManager;
    private View mOperatorNameFrame;
    private final CommandQueue mCommandQueue;
    private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory;
    private final OngoingCallController mOngoingCallController;
    private final SystemStatusAnimationScheduler mAnimationScheduler;
    private final StatusBarLocationPublisher mLocationPublisher;
@@ -114,6 +116,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
            disable(getContext().getDisplayId(), mDisabled1, mDisabled2, animate);
        }
    };
    private OperatorNameViewController mOperatorNameViewController;

    @Inject
    public CollapsedStatusBarFragment(
@@ -127,7 +130,8 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
            KeyguardStateController keyguardStateController,
            NetworkController networkController,
            StatusBarStateController statusBarStateController,
            CommandQueue commandQueue
            CommandQueue commandQueue,
            OperatorNameViewController.Factory operatorNameViewControllerFactory
    ) {
        mOngoingCallController = ongoingCallController;
        mAnimationScheduler = animationScheduler;
@@ -140,6 +144,7 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
        mNetworkController = networkController;
        mStatusBarStateController = statusBarStateController;
        mCommandQueue = commandQueue;
        mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
    }

    @Override
@@ -411,14 +416,14 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    }

    public void hideOperatorName(boolean animate) {
        if (mOperatorNameFrame != null) {
            animateHide(mOperatorNameFrame, animate);
        if (mOperatorNameViewController != null) {
            animateHide(mOperatorNameViewController.getView(), animate);
        }
    }

    public void showOperatorName(boolean animate) {
        if (mOperatorNameFrame != null) {
            animateShow(mOperatorNameFrame, animate);
        if (mOperatorNameViewController != null) {
            animateShow(mOperatorNameViewController.getView(), animate);
        }
    }

@@ -495,7 +500,9 @@ public class CollapsedStatusBarFragment extends Fragment implements CommandQueue
    private void initOperatorName() {
        if (getResources().getBoolean(R.bool.config_showOperatorNameInStatusBar)) {
            ViewStub stub = mStatusBar.findViewById(R.id.operator_name);
            mOperatorNameFrame = stub.inflate();
            mOperatorNameViewController =
                    mOperatorNameViewControllerFactory.create((OperatorNameView) stub.inflate());
            mOperatorNameViewController.init();
        }
    }

+6 −1
Original line number Diff line number Diff line
@@ -189,6 +189,7 @@ import com.android.systemui.statusbar.NotificationShadeDepthController;
import com.android.systemui.statusbar.NotificationShadeWindowController;
import com.android.systemui.statusbar.NotificationShelfController;
import com.android.systemui.statusbar.NotificationViewHierarchyManager;
import com.android.systemui.statusbar.OperatorNameViewController;
import com.android.systemui.statusbar.PowerButtonReveal;
import com.android.systemui.statusbar.PulseExpansionHandler;
import com.android.systemui.statusbar.StatusBarState;
@@ -523,6 +524,7 @@ public class StatusBar extends SystemUI implements
    // settings
    private QSPanelController mQSPanelController;

    private final OperatorNameViewController.Factory mOperatorNameViewControllerFactory;
    KeyguardIndicationController mKeyguardIndicationController;

    private View mReportRejectedTouch;
@@ -862,6 +864,7 @@ public class StatusBar extends SystemUI implements
            KeyguardDismissUtil keyguardDismissUtil,
            ExtensionController extensionController,
            UserInfoControllerImpl userInfoControllerImpl,
            OperatorNameViewController.Factory operatorNameViewControllerFactory,
            PhoneStatusBarPolicy phoneStatusBarPolicy,
            KeyguardIndicationController keyguardIndicationController,
            DemoModeController demoModeController,
@@ -892,6 +895,7 @@ public class StatusBar extends SystemUI implements
        mKeyguardBypassController = keyguardBypassController;
        mKeyguardStateController = keyguardStateController;
        mHeadsUpManager = headsUpManagerPhone;
        mOperatorNameViewControllerFactory = operatorNameViewControllerFactory;
        mKeyguardIndicationController = keyguardIndicationController;
        mStatusBarTouchableRegionManager = statusBarTouchableRegionManager;
        mDynamicPrivacyController = dynamicPrivacyController;
@@ -1282,7 +1286,8 @@ public class StatusBar extends SystemUI implements
                                mKeyguardStateController,
                                mNetworkController,
                                mStatusBarStateController,
                                mCommandQueue
                                mCommandQueue,
                                mOperatorNameViewControllerFactory
                        ),
                        CollapsedStatusBarFragment.TAG)
                .commit();
Loading