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

Commit 5313cb55 authored by Zoey Chen's avatar Zoey Chen
Browse files

[Provider Model] Sync solution from sc

    - ag/15222851: Fix internet panel doesn't show data rat after dds change,
        the internet panel does not listen dds changed.
    - ag/15270340: The "no connection" should be shown in no data cell connection.
    - Add DISALLOW_CONFIG_MOBILE_NETWORKS condition.

Bug: 193029917
Test: atest InternetDialogControllerTest
Change-Id: I4ea7aa443659cef091f525e0064a7db4c95522e2
parent eb07ed31
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@ import com.android.systemui.qs.logging.QSLogger;
import com.android.systemui.qs.tileimpl.QSTileImpl;
import com.android.systemui.qs.tiles.dialog.InternetDialogFactory;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NetworkController.AccessPointController;
import com.android.systemui.statusbar.policy.NetworkController.IconState;
import com.android.systemui.statusbar.policy.NetworkController.MobileDataIndicators;
import com.android.systemui.statusbar.policy.NetworkController.SignalCallback;
@@ -69,6 +70,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
    private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS);

    protected final NetworkController mController;
    private final AccessPointController mAccessPointController;
    private final DataUsageController mDataController;
    // The last updated tile state, 0: mobile, 1: wifi, 2: ethernet.
    private int mLastTileState = -1;
@@ -88,6 +90,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
            ActivityStarter activityStarter,
            QSLogger qsLogger,
            NetworkController networkController,
            AccessPointController accessPointController,
            InternetDialogFactory internetDialogFactory
    ) {
        super(host, backgroundLooper, mainHandler, falsingManager, metricsLogger,
@@ -95,6 +98,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
        mInternetDialogFactory = internetDialogFactory;
        mHandler = mainHandler;
        mController = networkController;
        mAccessPointController = accessPointController;
        mDataController = mController.getMobileDataController();
        mController.observe(getLifecycle(), mSignalCallback);
    }
@@ -118,9 +122,8 @@ public class InternetTile extends QSTileImpl<SignalState> {

    @Override
    protected void handleClick(@Nullable View view) {
        mHandler.post(() -> {
            mInternetDialogFactory.create(true);
        });
        boolean canConfigMobileData = mAccessPointController.canConfigMobileData();
        mHandler.post(() -> mInternetDialogFactory.create(true, canConfigMobileData));
    }

    @Override
+12 −3
Original line number Diff line number Diff line
@@ -126,6 +126,7 @@ public class InternetDialog extends SystemUIDialog implements
    private int mListMaxHeight;
    private int mDefaultDataSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
    private boolean mIsProgressBarVisible;
    private boolean mCanConfigMobileData;

    private final ViewTreeObserver.OnGlobalLayoutListener mInternetListLayoutListener = () -> {
        // Set max height for list
@@ -137,7 +138,7 @@ public class InternetDialog extends SystemUIDialog implements
    };

    public InternetDialog(Context context, InternetDialogFactory internetDialogFactory,
            InternetDialogController internetDialogController,
            InternetDialogController internetDialogController, boolean canConfigMobileData,
            boolean aboveStatusBar, UiEventLogger uiEventLogger, @Main Handler handler) {
        super(context, R.style.Theme_SystemUI_Dialog_Internet);
        if (DEBUG) {
@@ -151,6 +152,7 @@ public class InternetDialog extends SystemUIDialog implements
        mDefaultDataSubId = mInternetDialogController.getDefaultDataSubscriptionId();
        mTelephonyManager = mInternetDialogController.getTelephonyManager();
        mWifiManager = mInternetDialogController.getWifiManager();
        mCanConfigMobileData = canConfigMobileData;

        mLayoutManager = new LinearLayoutManager(mContext) {
            @Override
@@ -319,8 +321,13 @@ public class InternetDialog extends SystemUIDialog implements
            mMobileDataToggle.setChecked(mInternetDialogController.isMobileDataEnabled());
            mMobileNetworkLayout.setVisibility(View.VISIBLE);
            mMobileTitleText.setText(getMobileNetworkTitle());
            if (!TextUtils.isEmpty(getMobileNetworkSummary())) {
                mMobileSummaryText.setText(
                        Html.fromHtml(getMobileNetworkSummary(), Html.FROM_HTML_MODE_LEGACY));
                mMobileSummaryText.setVisibility(View.VISIBLE);
            } else {
                mMobileSummaryText.setVisibility(View.GONE);
            }
            mSignalIcon.setImageDrawable(getSignalStrengthDrawable());
            int titleColor = isCellularNetwork ? mContext.getColor(
                    R.color.connected_network_primary_color) : Utils.getColorAttrDefaultColor(
@@ -331,6 +338,8 @@ public class InternetDialog extends SystemUIDialog implements
            mMobileTitleText.setTextColor(titleColor);
            mMobileSummaryText.setTextColor(summaryColor);
            mMobileNetworkLayout.setBackground(isCellularNetwork ? mBackgroundOn : null);

            mMobileDataToggle.setVisibility(mCanConfigMobileData ? View.VISIBLE : View.INVISIBLE);
        }
    }

+55 −23
Original line number Diff line number Diff line
@@ -36,6 +36,8 @@ import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.os.Handler;
import android.provider.Settings;
import android.telephony.AccessNetworkConstants;
import android.telephony.NetworkRegistrationInfo;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
import android.telephony.SubscriptionInfo;
@@ -115,7 +117,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
    private MobileMappings.Config mConfig = null;
    private Executor mExecutor;
    private AccessPointController mAccessPointController;
    private IntentFilter mWifiStateFilter;
    private IntentFilter mConnectionStateFilter;
    private InternetDialogCallback mCallback;
    private List<WifiEntry> mWifiEntry;
    private WifiEntry mConnectedEntry;
@@ -168,8 +170,10 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        mSubscriptionManager = subscriptionManager;
        mBroadcastDispatcher = broadcastDispatcher;
        mKeyguardUpdateMonitor = keyguardUpdateMonitor;
        mWifiStateFilter = new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        mWifiStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mConnectionStateFilter = new IntentFilter();
        mConnectionStateFilter.addAction(WifiManager.NETWORK_STATE_CHANGED_ACTION);
        mConnectionStateFilter.addAction(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION);
        mConnectionStateFilter.addAction(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED);
        mUiEventLogger = uiEventLogger;
        mActivityStarter = starter;
        mAccessPointController = accessPointController;
@@ -183,12 +187,16 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        mCallback = callback;
        mKeyguardUpdateMonitor.registerCallback(mKeyguardUpdateCallback);
        mAccessPointController.addAccessPointCallback(this);
        mBroadcastDispatcher.registerReceiver(mWifiStateReceiver, mWifiStateFilter, mExecutor);
        mBroadcastDispatcher.registerReceiver(mConnectionStateReceiver, mConnectionStateFilter,
                mExecutor);
        // Listen the subscription changes
        mOnSubscriptionsChangedListener = new InternetOnSubscriptionChangedListener();
        mSubscriptionManager.addOnSubscriptionsChangedListener(mExecutor,
                mOnSubscriptionsChangedListener);
        mDefaultDataSubId = getDefaultDataSubscriptionId();
        if (DEBUG) {
            Log.d(TAG, "Init, SubId: " + mDefaultDataSubId);
        }
        mTelephonyManager = mTelephonyManager.createForSubscriptionId(mDefaultDataSubId);
        mInternetTelephonyCallback = new InternetTelephonyCallback();
        mTelephonyManager.registerTelephonyCallback(mExecutor, mInternetTelephonyCallback);
@@ -203,7 +211,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        if (DEBUG) {
            Log.d(TAG, "onStop");
        }
        mBroadcastDispatcher.unregisterReceiver(mWifiStateReceiver);
        mBroadcastDispatcher.unregisterReceiver(mConnectionStateReceiver);
        mTelephonyManager.unregisterTelephonyCallback(mInternetTelephonyCallback);
        mSubscriptionManager.removeOnSubscriptionsChangedListener(
                mOnSubscriptionsChangedListener);
@@ -626,13 +634,12 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
    }

    boolean isDataStateInService() {
        if (mTelephonyManager == null) {
            if (DEBUG) {
                Log.d(TAG, "TelephonyManager is null, can not detect mobile state.");
            }
            return false;
        }
        return mTelephonyManager.getDataState() == TelephonyManager.DATA_CONNECTED;
        final ServiceState serviceState = mTelephonyManager.getServiceState();
        NetworkRegistrationInfo regInfo =
                (serviceState == null) ? null : serviceState.getNetworkRegistrationInfo(
                        NetworkRegistrationInfo.DOMAIN_PS,
                        AccessNetworkConstants.TRANSPORT_TYPE_WWAN);
        return (regInfo == null) ? false : regInfo.isRegistered();
    }

    boolean isVoiceStateInService() {
@@ -793,15 +800,7 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,

        @Override
        public void onSubscriptionsChanged() {
            mDefaultDataSubId = getDefaultDataSubscriptionId();
            if (SubscriptionManager.isUsableSubscriptionId(mDefaultDataSubId)) {
                mTelephonyManager.unregisterTelephonyCallback(mInternetTelephonyCallback);

                mTelephonyManager = mTelephonyManager.createForSubscriptionId(mDefaultDataSubId);
                mTelephonyManager.registerTelephonyCallback(mHandler::post,
                        mInternetTelephonyCallback);
                mCallback.onSubscriptionsChanged(mDefaultDataSubId);
            }
            updateListener();
        }
    }

@@ -817,13 +816,46 @@ public class InternetDialogController implements WifiEntry.DisconnectCallback,
        }
    }

    private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
    private final BroadcastReceiver mConnectionStateReceiver = new BroadcastReceiver() {
        @Override
        public void onReceive(Context context, Intent intent) {
            final String action = intent.getAction();
            if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)
                    || action.equals(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION)) {
                mCallback.onWifiStateReceived(context, intent);
            }

            if (action.equals(TelephonyManager.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) {
                if (DEBUG) {
                    Log.d(TAG, "ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED");
                }
                updateListener();
            }
        }
    };

    private void updateListener() {
        int defaultDataSubId = getDefaultDataSubscriptionId();
        if (mDefaultDataSubId == getDefaultDataSubscriptionId()) {
            if (DEBUG) {
                Log.d(TAG, "DDS: no change");
            }
            return;
        }

        mDefaultDataSubId = defaultDataSubId;
        if (DEBUG) {
            Log.d(TAG, "DDS: defaultDataSubId:" + mDefaultDataSubId);
        }
        if (SubscriptionManager.isUsableSubscriptionId(mDefaultDataSubId)) {
            mTelephonyManager.unregisterTelephonyCallback(mInternetTelephonyCallback);
            mTelephonyManager = mTelephonyManager.createForSubscriptionId(mDefaultDataSubId);
            mTelephonyManager.registerTelephonyCallback(mHandler::post,
                    mInternetTelephonyCallback);
            mCallback.onSubscriptionsChanged(mDefaultDataSubId);
        }
    }

    interface InternetDialogCallback {

        void onRefreshCarrierInfo();
+3 −3
Original line number Diff line number Diff line
@@ -41,15 +41,15 @@ class InternetDialogFactory @Inject constructor(
    }

    /** Creates a [InternetDialog]. */
    fun create(aboveStatusBar: Boolean) {
    fun create(aboveStatusBar: Boolean, canConfigMobileData: Boolean) {
        if (internetDialog != null) {
            if (DEBUG) {
                Log.d(TAG, "InternetDialog is showing, do not create it twice.")
            }
            return
        } else {
            internetDialog = InternetDialog(context, this, internetDialogController, aboveStatusBar,
                    uiEventLogger, handler)
            internetDialog = InternetDialog(context, this, internetDialogController,
                    canConfigMobileData, aboveStatusBar, uiEventLogger, handler)
            internetDialog?.show()
        }
    }
+5 −0
Original line number Diff line number Diff line
@@ -119,6 +119,11 @@ public class AccessPointControllerImpl
                new UserHandle(mCurrentUser));
    }

    public boolean canConfigMobileData() {
        return !mUserManager.hasUserRestriction(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS,
                UserHandle.of(mCurrentUser));
    }

    public void onUserSwitched(int newUserId) {
        mCurrentUser = newUserId;
    }
Loading