[DO NOT MERGE] Add synchronization for refreshing InternetTile with cached states am: 4f14e3e11b
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21990198 Change-Id: Ic5b1e91ec90f7d09a70aaffe5836605c32d4fd5f Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -35,6 +35,7 @@ import android.widget.Switch;
|
|||||||
|
|
||||||
import androidx.annotation.Nullable;
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.GuardedBy;
|
||||||
import com.android.internal.logging.MetricsLogger;
|
import com.android.internal.logging.MetricsLogger;
|
||||||
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
|
||||||
import com.android.settingslib.graph.SignalDrawable;
|
import com.android.settingslib.graph.SignalDrawable;
|
||||||
@@ -71,12 +72,16 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
public static final String TILE_SPEC = "internet";
|
public static final String TILE_SPEC = "internet";
|
||||||
|
|
||||||
private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS);
|
private static final Intent WIFI_SETTINGS = new Intent(Settings.ACTION_WIFI_SETTINGS);
|
||||||
|
private static final int LAST_STATE_UNKNOWN = -1;
|
||||||
|
private static final int LAST_STATE_CELLULAR = 0;
|
||||||
|
private static final int LAST_STATE_WIFI = 1;
|
||||||
|
private static final int LAST_STATE_ETHERNET = 2;
|
||||||
|
|
||||||
protected final NetworkController mController;
|
protected final NetworkController mController;
|
||||||
private final AccessPointController mAccessPointController;
|
private final AccessPointController mAccessPointController;
|
||||||
private final DataUsageController mDataController;
|
private final DataUsageController mDataController;
|
||||||
// The last updated tile state, 0: mobile, 1: wifi, 2: ethernet.
|
// The last updated tile state, 0: mobile, 1: wifi, 2: ethernet.
|
||||||
private int mLastTileState = -1;
|
private int mLastTileState = LAST_STATE_UNKNOWN;
|
||||||
|
|
||||||
protected final InternetSignalCallback mSignalCallback = new InternetSignalCallback();
|
protected final InternetSignalCallback mSignalCallback = new InternetSignalCallback();
|
||||||
private final InternetDialogFactory mInternetDialogFactory;
|
private final InternetDialogFactory mInternetDialogFactory;
|
||||||
@@ -170,6 +175,15 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
@Nullable
|
@Nullable
|
||||||
String mEthernetContentDescription;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new StringBuilder("EthernetCallbackInfo[")
|
return new StringBuilder("EthernetCallbackInfo[")
|
||||||
@@ -196,6 +210,23 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
boolean mNoValidatedNetwork;
|
boolean mNoValidatedNetwork;
|
||||||
boolean mNoNetworksAvailable;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new StringBuilder("WifiCallbackInfo[")
|
return new StringBuilder("WifiCallbackInfo[")
|
||||||
@@ -228,6 +259,23 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
boolean mNoValidatedNetwork;
|
boolean mNoValidatedNetwork;
|
||||||
boolean mNoNetworksAvailable;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return new StringBuilder("CellularCallbackInfo[")
|
return new StringBuilder("CellularCallbackInfo[")
|
||||||
@@ -247,8 +295,11 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected final class InternetSignalCallback implements SignalCallback {
|
protected final class InternetSignalCallback implements SignalCallback {
|
||||||
|
@GuardedBy("mWifiInfo")
|
||||||
final WifiCallbackInfo mWifiInfo = new WifiCallbackInfo();
|
final WifiCallbackInfo mWifiInfo = new WifiCallbackInfo();
|
||||||
|
@GuardedBy("mCellularInfo")
|
||||||
final CellularCallbackInfo mCellularInfo = new CellularCallbackInfo();
|
final CellularCallbackInfo mCellularInfo = new CellularCallbackInfo();
|
||||||
|
@GuardedBy("mEthernetInfo")
|
||||||
final EthernetCallbackInfo mEthernetInfo = new EthernetCallbackInfo();
|
final EthernetCallbackInfo mEthernetInfo = new EthernetCallbackInfo();
|
||||||
|
|
||||||
|
|
||||||
@@ -257,6 +308,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
if (DEBUG) {
|
if (DEBUG) {
|
||||||
Log.d(TAG, "setWifiIndicators: " + indicators);
|
Log.d(TAG, "setWifiIndicators: " + indicators);
|
||||||
}
|
}
|
||||||
|
synchronized (mWifiInfo) {
|
||||||
mWifiInfo.mEnabled = indicators.enabled;
|
mWifiInfo.mEnabled = indicators.enabled;
|
||||||
mWifiInfo.mSsid = indicators.description;
|
mWifiInfo.mSsid = indicators.description;
|
||||||
mWifiInfo.mIsTransient = indicators.isTransient;
|
mWifiInfo.mIsTransient = indicators.isTransient;
|
||||||
@@ -265,13 +317,16 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
mWifiInfo.mConnected = indicators.qsIcon.visible;
|
mWifiInfo.mConnected = indicators.qsIcon.visible;
|
||||||
mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon;
|
mWifiInfo.mWifiSignalIconId = indicators.qsIcon.icon;
|
||||||
mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription;
|
mWifiInfo.mWifiSignalContentDescription = indicators.qsIcon.contentDescription;
|
||||||
refreshState(mWifiInfo);
|
|
||||||
} else {
|
} else {
|
||||||
mWifiInfo.mConnected = false;
|
mWifiInfo.mConnected = false;
|
||||||
mWifiInfo.mWifiSignalIconId = 0;
|
mWifiInfo.mWifiSignalIconId = 0;
|
||||||
mWifiInfo.mWifiSignalContentDescription = null;
|
mWifiInfo.mWifiSignalContentDescription = null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (indicators.qsIcon != null) {
|
||||||
|
refreshState(mWifiInfo);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
public void setMobileDataIndicators(@NonNull MobileDataIndicators indicators) {
|
||||||
@@ -282,6 +337,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
// Not data sim, don't display.
|
// Not data sim, don't display.
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
synchronized (mCellularInfo) {
|
||||||
mCellularInfo.mDataSubscriptionName = indicators.qsDescription == null
|
mCellularInfo.mDataSubscriptionName = indicators.qsDescription == null
|
||||||
? mController.getMobileDataNetworkName() : indicators.qsDescription;
|
? mController.getMobileDataNetworkName() : indicators.qsDescription;
|
||||||
mCellularInfo.mDataContentDescription = indicators.qsDescription != null
|
mCellularInfo.mDataContentDescription = indicators.qsDescription != null
|
||||||
@@ -290,6 +346,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
mCellularInfo.mQsTypeIcon = indicators.qsType;
|
mCellularInfo.mQsTypeIcon = indicators.qsType;
|
||||||
mCellularInfo.mRoaming = indicators.roaming;
|
mCellularInfo.mRoaming = indicators.roaming;
|
||||||
mCellularInfo.mMultipleSubs = mController.getNumberSubscriptions() > 1;
|
mCellularInfo.mMultipleSubs = mController.getNumberSubscriptions() > 1;
|
||||||
|
}
|
||||||
refreshState(mCellularInfo);
|
refreshState(mCellularInfo);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -299,9 +356,11 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
Log.d(TAG, "setEthernetIndicators: "
|
Log.d(TAG, "setEthernetIndicators: "
|
||||||
+ "icon = " + (icon == null ? "" : icon.toString()));
|
+ "icon = " + (icon == null ? "" : icon.toString()));
|
||||||
}
|
}
|
||||||
|
synchronized (mEthernetInfo) {
|
||||||
mEthernetInfo.mConnected = icon.visible;
|
mEthernetInfo.mConnected = icon.visible;
|
||||||
mEthernetInfo.mEthernetSignalIconId = icon.icon;
|
mEthernetInfo.mEthernetSignalIconId = icon.icon;
|
||||||
mEthernetInfo.mEthernetContentDescription = icon.contentDescription;
|
mEthernetInfo.mEthernetContentDescription = icon.contentDescription;
|
||||||
|
}
|
||||||
if (icon.visible) {
|
if (icon.visible) {
|
||||||
refreshState(mEthernetInfo);
|
refreshState(mEthernetInfo);
|
||||||
}
|
}
|
||||||
@@ -314,6 +373,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
+ "show = " + show + ","
|
+ "show = " + show + ","
|
||||||
+ "simDetected = " + simDetected);
|
+ "simDetected = " + simDetected);
|
||||||
}
|
}
|
||||||
|
synchronized (mCellularInfo) {
|
||||||
mCellularInfo.mNoSim = show;
|
mCellularInfo.mNoSim = show;
|
||||||
if (mCellularInfo.mNoSim) {
|
if (mCellularInfo.mNoSim) {
|
||||||
// Make sure signal gets cleared out when no sims.
|
// Make sure signal gets cleared out when no sims.
|
||||||
@@ -321,6 +381,7 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
mCellularInfo.mQsTypeIcon = 0;
|
mCellularInfo.mQsTypeIcon = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setIsAirplaneMode(IconState icon) {
|
public void setIsAirplaneMode(IconState icon) {
|
||||||
@@ -331,8 +392,12 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
if (mCellularInfo.mAirplaneModeEnabled == icon.visible) {
|
if (mCellularInfo.mAirplaneModeEnabled == icon.visible) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
synchronized (mCellularInfo) {
|
||||||
mCellularInfo.mAirplaneModeEnabled = icon.visible;
|
mCellularInfo.mAirplaneModeEnabled = icon.visible;
|
||||||
|
}
|
||||||
|
synchronized (mWifiInfo) {
|
||||||
mWifiInfo.mAirplaneModeEnabled = icon.visible;
|
mWifiInfo.mAirplaneModeEnabled = icon.visible;
|
||||||
|
}
|
||||||
if (!mSignalCallback.mEthernetInfo.mConnected) {
|
if (!mSignalCallback.mEthernetInfo.mConnected) {
|
||||||
// Always use mWifiInfo to refresh the Internet Tile if airplane mode is enabled,
|
// Always use mWifiInfo to refresh the Internet Tile if airplane mode is enabled,
|
||||||
// because Internet Tile will show different information depending on whether WiFi
|
// because Internet Tile will show different information depending on whether WiFi
|
||||||
@@ -359,12 +424,16 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
+ "noValidatedNetwork = " + noValidatedNetwork + ","
|
+ "noValidatedNetwork = " + noValidatedNetwork + ","
|
||||||
+ "noNetworksAvailable = " + noNetworksAvailable);
|
+ "noNetworksAvailable = " + noNetworksAvailable);
|
||||||
}
|
}
|
||||||
|
synchronized (mCellularInfo) {
|
||||||
mCellularInfo.mNoDefaultNetwork = noDefaultNetwork;
|
mCellularInfo.mNoDefaultNetwork = noDefaultNetwork;
|
||||||
mCellularInfo.mNoValidatedNetwork = noValidatedNetwork;
|
mCellularInfo.mNoValidatedNetwork = noValidatedNetwork;
|
||||||
mCellularInfo.mNoNetworksAvailable = noNetworksAvailable;
|
mCellularInfo.mNoNetworksAvailable = noNetworksAvailable;
|
||||||
|
}
|
||||||
|
synchronized (mWifiInfo) {
|
||||||
mWifiInfo.mNoDefaultNetwork = noDefaultNetwork;
|
mWifiInfo.mNoDefaultNetwork = noDefaultNetwork;
|
||||||
mWifiInfo.mNoValidatedNetwork = noValidatedNetwork;
|
mWifiInfo.mNoValidatedNetwork = noValidatedNetwork;
|
||||||
mWifiInfo.mNoNetworksAvailable = noNetworksAvailable;
|
mWifiInfo.mNoNetworksAvailable = noNetworksAvailable;
|
||||||
|
}
|
||||||
if (!noDefaultNetwork) {
|
if (!noDefaultNetwork) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
@@ -386,24 +455,36 @@ public class InternetTile extends QSTileImpl<SignalState> {
|
|||||||
mQSLogger.logInternetTileUpdate(
|
mQSLogger.logInternetTileUpdate(
|
||||||
getTileSpec(), mLastTileState, arg == null ? "null" : arg.toString());
|
getTileSpec(), mLastTileState, arg == null ? "null" : arg.toString());
|
||||||
if (arg instanceof CellularCallbackInfo) {
|
if (arg instanceof CellularCallbackInfo) {
|
||||||
mLastTileState = 0;
|
mLastTileState = LAST_STATE_CELLULAR;
|
||||||
handleUpdateCellularState(state, arg);
|
handleUpdateCellularState(state, arg);
|
||||||
} else if (arg instanceof WifiCallbackInfo) {
|
} else if (arg instanceof WifiCallbackInfo) {
|
||||||
mLastTileState = 1;
|
mLastTileState = LAST_STATE_WIFI;
|
||||||
handleUpdateWifiState(state, arg);
|
handleUpdateWifiState(state, arg);
|
||||||
} else if (arg instanceof EthernetCallbackInfo) {
|
} else if (arg instanceof EthernetCallbackInfo) {
|
||||||
mLastTileState = 2;
|
mLastTileState = LAST_STATE_ETHERNET;
|
||||||
handleUpdateEthernetState(state, arg);
|
handleUpdateEthernetState(state, arg);
|
||||||
} else {
|
} else {
|
||||||
// handleUpdateState will be triggered when user expands the QuickSetting panel with
|
// handleUpdateState will be triggered when user expands the QuickSetting panel with
|
||||||
// arg = null, in this case the last updated CellularCallbackInfo or WifiCallbackInfo
|
// arg = null, in this case the last updated CellularCallbackInfo or WifiCallbackInfo
|
||||||
// should be used to refresh the tile.
|
// should be used to refresh the tile.
|
||||||
if (mLastTileState == 0) {
|
if (mLastTileState == LAST_STATE_CELLULAR) {
|
||||||
handleUpdateCellularState(state, mSignalCallback.mCellularInfo);
|
CellularCallbackInfo cellularInfo = new CellularCallbackInfo();
|
||||||
} else if (mLastTileState == 1) {
|
synchronized (mSignalCallback.mCellularInfo) {
|
||||||
handleUpdateWifiState(state, mSignalCallback.mWifiInfo);
|
mSignalCallback.mCellularInfo.copyTo(cellularInfo);
|
||||||
} else if (mLastTileState == 2) {
|
}
|
||||||
handleUpdateEthernetState(state, mSignalCallback.mEthernetInfo);
|
handleUpdateCellularState(state, cellularInfo);
|
||||||
|
} else if (mLastTileState == LAST_STATE_WIFI) {
|
||||||
|
WifiCallbackInfo mifiInfo = new WifiCallbackInfo();
|
||||||
|
synchronized (mSignalCallback.mWifiInfo) {
|
||||||
|
mSignalCallback.mWifiInfo.copyTo(mifiInfo);
|
||||||
|
}
|
||||||
|
handleUpdateCellularState(state, mifiInfo);
|
||||||
|
} else if (mLastTileState == LAST_STATE_ETHERNET) {
|
||||||
|
EthernetCallbackInfo ethernetInfo = new EthernetCallbackInfo();
|
||||||
|
synchronized (mSignalCallback.mEthernetInfo) {
|
||||||
|
mSignalCallback.mEthernetInfo.copyTo(ethernetInfo);
|
||||||
|
}
|
||||||
|
handleUpdateCellularState(state, ethernetInfo);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user