summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorXiangyu/Malcolm Chen <refuhoo@google.com>2020-03-13 23:51:57 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2020-03-13 23:51:57 +0000
commitc67dbaa94c9599a18a27d0e65d2b42e969fdde9c (patch)
tree9a67e5ccf7b32a4071e84d3e6d913ced1c6c31e7
parent127fd8d6e84ebe68bb1ebe58f1eb007e00cddb57 (diff)
parent10409ddcde8291a3d9a03f3091434920e9a21c17 (diff)
Merge "Smoother signal bar transition during CBRS data switching"
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
index c08726de9b66..e3d8ea2f9048 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java
@@ -17,6 +17,7 @@
package com.android.systemui.statusbar.policy;
import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
+import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_IN;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_INOUT;
import static android.net.wifi.WifiManager.TrafficStateCallback.DATA_ACTIVITY_NONE;
@@ -160,6 +161,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
ServiceState mLastServiceState;
private boolean mUserSetup;
private boolean mSimDetected;
+ private boolean mForceCellularValidated;
/**
* Construct this controller object and register for updates.
@@ -275,12 +277,41 @@ public class NetworkControllerImpl extends BroadcastReceiver
mPhoneStateListener = new PhoneStateListener(bgLooper) {
@Override
public void onActiveDataSubscriptionIdChanged(int subId) {
+ // For data switching from A to B, we assume B is validated for up to 2 seconds iff:
+ // 1) A and B are in the same subscription group e.g. CBRS data switch. And
+ // 2) A was validated before the switch.
+ // This is to provide smooth transition for UI without showing cross during data
+ // switch.
+ if (keepCellularValidationBitInSwitch(mActiveMobileDataSubscription, subId)) {
+ if (DEBUG) Log.d(TAG, ": mForceCellularValidated to true.");
+ mForceCellularValidated = true;
+ mReceiverHandler.removeCallbacks(mClearForceValidated);
+ mReceiverHandler.postDelayed(mClearForceValidated, 2000);
+ }
mActiveMobileDataSubscription = subId;
doUpdateMobileControllers();
}
};
}
+ private final Runnable mClearForceValidated = () -> {
+ if (DEBUG) Log.d(TAG, ": mClearForceValidated");
+ mForceCellularValidated = false;
+ updateConnectivity();
+ };
+
+ boolean isInGroupDataSwitch(int subId1, int subId2) {
+ SubscriptionInfo info1 = mSubscriptionManager.getActiveSubscriptionInfo(subId1);
+ SubscriptionInfo info2 = mSubscriptionManager.getActiveSubscriptionInfo(subId2);
+ return (info1 != null && info2 != null && info1.getGroupUuid() != null
+ && info1.getGroupUuid().equals(info2.getGroupUuid()));
+ }
+
+ boolean keepCellularValidationBitInSwitch(int sourceSubId, int destSubId) {
+ return mValidatedTransports.get(TRANSPORT_CELLULAR)
+ && isInGroupDataSwitch(sourceSubId, destSubId);
+ }
+
public DataSaverController getDataSaverController() {
return mDataSaverController;
}
@@ -794,6 +825,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
}
}
+ if (mForceCellularValidated) mValidatedTransports.set(TRANSPORT_CELLULAR);
+
if (CHATTY) {
Log.d(TAG, "updateConnectivity: mConnectedTransports=" + mConnectedTransports);
Log.d(TAG, "updateConnectivity: mValidatedTransports=" + mValidatedTransports);