diff options
| -rw-r--r-- | services/core/java/com/android/server/BluetoothManagerService.java | 2 | ||||
| -rw-r--r-- | services/java/com/android/server/SystemServer.java | 29 |
2 files changed, 27 insertions, 4 deletions
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java index 555e89947a64..5ea3390d4e46 100644 --- a/services/core/java/com/android/server/BluetoothManagerService.java +++ b/services/core/java/com/android/server/BluetoothManagerService.java @@ -279,7 +279,7 @@ class BluetoothManagerService extends IBluetoothManager.Stub { Slog.d(TAG, "Airplane Mode change - current state: " + BluetoothAdapter.nameForState( - st)); + st) + ", isAirplaneModeOn()=" + isAirplaneModeOn()); if (isAirplaneModeOn()) { // Clear registered LE apps to force shut-off diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index 10d979863a96..23492a6775d9 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -966,6 +966,18 @@ public final class SystemServer { Slog.e("System", "************ Failure starting core service", e); } + // Before things start rolling, be sure we have decided whether + // we are in safe mode. + final boolean safeMode = wm.detectSafeMode(); + if (safeMode) { + // If yes, immediately turn on the global setting for airplane mode. + // Note that this does not send broadcasts at this stage because + // subsystems are not yet up. We will send broadcasts later to ensure + // all listeners have the chance to react with special handling. + Settings.Global.putInt(context.getContentResolver(), + Settings.Global.AIRPLANE_MODE_ON, 1); + } + StatusBarManagerService statusBar = null; INotificationManager notification = null; LocationManagerService location = null; @@ -1672,9 +1684,6 @@ public final class SystemServer { mSystemServiceManager.startService(StatsCompanionService.Lifecycle.class); traceEnd(); - // Before things start rolling, be sure we have decided whether - // we are in safe mode. - final boolean safeMode = wm.detectSafeMode(); if (safeMode) { traceBeginAndSlog("EnterSafeModeAndDisableJitCompilation"); mActivityManagerService.enterSafeMode(); @@ -1862,6 +1871,20 @@ public final class SystemServer { reportWtf("starting System UI", e); } traceEnd(); + // Enable airplane mode in safe mode. setAirplaneMode() cannot be called + // earlier as it sends broadcasts to other services. + // TODO: This may actually be too late if radio firmware already started leaking + // RF before the respective services start. However, fixing this requires changes + // to radio firmware and interfaces. + if (safeMode) { + traceBeginAndSlog("EnableAirplaneModeInSafeMode"); + try { + connectivityF.setAirplaneMode(true); + } catch (Throwable e) { + reportWtf("enabling Airplane Mode during Safe Mode bootup", e); + } + traceEnd(); + } traceBeginAndSlog("MakeNetworkManagementServiceReady"); try { if (networkManagementF != null) networkManagementF.systemReady(); |