diff options
4 files changed, 188 insertions, 3 deletions
diff --git a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java index b8030f166436..4c7b898a4fb5 100644 --- a/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java +++ b/packages/SettingsLib/src/com/android/settingslib/mobile/MobileStatusTracker.java @@ -259,7 +259,12 @@ public class MobileStatusTracker { .append("carrierNetworkChangeMode=").append(carrierNetworkChangeMode).append(',') .append("dataState=").append(dataState).append(',') .append("serviceState=").append(serviceState == null ? "" - : serviceState.toString()).append(',') + : "mVoiceRegState=" + serviceState.getState() + "(" + + ServiceState.rilServiceStateToString(serviceState.getState()) + + ")" + ", mDataRegState=" + serviceState.getDataRegState() + "(" + + ServiceState.rilServiceStateToString( + serviceState.getDataRegState()) + ")") + .append(',') .append("signalStrength=").append(signalStrength == null ? "" : signalStrength.toString()).append(',') .append("telephonyDisplayInfo=").append(telephonyDisplayInfo == null ? "" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index 08a4492fc15d..ccaa1f480683 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -25,6 +25,8 @@ import com.android.systemui.statusbar.policy.NetworkController.EmergencyListener import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; +import java.io.PrintWriter; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.List; @@ -42,11 +44,18 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa private static final int MSG_MOBILE_DATA_ENABLED_CHANGED = 5; private static final int MSG_ADD_REMOVE_EMERGENCY = 6; private static final int MSG_ADD_REMOVE_SIGNAL = 7; + private static final int HISTORY_SIZE = 64; + private static final SimpleDateFormat SSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); // All the callbacks. private final ArrayList<EmergencyListener> mEmergencyListeners = new ArrayList<>(); private final ArrayList<SignalCallback> mSignalCallbacks = new ArrayList<>(); + // Save the previous HISTORY_SIZE states for logging. + private final String[] mHistory = new String[HISTORY_SIZE]; + // Where to copy the next state into. + private int mHistoryIndex; + public CallbackHandler() { super(Looper.getMainLooper()); } @@ -111,12 +120,27 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa public void setWifiIndicators(final boolean enabled, final IconState statusIcon, final IconState qsIcon, final boolean activityIn, final boolean activityOut, final String description, boolean isTransient, String secondaryLabel) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setWifiIndicators: ") + .append("enabled=").append(enabled).append(",") + .append("statusIcon=").append(statusIcon).append(",") + .append("qsIcon=").append(qsIcon).append(",") + .append("activityIn=").append(activityIn).append(",") + .append("activityOut=").append(activityOut).append(",") + .append("description=").append(description).append(",") + .append("isTransient=").append(isTransient).append(",") + .append("secondaryLabel=").append(secondaryLabel) + .toString(); + recordLastCallback(log); post(() -> { for (SignalCallback callback : mSignalCallbacks) { callback.setWifiIndicators(enabled, statusIcon, qsIcon, activityIn, activityOut, description, isTransient, secondaryLabel); } }); + + } @Override @@ -125,6 +149,25 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa final boolean activityOut, final CharSequence typeContentDescription, CharSequence typeContentDescriptionHtml, final CharSequence description, final boolean isWide, final int subId, boolean roaming, boolean showTriangle) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setMobileDataIndicators: ") + .append("statusIcon=").append(statusIcon).append(",") + .append("qsIcon=").append(qsIcon).append(",") + .append("statusType=").append(statusType).append(",") + .append("qsType=").append(qsType).append(",") + .append("activityIn=").append(activityIn).append(",") + .append("activityOut=").append(activityOut).append(",") + .append("typeContentDescription=").append(typeContentDescription).append(",") + .append("typeContentDescriptionHtml=").append(typeContentDescriptionHtml) + .append(",") + .append("description=").append(description).append(",") + .append("isWide=").append(isWide).append(",") + .append("subId=").append(subId).append(",") + .append("roaming=").append(roaming).append(",") + .append("showTriangle=").append(showTriangle) + .toString(); + recordLastCallback(log); post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setMobileDataIndicators(statusIcon, qsIcon, statusType, qsType, @@ -138,6 +181,14 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork, boolean noNetworksAvailable) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setConnectivityStatus: ") + .append("noDefaultNetwork=").append(noDefaultNetwork).append(",") + .append("noValidatedNetwork=").append(noValidatedNetwork).append(",") + .append("noNetworksAvailable=").append(noNetworksAvailable) + .toString(); + recordLastCallback(log); post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setConnectivityStatus( @@ -148,6 +199,13 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setNoCallingStatus(boolean noCalling, int subId) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setNoCallingStatus: ") + .append("noCalling=").append(noCalling).append(",") + .append("subId=").append(subId) + .toString(); + recordLastCallback(log); post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setNoCallingStatus(noCalling, subId); @@ -157,16 +215,35 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setSubs(List<SubscriptionInfo> subs) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setSubs: ") + .append("subs=").append(subs == null ? "" : subs.toString()) + .toString(); + recordLastCallback(log); obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget(); } @Override public void setNoSims(boolean show, boolean simDetected) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setNoSims: ") + .append("show=").append(show).append(",") + .append("simDetected=").append(simDetected) + .toString(); + recordLastCallback(log); obtainMessage(MSG_NO_SIM_VISIBLE_CHANGED, show ? 1 : 0, simDetected ? 1 : 0).sendToTarget(); } @Override public void setMobileDataEnabled(boolean enabled) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setMobileDataEnabled: ") + .append("enabled=").append(enabled) + .toString(); + recordLastCallback(log); obtainMessage(MSG_MOBILE_DATA_ENABLED_CHANGED, enabled ? 1 : 0, 0).sendToTarget(); } @@ -177,11 +254,23 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setEthernetIndicators(IconState icon) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setEthernetIndicators: ") + .append("icon=").append(icon) + .toString(); + recordLastCallback(log); obtainMessage(MSG_ETHERNET_CHANGED, icon).sendToTarget();; } @Override public void setIsAirplaneMode(IconState icon) { + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("setIsAirplaneMode: ") + .append("icon=").append(icon) + .toString(); + recordLastCallback(log); obtainMessage(MSG_AIRPLANE_MODE_CHANGED, icon).sendToTarget();; } @@ -193,4 +282,25 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa obtainMessage(MSG_ADD_REMOVE_SIGNAL, listening ? 1 : 0, 0, listener).sendToTarget(); } + protected void recordLastCallback(String callback) { + mHistory[mHistoryIndex++ & (HISTORY_SIZE - 1)] = callback; + } + + /** + * Dump the Callback logs + */ + public void dump(PrintWriter pw) { + pw.println(" - CallbackHandler -----"); + int size = 0; + for (int i = 0; i < HISTORY_SIZE; i++) { + if (mHistory[i] != null) size++; + } + // Print out the previous states in ordered number. + for (int i = mHistoryIndex + HISTORY_SIZE - 1; + i >= mHistoryIndex + HISTORY_SIZE - size; i--) { + pw.println(" Previous Callback(" + (mHistoryIndex + HISTORY_SIZE - i) + "): " + + mHistory[i & (HISTORY_SIZE - 1)]); + } + } + } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java index 39472ded4a3f..888507b0794c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/MobileSignalController.java @@ -46,6 +46,7 @@ import com.android.settingslib.Utils; import com.android.settingslib.graph.SignalDrawable; import com.android.settingslib.mobile.MobileMappings.Config; import com.android.settingslib.mobile.MobileStatusTracker; +import com.android.settingslib.mobile.MobileStatusTracker.MobileStatus; import com.android.settingslib.mobile.MobileStatusTracker.SubscriptionDefaults; import com.android.settingslib.mobile.TelephonyIcons; import com.android.settingslib.net.SignalStrengthUtil; @@ -54,6 +55,7 @@ import com.android.systemui.statusbar.policy.NetworkController.IconState; import com.android.systemui.statusbar.policy.NetworkController.SignalCallback; import java.io.PrintWriter; +import java.text.SimpleDateFormat; import java.util.BitSet; import java.util.List; import java.util.Map; @@ -62,6 +64,8 @@ import java.util.Map; * Monitors the mobile signal changes and update the SysUI icons. */ public class MobileSignalController extends SignalController<MobileState, MobileIconGroup> { + private static final SimpleDateFormat SSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); + private final TelephonyManager mPhone; private final SubscriptionDefaults mDefaults; private final String mNetworkNameDefault; @@ -90,6 +94,11 @@ public class MobileSignalController extends SignalController<MobileState, Mobile @VisibleForTesting MobileStatusTracker mMobileStatusTracker; + // Save the previous HISTORY_SIZE states for logging. + private final String[] mMobileStatusHistory = new String[HISTORY_SIZE]; + // Where to copy the next state into. + private int mMobileStatusHistoryIndex; + // TODO: Reduce number of vars passed in, if we have the NetworkController, probably don't // need listener lists anymore. public MobileSignalController(Context context, Config config, boolean hasMobileData, @@ -126,12 +135,17 @@ public class MobileSignalController extends SignalController<MobileState, Mobile mCallback = new MobileStatusTracker.Callback() { @Override public void onMobileStatusChanged(boolean updateTelephony, - MobileStatusTracker.MobileStatus mobileStatus) { + MobileStatus mobileStatus) { if (Log.isLoggable(mTag, Log.DEBUG)) { Log.d(mTag, "onMobileStatusChanged=" + " updateTelephony=" + updateTelephony + " mobileStatus=" + mobileStatus.toString()); } + String status = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append(mobileStatus.toString()) + .toString(); + recordLastMobileStatus(status); updateMobileStatus(mobileStatus); if (updateTelephony) { updateTelephony(); @@ -455,7 +469,7 @@ public class MobileSignalController extends SignalController<MobileState, Mobile return CellSignalStrength.SIGNAL_STRENGTH_NONE_OR_UNKNOWN; } - private void updateMobileStatus(MobileStatusTracker.MobileStatus mobileStatus) { + private void updateMobileStatus(MobileStatus mobileStatus) { mCurrentState.activityIn = mobileStatus.activityIn; mCurrentState.activityOut = mobileStatus.activityOut; mCurrentState.dataSim = mobileStatus.dataSim; @@ -570,6 +584,10 @@ public class MobileSignalController extends SignalController<MobileState, Mobile notifyListenersIfNecessary(); } + private void recordLastMobileStatus(String mobileStatus) { + mMobileStatusHistory[mMobileStatusHistoryIndex++ & (HISTORY_SIZE - 1)] = mobileStatus; + } + @Override public void dump(PrintWriter pw) { super.dump(pw); @@ -580,5 +598,17 @@ public class MobileSignalController extends SignalController<MobileState, Mobile pw.println(" mDataState=" + mDataState + ","); pw.println(" mInflateSignalStrengths=" + mInflateSignalStrengths + ","); pw.println(" isDataDisabled=" + isDataDisabled() + ","); + pw.println(" MobileStatusHistory"); + int size = 0; + for (int i = 0; i < HISTORY_SIZE; i++) { + if (mMobileStatusHistory[i] != null) size++; + } + // Print out the previous states in ordered number. + for (int i = mMobileStatusHistoryIndex + HISTORY_SIZE - 1; + i >= mMobileStatusHistoryIndex + HISTORY_SIZE - size; i--) { + pw.println(" Previous MobileStatus(" + + (mMobileStatusHistoryIndex + HISTORY_SIZE - i) + "): " + + mMobileStatusHistory[i & (HISTORY_SIZE - 1)]); + } } } 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 e13e30b74c3c..54f35dfff59f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkControllerImpl.java @@ -76,6 +76,7 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP import java.io.FileDescriptor; import java.io.PrintWriter; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.BitSet; import java.util.Collections; @@ -100,6 +101,8 @@ public class NetworkControllerImpl extends BroadcastReceiver private static final int EMERGENCY_VOICE_CONTROLLER = 200; private static final int EMERGENCY_NO_SUB = 300; private static final int EMERGENCY_ASSUMED_VOICE_CONTROLLER = 400; + private static final int HISTORY_SIZE = 16; + private static final SimpleDateFormat SSDF = new SimpleDateFormat("MM-dd HH:mm:ss.SSS"); private final Context mContext; private final TelephonyManager mPhone; @@ -150,6 +153,11 @@ public class NetworkControllerImpl extends BroadcastReceiver // This list holds our ordering. private List<SubscriptionInfo> mCurrentSubscriptions = new ArrayList<>(); + // Save the previous HISTORY_SIZE states for logging. + private final String[] mHistory = new String[HISTORY_SIZE]; + // Where to copy the next state into. + private int mHistoryIndex; + @VisibleForTesting boolean mListening; @@ -307,6 +315,12 @@ public class NetworkControllerImpl extends BroadcastReceiver public void onLost(Network network) { mLastNetwork = null; mLastNetworkCapabilities = null; + String callback = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("onLost: ") + .append("network=").append(network) + .toString(); + recordLastNetworkCallback(callback); updateConnectivity(); } @@ -327,6 +341,13 @@ public class NetworkControllerImpl extends BroadcastReceiver } mLastNetwork = network; mLastNetworkCapabilities = networkCapabilities; + String callback = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append("onCapabilitiesChanged: ") + .append("network=").append(network).append(",") + .append("networkCapabilities=").append(networkCapabilities) + .toString(); + recordLastNetworkCallback(callback); updateConnectivity(); } }; @@ -996,6 +1017,19 @@ public class NetworkControllerImpl extends BroadcastReceiver pw.print(" mEmergencySource="); pw.println(emergencyToString(mEmergencySource)); + pw.println(" - DefaultNetworkCallback -----"); + int size = 0; + for (int i = 0; i < HISTORY_SIZE; i++) { + if (mHistory[i] != null) { + size++; + } + } + for (int i = mHistoryIndex + HISTORY_SIZE - 1; + i >= mHistoryIndex + HISTORY_SIZE - size; i--) { + pw.println(" Previous NetworkCallback(" + (mHistoryIndex + HISTORY_SIZE - i) + "): " + + mHistory[i & (HISTORY_SIZE - 1)]); + } + pw.println(" - config ------"); for (int i = 0; i < mMobileSignalControllers.size(); i++) { MobileSignalController mobileSignalController = mMobileSignalControllers.valueAt(i); @@ -1006,6 +1040,8 @@ public class NetworkControllerImpl extends BroadcastReceiver mEthernetSignalController.dump(pw); mAccessPoints.dump(pw); + + mCallbackHandler.dump(pw); } private static final String emergencyToString(int emergencySource) { @@ -1235,6 +1271,10 @@ public class NetworkControllerImpl extends BroadcastReceiver return s; } + private void recordLastNetworkCallback(String callback) { + mHistory[mHistoryIndex++ & (HISTORY_SIZE - 1)] = callback; + } + private SubscriptionInfo addSignalController(int id, int simSlotIndex) { SubscriptionInfo info = new SubscriptionInfo(id, "", simSlotIndex, "", "", 0, 0, "", 0, null, null, null, "", false, null, null); |