From 1abe9b187c641de77cfdcb93faa477a1112c2048 Mon Sep 17 00:00:00 2001 From: yinxu Date: Wed, 28 Feb 2018 15:43:42 -0800 Subject: [PATCH] Address the API review comments. Bug:73750871 Test: Unit Test Change-Id: I8ebb617c819c7604957b3c086098ef5074d70f78 --- api/current.txt | 11 +++---- api/system-current.txt | 1 - .../telephony/AccessNetworkConstants.java | 21 ++++++++++++ .../java/android/telephony/NetworkScan.java | 28 +++++++++++----- .../android/telephony/TelephonyManager.java | 22 +++++++++++-- .../telephony/TelephonyScanManager.java | 33 +++++++++++++------ 6 files changed, 86 insertions(+), 30 deletions(-) diff --git a/api/current.txt b/api/current.txt index 3f0de4d45d63b..c4733b26c4fbc 100644 --- a/api/current.txt +++ b/api/current.txt @@ -39952,11 +39952,9 @@ package android.telecom { package android.telephony { public final class AccessNetworkConstants { - ctor public AccessNetworkConstants(); } public static final class AccessNetworkConstants.AccessNetworkType { - ctor public AccessNetworkConstants.AccessNetworkType(); field public static final int CDMA2000 = 4; // 0x4 field public static final int EUTRAN = 3; // 0x3 field public static final int GERAN = 1; // 0x1 @@ -39966,7 +39964,6 @@ package android.telephony { } public static final class AccessNetworkConstants.EutranBand { - ctor public AccessNetworkConstants.EutranBand(); field public static final int BAND_1 = 1; // 0x1 field public static final int BAND_10 = 10; // 0xa field public static final int BAND_11 = 11; // 0xb @@ -40018,7 +40015,6 @@ package android.telephony { } public static final class AccessNetworkConstants.GeranBand { - ctor public AccessNetworkConstants.GeranBand(); field public static final int BAND_450 = 3; // 0x3 field public static final int BAND_480 = 4; // 0x4 field public static final int BAND_710 = 5; // 0x5 @@ -40036,7 +40032,6 @@ package android.telephony { } public static final class AccessNetworkConstants.UtranBand { - ctor public AccessNetworkConstants.UtranBand(); field public static final int BAND_1 = 1; // 0x1 field public static final int BAND_10 = 10; // 0xa field public static final int BAND_11 = 11; // 0xb @@ -40471,7 +40466,8 @@ package android.telephony { } public class NetworkScan { - method public void stop() throws android.os.RemoteException; + method public deprecated void stop() throws android.os.RemoteException; + method public void stopScan(); field public static final int ERROR_INTERRUPTED = 10002; // 0x2712 field public static final int ERROR_INVALID_SCAN = 2; // 0x2 field public static final int ERROR_INVALID_SCANID = 10001; // 0x2711 @@ -40895,7 +40891,8 @@ package android.telephony { method public boolean isVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle); method public boolean isWorldPhone(); method public void listen(android.telephony.PhoneStateListener, int); - method public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, android.telephony.TelephonyScanManager.NetworkScanCallback); + method public android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, java.util.concurrent.Executor, android.telephony.TelephonyScanManager.NetworkScanCallback); + method public deprecated android.telephony.NetworkScan requestNetworkScan(android.telephony.NetworkScanRequest, android.telephony.TelephonyScanManager.NetworkScanCallback); method public void sendDialerSpecialCode(java.lang.String); method public java.lang.String sendEnvelopeWithStatus(java.lang.String); method public void sendUssdRequest(java.lang.String, android.telephony.TelephonyManager.UssdResponseCallback, android.os.Handler); diff --git a/api/system-current.txt b/api/system-current.txt index d66c1538475cc..2f1b140c65454 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4111,7 +4111,6 @@ package android.telecom { package android.telephony { public static final class AccessNetworkConstants.TransportType { - ctor public AccessNetworkConstants.TransportType(); field public static final int WLAN = 2; // 0x2 field public static final int WWAN = 1; // 0x1 } diff --git a/telephony/java/android/telephony/AccessNetworkConstants.java b/telephony/java/android/telephony/AccessNetworkConstants.java index 7cd16128b8955..cac9f2b51b734 100644 --- a/telephony/java/android/telephony/AccessNetworkConstants.java +++ b/telephony/java/android/telephony/AccessNetworkConstants.java @@ -30,6 +30,9 @@ public final class AccessNetworkConstants { public static final int EUTRAN = 3; public static final int CDMA2000 = 4; public static final int IWLAN = 5; + + /** @hide */ + private AccessNetworkType() {}; } /** @@ -42,6 +45,9 @@ public final class AccessNetworkConstants { public static final int WWAN = 1; /** Wireless Local Area Networks (i.e. Wifi) */ public static final int WLAN = 2; + + /** @hide */ + private TransportType() {}; } /** @@ -63,6 +69,9 @@ public final class AccessNetworkConstants { public static final int BAND_DCS1800 = 12; public static final int BAND_PCS1900 = 13; public static final int BAND_ER900 = 14; + + /** @hide */ + private GeranBand() {}; } /** @@ -92,6 +101,9 @@ public final class AccessNetworkConstants { /** band 23, 24 are reserved */ public static final int BAND_25 = 25; public static final int BAND_26 = 26; + + /** @hide */ + private UtranBand() {}; } /** @@ -147,6 +159,9 @@ public final class AccessNetworkConstants { public static final int BAND_66 = 66; public static final int BAND_68 = 68; public static final int BAND_70 = 70; + + /** @hide */ + private EutranBand() {}; } /** @@ -179,5 +194,11 @@ public final class AccessNetworkConstants { public static final int BAND_19 = 20; public static final int BAND_20 = 21; public static final int BAND_21 = 22; + + /** @hide */ + private CdmaBands() {}; } + + /** @hide */ + private AccessNetworkConstants() {}; } diff --git a/telephony/java/android/telephony/NetworkScan.java b/telephony/java/android/telephony/NetworkScan.java index a27721261dade..71a177abb8c95 100644 --- a/telephony/java/android/telephony/NetworkScan.java +++ b/telephony/java/android/telephony/NetworkScan.java @@ -29,9 +29,9 @@ import java.lang.annotation.RetentionPolicy; /** * The caller of - * {@link TelephonyManager#requestNetworkScan(NetworkScanRequest, NetworkScanCallback)} + * {@link TelephonyManager#requestNetworkScan(NetworkScanRequest, Executor, NetworkScanCallback)} * will receive an instance of {@link NetworkScan}, which contains a callback method - * {@link #stop()} for stopping the in-progress scan. + * {@link #stopScan()} for stopping the in-progress scan. */ public class NetworkScan { @@ -106,16 +106,26 @@ public class NetworkScan { * Use this method to stop an ongoing scan. When user requests a new scan, a {@link NetworkScan} * object will be returned, and the user can stop the scan by calling this method. */ - public void stop() throws RemoteException { + public void stopScan() { + ITelephony telephony = getITelephony(); + if (telephony == null) { + Rlog.e(TAG, "Failed to get the ITelephony instance."); + throw new RuntimeException("Failed to get the ITelephony instance."); + } try { - ITelephony telephony = getITelephony(); - if (telephony != null) { - telephony.stopNetworkScan(mSubId, mScanId); - } else { - throw new RemoteException("Failed to get the ITelephony instance."); - } + telephony.stopNetworkScan(mSubId, mScanId); } catch (RemoteException ex) { Rlog.e(TAG, "stopNetworkScan RemoteException", ex); + ex.rethrowAsRuntimeException(); + } + } + + /** @deprecated Use {@link #stopScan()} */ + @Deprecated + public void stop() throws RemoteException { + try { + stopScan(); + } catch (RuntimeException ex) { throw new RemoteException("Failed to stop the network scan with id " + mScanId); } } diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 9f5907ba7bfd8..4d48ed0645431 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -34,6 +34,7 @@ import android.content.Intent; import android.net.ConnectivityManager; import android.net.NetworkStats; import android.net.Uri; +import android.os.AsyncTask; import android.os.BatteryStats; import android.os.Bundle; import android.os.Handler; @@ -73,6 +74,7 @@ import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.concurrent.Executor; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -5220,21 +5222,35 @@ public class TelephonyManager { *

* Requires Permission: * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} - * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges() * * @param request Contains all the RAT with bands/channels that need to be scanned. + * @param executor The executor through which the callback should be invoked. * @param callback Returns network scan results or errors. * @return A NetworkScan obj which contains a callback which can be used to stop the scan. */ @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public NetworkScan requestNetworkScan( - NetworkScanRequest request, TelephonyScanManager.NetworkScanCallback callback) { + NetworkScanRequest request, Executor executor, + TelephonyScanManager.NetworkScanCallback callback) { synchronized (this) { if (mTelephonyScanManager == null) { mTelephonyScanManager = new TelephonyScanManager(); } } - return mTelephonyScanManager.requestNetworkScan(getSubId(), request, callback); + return mTelephonyScanManager.requestNetworkScan(getSubId(), request, executor, callback); + } + + /** + * @deprecated + * Use {@link + * #requestNetworkScan(NetworkScanRequest, Executor, TelephonyScanManager.NetworkScanCallback)} + */ + @Deprecated + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public NetworkScan requestNetworkScan( + NetworkScanRequest request, TelephonyScanManager.NetworkScanCallback callback) { + return requestNetworkScan(request, AsyncTask.THREAD_POOL_EXECUTOR, callback); } /** diff --git a/telephony/java/android/telephony/TelephonyScanManager.java b/telephony/java/android/telephony/TelephonyScanManager.java index c182e34943fb4..946cecfa261ca 100644 --- a/telephony/java/android/telephony/TelephonyScanManager.java +++ b/telephony/java/android/telephony/TelephonyScanManager.java @@ -33,6 +33,7 @@ import android.util.Log; import android.util.SparseArray; import java.util.Arrays; import java.util.List; +import java.util.concurrent.Executor; import com.android.internal.telephony.ITelephony; @@ -55,8 +56,10 @@ public final class TelephonyScanManager { /** * The caller of - * {@link TelephonyManager#requestNetworkScan(NetworkScanRequest, NetworkScanCallback)} should - * implement and provide this callback so that the scan results or errors can be returned. + * {@link + * TelephonyManager#requestNetworkScan(NetworkScanRequest, Executor, NetworkScanCallback)} + * should implement and provide this callback so that the scan results or errors can be + * returned. */ public static abstract class NetworkScanCallback { /** Returns the scan results to the user, this callback will be called multiple times. */ @@ -83,10 +86,13 @@ public final class TelephonyScanManager { private static class NetworkScanInfo { private final NetworkScanRequest mRequest; + private final Executor mExecutor; private final NetworkScanCallback mCallback; - NetworkScanInfo(NetworkScanRequest request, NetworkScanCallback callback) { + NetworkScanInfo( + NetworkScanRequest request, Executor executor, NetworkScanCallback callback) { mRequest = request; + mExecutor = executor; mCallback = callback; } } @@ -112,10 +118,15 @@ public final class TelephonyScanManager { "Failed to find NetworkScanInfo with id " + message.arg2); } NetworkScanCallback callback = nsi.mCallback; + Executor executor = nsi.mExecutor; if (callback == null) { throw new RuntimeException( "Failed to find NetworkScanCallback with id " + message.arg2); } + if (executor == null) { + throw new RuntimeException( + "Failed to find Executor with id " + message.arg2); + } switch (message.what) { case CALLBACK_SCAN_RESULTS: @@ -126,21 +137,22 @@ public final class TelephonyScanManager { for (int i = 0; i < parcelables.length; i++) { ci[i] = (CellInfo) parcelables[i]; } - callback.onResults((List) Arrays.asList(ci)); + executor.execute(() -> + callback.onResults((List) Arrays.asList(ci))); } catch (Exception e) { Rlog.e(TAG, "Exception in networkscan callback onResults", e); } break; case CALLBACK_SCAN_ERROR: try { - callback.onError(message.arg1); + executor.execute(() -> callback.onError(message.arg1)); } catch (Exception e) { Rlog.e(TAG, "Exception in networkscan callback onError", e); } break; case CALLBACK_SCAN_COMPLETE: try { - callback.onComplete(); + executor.execute(() -> callback.onComplete()); mScanInfo.remove(message.arg2); } catch (Exception e) { Rlog.e(TAG, "Exception in networkscan callback onComplete", e); @@ -171,12 +183,12 @@ public final class TelephonyScanManager { * @hide */ public NetworkScan requestNetworkScan(int subId, - NetworkScanRequest request, NetworkScanCallback callback) { + NetworkScanRequest request, Executor executor, NetworkScanCallback callback) { try { ITelephony telephony = getITelephony(); if (telephony != null) { int scanId = telephony.requestNetworkScan(subId, request, mMessenger, new Binder()); - saveScanInfo(scanId, request, callback); + saveScanInfo(scanId, request, executor, callback); return new NetworkScan(scanId, subId); } } catch (RemoteException ex) { @@ -187,9 +199,10 @@ public final class TelephonyScanManager { return null; } - private void saveScanInfo(int id, NetworkScanRequest request, NetworkScanCallback callback) { + private void saveScanInfo( + int id, NetworkScanRequest request, Executor executor, NetworkScanCallback callback) { synchronized (mScanInfo) { - mScanInfo.put(id, new NetworkScanInfo(request, callback)); + mScanInfo.put(id, new NetworkScanInfo(request, executor, callback)); } }