summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Evan Laird <evanlaird@google.com> 2024-04-23 17:06:40 -0400
committer Evan Laird <evanlaird@google.com> 2024-04-23 17:16:10 -0400
commit28aa27c52228842c679bc71a0fdef09c1d377fa5 (patch)
treea9e831c9d67602def35e1b16fdf540eed2e23b22
parent0fc10250a25b1747746410720e267c0b3ad0c63b (diff)
[Sb] Don't add NetworkControllerImpl as a demo mode callback
This class is already unused in the display of networking icons in the status bar and quick settings. Furthermore, there is an infinite loop bug that gets triggered if using `-e slot N`, where N > 1, in a demo command. Until we can fully remove the class, we can just remove it as a demo mode listener. Test: manual via demo mode Test: adb shell -n dumpsys activity service com.android.systemui/.dump.SystemUIAuxiliaryDumpService and check for NetworkControllerImpl as a listener Bug: 336357360 Flag: NONE Change-Id: I743fb7555e04738e8da51951fb3cf7ec75bf6cb3
-rw-r--r--packages/SystemUI/src/com/android/systemui/demomode/DemoMode.java9
-rw-r--r--packages/SystemUI/src/com/android/systemui/demomode/DemoModeController.kt22
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java14
3 files changed, 29 insertions, 16 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/demomode/DemoMode.java b/packages/SystemUI/src/com/android/systemui/demomode/DemoMode.java
index 672ade2655a3..30211843ad63 100644
--- a/packages/SystemUI/src/com/android/systemui/demomode/DemoMode.java
+++ b/packages/SystemUI/src/com/android/systemui/demomode/DemoMode.java
@@ -37,6 +37,15 @@ public interface DemoMode extends DemoModeCommandReceiver {
return NO_COMMANDS;
}
+ /** Something simple enough to be recognizable in dumpsys logs */
+ default String logName() {
+ if (this.getClass().isAnonymousClass()) {
+ return getClass().getName();
+ } else {
+ return getClass().getSimpleName();
+ }
+ }
+
String ACTION_DEMO = "com.android.systemui.demo";
String EXTRA_COMMAND = "command";
diff --git a/packages/SystemUI/src/com/android/systemui/demomode/DemoModeController.kt b/packages/SystemUI/src/com/android/systemui/demomode/DemoModeController.kt
index 45ff963c2a9f..f03aa63a7abb 100644
--- a/packages/SystemUI/src/com/android/systemui/demomode/DemoModeController.kt
+++ b/packages/SystemUI/src/com/android/systemui/demomode/DemoModeController.kt
@@ -25,12 +25,12 @@ import android.os.UserHandle
import android.util.Log
import com.android.systemui.Dumpable
import com.android.systemui.broadcast.BroadcastDispatcher
-import com.android.systemui.common.coroutine.ConflatedCallbackFlow.conflatedCallbackFlow
import com.android.systemui.demomode.DemoMode.ACTION_DEMO
import com.android.systemui.dump.DumpManager
import com.android.systemui.statusbar.policy.CallbackController
import com.android.systemui.util.Assert
import com.android.systemui.util.settings.GlobalSettings
+import com.android.systemui.utils.coroutines.flow.conflatedCallbackFlow
import java.io.PrintWriter
import kotlinx.coroutines.channels.awaitClose
import kotlinx.coroutines.flow.Flow
@@ -209,20 +209,18 @@ constructor(
pw.println("DemoModeController state -")
pw.println(" isInDemoMode=$isInDemoMode")
pw.println(" isDemoModeAllowed=$isAvailable")
- pw.print(" receivers=[")
- val copy: List<DemoModeCommandReceiver>
+ val copy: List<DemoMode>
synchronized(this) { copy = receivers.toList() }
- copy.forEach { recv -> pw.print(" ${recv.javaClass.simpleName}") }
- pw.println(" ]")
+
+ // List of all receivers
+ pw.println(" receivers=[${copy.joinToString(", ") { it.logName() }}]")
+
+ // Print out the map of COMMAND -> list of receivers for that command
pw.println(" receiverMap= [")
- receiverMap.keys.forEach { command ->
- pw.print(" $command : [")
- val recvs =
- receiverMap[command]!!
- .map { receiver -> receiver.javaClass.simpleName }
- .joinToString(",")
- pw.println("$recvs ]")
+ receiverMap.entries.forEach { (comm, recv) ->
+ pw.println(" $comm : [${recv.joinToString(", ") {it.logName()}}]")
}
+ pw.println(" ]")
}
private val tracker =
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
index 724b19c891aa..e3c47a43aad4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/connectivity/NetworkControllerImpl.java
@@ -83,6 +83,10 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP
import com.android.systemui.telephony.TelephonyListenerManager;
import com.android.systemui.util.CarrierConfigTracker;
+import dalvik.annotation.optimization.NeverCompile;
+
+import kotlin.Unit;
+
import java.io.PrintWriter;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
@@ -97,9 +101,6 @@ import java.util.stream.Collectors;
import javax.inject.Inject;
-import dalvik.annotation.optimization.NeverCompile;
-import kotlin.Unit;
-
/** Platform implementation of the network controller. **/
@SysUISingleton
public class NetworkControllerImpl extends BroadcastReceiver
@@ -464,7 +465,10 @@ public class NetworkControllerImpl extends BroadcastReceiver
});
};
- mDemoModeController.addCallback(this);
+ // TODO(b/336357360): Until we can remove this class entirely, disable its handling of ALL
+ // demo mode commands, due to the fact that the mobile command handler has an infinite
+ // loop bug if you use any slot other than 1.
+ // mDemoModeController.addCallback(this);
mDumpManager.registerNormalDumpable(TAG, this);
}
@@ -1317,6 +1321,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
int carrierId = TextUtils.isEmpty(carrierIdString) ? 0
: Integer.parseInt(carrierIdString);
// Ensure we have enough sim slots
+ // TODO(b/336357360): This is the origination of the infinite loop bug, for those
+ // following along at home.
List<SubscriptionInfo> subs = new ArrayList<>();
while (mMobileSignalControllers.size() <= slot) {
int nextSlot = mMobileSignalControllers.size();