From 14cc15dc3718a56eedaf98ce4e12230d8f889da9 Mon Sep 17 00:00:00 2001 From: Rambo Wang Date: Mon, 1 Feb 2021 21:49:30 -0800 Subject: [PATCH] Clear up ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED logic The feature is now replaced with TM#setSignalStrengthUpdateRequest introduced in S release. The logic for the obsoleted feature is cleared up. The request to report system signal strength while idle is still protected by permission to use internally. Bug: 177924721 Test: atest TelephonyRegistryTest SignalStrengthUpdateRequestTest Change-Id: Idad4ca59720fac50b5ec0fe50e2b6ac8e9dbb801 --- .../android/telephony/PhoneStateListener.java | 14 ----- .../telephony/TelephonyRegistryManager.java | 4 -- core/res/AndroidManifest.xml | 2 +- .../com/android/server/TelephonyRegistry.java | 53 +------------------ .../SignalStrengthUpdateRequest.java | 15 ++++-- .../android/telephony/TelephonyManager.java | 20 ------- .../internal/telephony/ITelephony.aidl | 5 -- 7 files changed, 15 insertions(+), 98 deletions(-) diff --git a/core/java/android/telephony/PhoneStateListener.java b/core/java/android/telephony/PhoneStateListener.java index d39b56ddabede..5b9d69c2f9ffc 100644 --- a/core/java/android/telephony/PhoneStateListener.java +++ b/core/java/android/telephony/PhoneStateListener.java @@ -190,20 +190,6 @@ public class PhoneStateListener { @Deprecated public static final int LISTEN_SIGNAL_STRENGTHS = 0x00000100; - /** - * Listen for changes of the network signal strengths (cellular) always reported from modem, - * even in some situations such as the screen of the device is off. - * - * @see #onSignalStrengthsChanged - * - * @hide - * @deprecated Use TelephonyManager#setSignalStrengthUpdateRequest - * instead. - */ - @Deprecated - @RequiresPermission(android.Manifest.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH) - public static final int LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH = 0x00000200; - /** * Listen for changes to observed cell info. * diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java index bedad7344e9dc..cb1cff9cda22e 100644 --- a/core/java/android/telephony/TelephonyRegistryManager.java +++ b/core/java/android/telephony/TelephonyRegistryManager.java @@ -1041,10 +1041,6 @@ public class TelephonyRegistryManager { eventList.add(TelephonyCallback.EVENT_SIGNAL_STRENGTHS_CHANGED); } - if ((eventMask & PhoneStateListener.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH) != 0) { - eventList.add(TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED); - } - if ((eventMask & PhoneStateListener.LISTEN_CELL_INFO) != 0) { eventList.add(TelephonyCallback.EVENT_CELL_INFO_CHANGED); } diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index 1418dbe0f849a..d2f42924e9e7c 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -2394,7 +2394,7 @@ - diff --git a/services/core/java/com/android/server/TelephonyRegistry.java b/services/core/java/com/android/server/TelephonyRegistry.java index 43bd9e7730700..c742708822607 100644 --- a/services/core/java/com/android/server/TelephonyRegistry.java +++ b/services/core/java/com/android/server/TelephonyRegistry.java @@ -1164,17 +1164,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { remove(r.binder); } } - if (events.contains( - TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED)) { - updateReportSignalStrengthDecision(r.subId); - try { - if (mSignalStrength[r.phoneId] != null) { - r.callback.onSignalStrengthsChanged(mSignalStrength[r.phoneId]); - } - } catch (RemoteException ex) { - remove(r.binder); - } - } if (validateEventAndUserLocked( r, TelephonyCallback.EVENT_CELL_INFO_CHANGED)) { try { @@ -1353,27 +1342,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } } - private void updateReportSignalStrengthDecision(int subscriptionId) { - synchronized (mRecords) { - TelephonyManager telephonyManager = (TelephonyManager) mContext - .getSystemService(Context.TELEPHONY_SERVICE); - for (Record r : mRecords) { - // If any of the system clients wants to always listen to signal strength, - // we need to set it on. - if (r.matchTelephonyCallbackEvent( - TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED)) { - telephonyManager.createForSubscriptionId(subscriptionId) - .setAlwaysReportSignalStrength(true); - return; - } - } - // If none of the system clients wants to always listen to signal strength, - // we need to set it off. - telephonyManager.createForSubscriptionId(subscriptionId) - .setAlwaysReportSignalStrength(false); - } - } - private String getCallIncomingNumber(Record record, int phoneId) { // Only reveal the incoming number if the record has read call log permission. return record.canReadCallLog() ? mCallIncomingNumber[phoneId] : ""; @@ -1457,14 +1425,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } mRecords.remove(i); - - // Every time a client that is registrating to always receive the signal - // strength is removed from registry records, we need to check if - // the signal strength decision needs to update on its slot. - if (r.matchTelephonyCallbackEvent( - TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED)) { - updateReportSignalStrengthDecision(r.subId); - } return; } } @@ -1696,10 +1656,8 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { log("notifySignalStrengthForPhoneId: r=" + r + " subId=" + subId + " phoneId=" + phoneId + " ss=" + signalStrength); } - if ((r.matchTelephonyCallbackEvent( + if (r.matchTelephonyCallbackEvent( TelephonyCallback.EVENT_SIGNAL_STRENGTHS_CHANGED) - || r.matchTelephonyCallbackEvent( - TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED)) && idMatch(r, subId, phoneId)) { try { if (DBG) { @@ -3119,11 +3077,6 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { android.Manifest.permission.READ_ACTIVE_EMERGENCY_SESSION, null); } - if ((events.contains(TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED))) { - mContext.enforceCallingOrSelfPermission( - android.Manifest.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH, null); - } - if (isPrivilegedPhoneStatePermissionRequired(events)) { mContext.enforceCallingOrSelfPermission( android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE, null); @@ -3284,9 +3237,7 @@ public class TelephonyRegistry extends ITelephonyRegistry.Stub { } } - if (events.contains(TelephonyCallback.EVENT_SIGNAL_STRENGTHS_CHANGED) - || events.contains( - TelephonyCallback.EVENT_ALWAYS_REPORTED_SIGNAL_STRENGTH_CHANGED)) { + if (events.contains(TelephonyCallback.EVENT_SIGNAL_STRENGTHS_CHANGED)) { try { if (mSignalStrength[phoneId] != null) { SignalStrength signalStrength = mSignalStrength[phoneId]; diff --git a/telephony/java/android/telephony/SignalStrengthUpdateRequest.java b/telephony/java/android/telephony/SignalStrengthUpdateRequest.java index 41e24ddb3fa67..2ff4ac5e30d3a 100644 --- a/telephony/java/android/telephony/SignalStrengthUpdateRequest.java +++ b/telephony/java/android/telephony/SignalStrengthUpdateRequest.java @@ -17,6 +17,8 @@ package android.telephony; import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.RequiresPermission; import android.os.Binder; import android.os.IBinder; import android.os.Parcel; @@ -66,10 +68,15 @@ public final class SignalStrengthUpdateRequest implements Parcelable { private final IBinder mLiveToken; private SignalStrengthUpdateRequest( - @NonNull List signalThresholdInfos, + @Nullable List signalThresholdInfos, boolean isReportingRequestedWhileIdle, boolean isSystemThresholdReportingRequestedWhileIdle) { - validate(signalThresholdInfos); + // System app (like Bluetooth) can specify the request to report system thresholds while + // device is idle (with permission protection). In this case, the request doesn't need to + // provide a non-empty list of SignalThresholdInfo which is only asked for public apps. + if (!isSystemThresholdReportingRequestedWhileIdle) { + validate(signalThresholdInfos); + } mSignalThresholdInfos = signalThresholdInfos; mIsReportingRequestedWhileIdle = isReportingRequestedWhileIdle; @@ -128,13 +135,15 @@ public final class SignalStrengthUpdateRequest implements Parcelable { /** * Set the builder object if require reporting on the system thresholds when device is idle. * - * This can only used by the system caller. + *

This can only used by the system caller. Requires permission + * {@link android.Manifest.permission#LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH}. * * @param isSystemThresholdReportingRequestedWhileIdle true if request reporting on the * system thresholds when device is idle * @return the builder to facilitate the chaining * @hide */ + @RequiresPermission(android.Manifest.permission.LISTEN_ALWAYS_REPORTED_SIGNAL_STRENGTH) public @NonNull Builder setSystemThresholdReportingRequestedWhileIdle( boolean isSystemThresholdReportingRequestedWhileIdle) { mIsSystemThresholdReportingRequestedWhileIdle = diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index a1bed29dec702..122f96df4ae6f 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -12424,26 +12424,6 @@ public class TelephonyManager { return true; } - /** - * Enable or disable signal strength changes from radio will always be reported in any - * condition (e.g. screen is off). This is only allowed for System caller. - * - * @param isEnabled {@code true} for enabling; {@code false} for disabling. - * @hide - */ - @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) - public void setAlwaysReportSignalStrength(boolean isEnabled) { - try { - ITelephony telephony = getITelephony(); - if (telephony != null) { - telephony.setAlwaysReportSignalStrength(getSubId(), isEnabled); - } - } catch (RemoteException ex) { - Log.e(TAG, "setAlwaysReportSignalStrength RemoteException", ex); - ex.rethrowAsRuntimeException(); - } - } - /** * Get the most recently available signal strength information. * diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 63732b5ee444a..232a5d8817226 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -1001,11 +1001,6 @@ interface ITelephony { */ boolean isManualNetworkSelectionAllowed(int subId); - /** - * Enable or disable always reporting signal strength changes from radio. - */ - void setAlwaysReportSignalStrength(int subId, boolean isEnable); - /** * Get P-CSCF address from PCO after data connection is established or modified. * @param apnType the apnType, "ims" for IMS APN, "emergency" for EMERGENCY APN