From 77e6f9909a9533680f6617d05302c87f5582dc0b Mon Sep 17 00:00:00 2001 From: yinxu Date: Tue, 27 Jun 2017 14:05:17 -0700 Subject: [PATCH] Use Bundle for inter-process message The message sent from NetworkScanRequestTracker to TelephonyScanManager might be across different process, so we have to wrap the List into Bundle because List<> is not parcelable. Cherry-picked cleanly from: https://googleplex-android-review.googlesource.com/#/c/2467157/ Test: Telephony sanity tests Bug: 30954762 Merged-in: I77945b247530b85c0b82876d528549498a711550 Changg-Id: I77945b247530b85c0b82876d528549498a711550 (cherry picked from commit 56049437095d3cb8334f667ff73061f2926b5416) Change-Id: Iec4043e611a8f58733a361ec9a52fc74e1c974d5 --- .../android/telephony/TelephonyScanManager.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/telephony/java/android/telephony/TelephonyScanManager.java b/telephony/java/android/telephony/TelephonyScanManager.java index c905d3a433f31..92a21b6fb85fa 100644 --- a/telephony/java/android/telephony/TelephonyScanManager.java +++ b/telephony/java/android/telephony/TelephonyScanManager.java @@ -20,15 +20,18 @@ import static com.android.internal.util.Preconditions.checkNotNull; import android.content.Context; import android.os.Binder; +import android.os.Bundle; import android.os.Handler; import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.Messenger; +import android.os.Parcelable; import android.os.RemoteException; import android.os.ServiceManager; import android.util.Log; import android.util.SparseArray; +import java.util.Arrays; import java.util.List; import com.android.internal.telephony.ITelephony; @@ -41,6 +44,9 @@ public final class TelephonyScanManager { private static final String TAG = "TelephonyScanManager"; + /** @hide */ + public static final String SCAN_RESULT_KEY = "scanResult"; + /** @hide */ public static final int CALLBACK_SCAN_RESULTS = 1; /** @hide */ @@ -112,7 +118,13 @@ public final class TelephonyScanManager { switch (message.what) { case CALLBACK_SCAN_RESULTS: try { - callback.onResults((List) message.obj); + final Bundle b = message.getData(); + final Parcelable[] parcelables = b.getParcelableArray(SCAN_RESULT_KEY); + CellInfo[] ci = new CellInfo[parcelables.length]; + for (int i = 0; i < parcelables.length; i++) { + ci[i] = (CellInfo) parcelables[i]; + } + callback.onResults((List) Arrays.asList(ci)); } catch (Exception e) { Rlog.e(TAG, "Exception in networkscan callback onResults", e); }