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

Commit 5bda9da9 authored by Ying Xu's avatar Ying Xu Committed by Android (Google) Code Review
Browse files

Merge "Add synchronization for refreshing InternetTile with cached states"

parents 777d6de5 3283ff7f
Loading
Loading
Loading
Loading
+113 −36
Original line number Diff line number Diff line
@@ -35,6 +35,7 @@ import android.widget.Switch;

import androidx.annotation.Nullable;

import com.android.internal.annotations.GuardedBy;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settingslib.graph.SignalDrawable;
@@ -174,6 +175,15 @@ public class InternetTile extends QSTileImpl<SignalState> {
        @Nullable
        String mEthernetContentDescription;

        public void copyTo(EthernetCallbackInfo ethernetCallbackInfo) {
            if (ethernetCallbackInfo == null) {
                throw new IllegalArgumentException();
            }
            ethernetCallbackInfo.mConnected = this.mConnected;
            ethernetCallbackInfo.mEthernetSignalIconId = this.mEthernetSignalIconId;
            ethernetCallbackInfo.mEthernetContentDescription = this.mEthernetContentDescription;
        }

        @Override
        public String toString() {
            return new StringBuilder("EthernetCallbackInfo[")
@@ -200,6 +210,23 @@ public class InternetTile extends QSTileImpl<SignalState> {
        boolean mNoValidatedNetwork;
        boolean mNoNetworksAvailable;

        public void copyTo(WifiCallbackInfo wifiCallbackInfo) {
            if (wifiCallbackInfo == null) {
                throw new IllegalArgumentException();
            }
            wifiCallbackInfo.mAirplaneModeEnabled = this.mAirplaneModeEnabled;
            wifiCallbackInfo.mEnabled = this.mEnabled;
            wifiCallbackInfo.mConnected = this.mConnected;
            wifiCallbackInfo.mWifiSignalIconId = this.mWifiSignalIconId;
            wifiCallbackInfo.mSsid = this.mSsid;
            wifiCallbackInfo.mWifiSignalContentDescription = this.mWifiSignalContentDescription;
            wifiCallbackInfo.mIsTransient = this.mIsTransient;
            wifiCallbackInfo.mStatusLabel = this.mStatusLabel;
            wifiCallbackInfo.mNoDefaultNetwork = this.mNoDefaultNetwork;
            wifiCallbackInfo.mNoValidatedNetwork = this.mNoValidatedNetwork;
            wifiCallbackInfo.mNoNetworksAvailable = this.mNoNetworksAvailable;
        }

        @Override
        public String toString() {
            return new StringBuilder("WifiCallbackInfo[")
@@ -232,6 +259,23 @@ public class InternetTile extends QSTileImpl<SignalState> {
        boolean mNoValidatedNetwork;
        boolean mNoNetworksAvailable;

        public void copyTo(CellularCallbackInfo cellularCallbackInfo) {
            if (cellularCallbackInfo == null) {
                throw new IllegalArgumentException();
            }
            cellularCallbackInfo.mAirplaneModeEnabled = this.mAirplaneModeEnabled;
            cellularCallbackInfo.mDataSubscriptionName = this.mDataSubscriptionName;
            cellularCallbackInfo.mDataContentDescription = this.mDataContentDescription;
            cellularCallbackInfo.mMobileSignalIconId = this.mMobileSignalIconId;
            cellularCallbackInfo.mQsTypeIcon = this.mQsTypeIcon;
            cellularCallbackInfo.mNoSim = this.mNoSim;
            cellularCallbackInfo.mRoaming = this.mRoaming;
            cellularCallbackInfo.mMultipleSubs = this.mMultipleSubs;
            cellularCallbackInfo.mNoDefaultNetwork = this.mNoDefaultNetwork;
            cellularCallbackInfo.mNoValidatedNetwork = this.mNoValidatedNetwork;
            cellularCallbackInfo.mNoNetworksAvailable = this.mNoNetworksAvailable;
        }

        @Override
        public String toString() {
            return new StringBuilder("CellularCallbackInfo[")
@@ -251,8 +295,11 @@ public class InternetTile extends QSTileImpl<SignalState> {
    }

    protected final class InternetSignalCallback implements SignalCallback {
        @GuardedBy("mWifiInfo")
        final WifiCallbackInfo mWifiInfo = new WifiCallbackInfo();
        @GuardedBy("mCellularInfo")
        final CellularCallbackInfo mCellularInfo = new CellularCallbackInfo();
        @GuardedBy("mEthernetInfo")
        final EthernetCallbackInfo mEthernetInfo = new EthernetCallbackInfo();


@@ -261,6 +308,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
            if (DEBUG) {
                Log.d(TAG, "setWifiIndicators: " + indicators);
            }
            synchronized (mWifiInfo) {
                mWifiInfo.mEnabled = indicators.enabled;
                mWifiInfo.mSsid = indicators.description;
                mWifiInfo.mIsTransient = indicators.isTransient;
@@ -269,13 +317,16 @@ public class InternetTile extends QSTileImpl<SignalState> {
                    mWifiInfo.mConnected = indicators.qsIcon.visible;
                    mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon;
                    mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription;
                refreshState(mWifiInfo);
                } else {
                    mWifiInfo.mConnected = false;
                    mWifiInfo.mWifiSignalIconId = 0;
                    mWifiInfo.mWifiSignalContentDescription = null;
                }
            }
            if (indicators.qsIcon != null) {
                refreshState(mWifiInfo);
            }
        }

        @Override
        public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
@@ -286,6 +337,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
                // Not data sim, don't display.
                return;
            }
            synchronized (mCellularInfo) {
                mCellularInfo.mDataSubscriptionName = indicators.qsDescription == null
                    ? mController.getMobileDataNetworkName() : indicators.qsDescription;
                mCellularInfo.mDataContentDescription = indicators.qsDescription != null
@@ -294,6 +346,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
                mCellularInfo.mQsTypeIcon = indicators.qsType;
                mCellularInfo.mRoaming = indicators.roaming;
                mCellularInfo.mMultipleSubs = mController.getNumberSubscriptions() > 1;
            }
            refreshState(mCellularInfo);
        }

@@ -303,9 +356,11 @@ public class InternetTile extends QSTileImpl<SignalState> {
                Log.d(TAG, "setEthernetIndicators: "
                        + "icon = " + (icon == null ? "" :  icon.toString()));
            }
            synchronized (mEthernetInfo) {
                mEthernetInfo.mConnected = icon.visible;
                mEthernetInfo.mEthernetSignalIconId = icon.icon;
                mEthernetInfo.mEthernetContentDescription = icon.contentDescription;
            }
            if (icon.visible) {
                refreshState(mEthernetInfo);
            }
@@ -318,6 +373,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
                        + "show = " + show + ","
                        + "simDetected = " + simDetected);
            }
            synchronized (mCellularInfo) {
                mCellularInfo.mNoSim = show;
                if (mCellularInfo.mNoSim) {
                    // Make sure signal gets cleared out when no sims.
@@ -325,6 +381,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
                    mCellularInfo.mQsTypeIcon = 0;
                }
            }
        }

        @Override
        public void setIsAirplaneMode(IconState icon) {
@@ -335,8 +392,12 @@ public class InternetTile extends QSTileImpl<SignalState> {
            if (mCellularInfo.mAirplaneModeEnabled == icon.visible) {
                return;
            }
            synchronized (mCellularInfo) {
                mCellularInfo.mAirplaneModeEnabled = icon.visible;
            }
            synchronized (mWifiInfo) {
                mWifiInfo.mAirplaneModeEnabled = icon.visible;
            }
            if (!mSignalCallback.mEthernetInfo.mConnected) {
                // Always use mWifiInfo to refresh the Internet Tile if airplane mode is enabled,
                // because Internet Tile will show different information depending on whether WiFi
@@ -363,12 +424,16 @@ public class InternetTile extends QSTileImpl<SignalState> {
                        + "noValidatedNetwork = " + noValidatedNetwork + ","
                        + "noNetworksAvailable = " + noNetworksAvailable);
            }
            synchronized (mCellularInfo) {
                mCellularInfo.mNoDefaultNetwork = noDefaultNetwork;
                mCellularInfo.mNoValidatedNetwork = noValidatedNetwork;
                mCellularInfo.mNoNetworksAvailable = noNetworksAvailable;
            }
            synchronized (mWifiInfo) {
                mWifiInfo.mNoDefaultNetwork = noDefaultNetwork;
                mWifiInfo.mNoValidatedNetwork = noValidatedNetwork;
                mWifiInfo.mNoNetworksAvailable = noNetworksAvailable;
            }
            if (!noDefaultNetwork) {
                return;
            }
@@ -403,11 +468,23 @@ public class InternetTile extends QSTileImpl<SignalState> {
            // arg = null, in this case the last updated CellularCallbackInfo or WifiCallbackInfo
            // should be used to refresh the tile.
            if (mLastTileState == LAST_STATE_CELLULAR) {
                handleUpdateCellularState(state, mSignalCallback.mCellularInfo);
                CellularCallbackInfo cellularInfo = new CellularCallbackInfo();
                synchronized (mSignalCallback.mCellularInfo) {
                    mSignalCallback.mCellularInfo.copyTo(cellularInfo);
                }
                handleUpdateCellularState(state, cellularInfo);
            } else if (mLastTileState == LAST_STATE_WIFI) {
                handleUpdateWifiState(state, mSignalCallback.mWifiInfo);
                WifiCallbackInfo mifiInfo = new WifiCallbackInfo();
                synchronized (mSignalCallback.mWifiInfo) {
                    mSignalCallback.mWifiInfo.copyTo(mifiInfo);
                }
                handleUpdateCellularState(state, mifiInfo);
            } else if (mLastTileState == LAST_STATE_ETHERNET) {
                handleUpdateEthernetState(state, mSignalCallback.mEthernetInfo);
                EthernetCallbackInfo ethernetInfo = new EthernetCallbackInfo();
                synchronized (mSignalCallback.mEthernetInfo) {
                    mSignalCallback.mEthernetInfo.copyTo(ethernetInfo);
                }
                handleUpdateCellularState(state, ethernetInfo);
            }
        }
    }