Clear up CarrierPrivilegesListener APIs
CarrierPrivilegesListener has been replaced with
CarrierPrivilegesCallback. With all clients has been migrated, it is
time to remove the obsoleted APIs
Bug: 216549778
Test: atest CarrierPrivilegesTrackerTest CarrierServiceTest
Test: atest WifiCarrierInfoManagerTest TelephonyRegistryManagerTest
Test: atest TelephonySubscriptionTrackerTest
Change-Id: I89df21764d3b9945219d810d0dd9bfe3cf5fbea4
Merged-In: I89df21764d3b9945219d810d0dd9bfe3cf5fbea4
(cherry picked from commit 5a4bcc0a9c1f656bd87e2830e56dea37197fdd2b)
diff --git a/core/api/system-current.txt b/core/api/system-current.txt
index cbfd86e..03cb8bb 100644
--- a/core/api/system-current.txt
+++ b/core/api/system-current.txt
@@ -11594,7 +11594,6 @@
}
public class TelephonyManager {
- method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void addCarrierPrivilegesListener(int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CarrierPrivilegesListener);
method @RequiresPermission(anyOf={android.Manifest.permission.MODIFY_PHONE_STATE, android.Manifest.permission.PERFORM_IMS_SINGLE_REGISTRATION}) @WorkerThread public void bootstrapAuthenticationRequest(int, @NonNull android.net.Uri, @NonNull android.telephony.gba.UaSecurityProtocolIdentifier, boolean, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.BootstrapAuthenticationCallback);
method @Deprecated @RequiresPermission(android.Manifest.permission.CALL_PHONE) public void call(String, String);
method @NonNull @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public android.telephony.PinResult changeIccLockPin(@NonNull String, @NonNull String);
@@ -11691,7 +11690,6 @@
method @RequiresPermission(android.Manifest.permission.REBOOT) public int prepareForUnattendedReboot();
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public boolean rebootRadio();
method @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerCarrierPrivilegesCallback(int, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CarrierPrivilegesCallback);
- method @Deprecated @RequiresPermission(android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void removeCarrierPrivilegesListener(@NonNull android.telephony.TelephonyManager.CarrierPrivilegesListener);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void reportDefaultNetworkStatus(boolean);
method @RequiresPermission(allOf={android.Manifest.permission.ACCESS_FINE_LOCATION, android.Manifest.permission.MODIFY_PHONE_STATE}) public void requestCellInfoUpdate(@NonNull android.os.WorkSource, @NonNull java.util.concurrent.Executor, @NonNull android.telephony.TelephonyManager.CellInfoCallback);
method @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) public void requestModemActivityInfo(@NonNull java.util.concurrent.Executor, @NonNull android.os.OutcomeReceiver<android.telephony.ModemActivityInfo,android.telephony.TelephonyManager.ModemActivityInfoException>);
@@ -11851,10 +11849,6 @@
method public default void onCarrierServiceChanged(@Nullable String, int);
}
- @Deprecated public static interface TelephonyManager.CarrierPrivilegesListener {
- method @Deprecated public void onCarrierPrivilegesChanged(@NonNull java.util.List<java.lang.String>, @NonNull int[]);
- }
-
public static class TelephonyManager.ModemActivityInfoException extends java.lang.Exception {
ctor public TelephonyManager.ModemActivityInfoException(int);
method public int getErrorCode();
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index 0d8b1f8..9c7f23e 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -38,7 +38,6 @@
import android.telephony.Annotation.SimActivationState;
import android.telephony.Annotation.SrvccState;
import android.telephony.TelephonyManager.CarrierPrivilegesCallback;
-import android.telephony.TelephonyManager.CarrierPrivilegesListener;
import android.telephony.emergency.EmergencyNumber;
import android.telephony.ims.ImsReasonInfo;
import android.util.ArraySet;
@@ -1262,149 +1261,52 @@
pkgName, attributionTag, callback, new int[0], notifyNow);
}
- // TODO(b/216549778): Remove listener logic once all clients switch to CarrierPrivilegesCallback
private static class CarrierPrivilegesCallbackWrapper extends ICarrierPrivilegesCallback.Stub
implements ListenerExecutor {
- // Either mListener or mCallback may be null, never both
- @Nullable private final WeakReference<CarrierPrivilegesListener> mListener;
- @Nullable private final WeakReference<CarrierPrivilegesCallback> mCallback;
+ @NonNull private final WeakReference<CarrierPrivilegesCallback> mCallback;
@NonNull private final Executor mExecutor;
CarrierPrivilegesCallbackWrapper(
@NonNull CarrierPrivilegesCallback callback, @NonNull Executor executor) {
- mListener = null;
mCallback = new WeakReference<>(callback);
mExecutor = executor;
}
- CarrierPrivilegesCallbackWrapper(
- @NonNull CarrierPrivilegesListener listener, @NonNull Executor executor) {
- mListener = new WeakReference<>(listener);
- mCallback = null;
- mExecutor = executor;
- }
-
@Override
public void onCarrierPrivilegesChanged(
@NonNull List<String> privilegedPackageNames, @NonNull int[] privilegedUids) {
- if (mListener != null) {
- Binder.withCleanCallingIdentity(
- () ->
- executeSafely(
- mExecutor,
- mListener::get,
- cpl ->
- cpl.onCarrierPrivilegesChanged(
- privilegedPackageNames, privilegedUids)));
- }
-
- if (mCallback != null) {
- // AIDL interface does not support Set, keep the List/Array and translate them here
- Set<String> privilegedPkgNamesSet = Set.copyOf(privilegedPackageNames);
- Set<Integer> privilegedUidsSet = Arrays.stream(privilegedUids).boxed().collect(
- Collectors.toSet());
- Binder.withCleanCallingIdentity(
- () ->
- executeSafely(
- mExecutor,
- mCallback::get,
- cpc ->
- cpc.onCarrierPrivilegesChanged(
- privilegedPkgNamesSet, privilegedUidsSet)));
- }
+ // AIDL interface does not support Set, keep the List/Array and translate them here
+ Set<String> privilegedPkgNamesSet = Set.copyOf(privilegedPackageNames);
+ Set<Integer> privilegedUidsSet = Arrays.stream(privilegedUids).boxed().collect(
+ Collectors.toSet());
+ Binder.withCleanCallingIdentity(
+ () ->
+ executeSafely(
+ mExecutor,
+ mCallback::get,
+ cpc ->
+ cpc.onCarrierPrivilegesChanged(
+ privilegedPkgNamesSet, privilegedUidsSet)));
}
@Override
public void onCarrierServiceChanged(@Nullable String packageName, int uid) {
- if (mCallback != null) {
- Binder.withCleanCallingIdentity(
- () ->
- executeSafely(
- mExecutor,
- mCallback::get,
- cpc -> cpc.onCarrierServiceChanged(packageName, uid)));
- }
+ Binder.withCleanCallingIdentity(
+ () ->
+ executeSafely(
+ mExecutor,
+ mCallback::get,
+ cpc -> cpc.onCarrierServiceChanged(packageName, uid)));
}
}
- // TODO(b/216549778): Change the map key to CarrierPrivilegesCallback once all clients switch to
- // CarrierPrivilegesCallback. Before that, the key is either CarrierPrivilegesCallback or
- // CarrierPrivilegesListener, no logic actually depends on the type.
@NonNull
@GuardedBy("sCarrierPrivilegeCallbacks")
- private static final WeakHashMap<Object, WeakReference<CarrierPrivilegesCallbackWrapper>>
+ private static final WeakHashMap<CarrierPrivilegesCallback,
+ WeakReference<CarrierPrivilegesCallbackWrapper>>
sCarrierPrivilegeCallbacks = new WeakHashMap<>();
/**
- * Registers a {@link CarrierPrivilegesListener} on the given {@code logicalSlotIndex} to
- * receive callbacks when the set of packages with carrier privileges changes. The callback will
- * immediately be called with the latest state.
- *
- * @param logicalSlotIndex The SIM slot to listen on
- * @param executor The executor where {@code listener} will be invoked
- * @param listener The callback to register
- *
- * @deprecated Use {@link #addCarrierPrivilegesCallback} instead. This API will be removed
- * prior to API finalization.
- */
- @Deprecated
- public void addCarrierPrivilegesListener(
- int logicalSlotIndex,
- @NonNull @CallbackExecutor Executor executor,
- @NonNull CarrierPrivilegesListener listener) {
- if (listener == null || executor == null) {
- throw new IllegalArgumentException("listener and executor must be non-null");
- }
- synchronized (sCarrierPrivilegeCallbacks) {
- WeakReference<CarrierPrivilegesCallbackWrapper> existing =
- sCarrierPrivilegeCallbacks.get(listener);
- if (existing != null && existing.get() != null) {
- Log.d(TAG, "addCarrierPrivilegesListener: listener already registered");
- return;
- }
- CarrierPrivilegesCallbackWrapper wrapper =
- new CarrierPrivilegesCallbackWrapper(listener, executor);
- sCarrierPrivilegeCallbacks.put(listener, new WeakReference<>(wrapper));
- try {
- sRegistry.addCarrierPrivilegesCallback(
- logicalSlotIndex,
- wrapper,
- mContext.getOpPackageName(),
- mContext.getAttributionTag());
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
- }
-
- /**
- * Unregisters a {@link CarrierPrivilegesListener}.
- *
- * @param listener The callback to unregister
- *
- * @deprecated Use {@link #removeCarrierPrivilegesCallback} instead. The callback will prior
- * to API finalization.
- */
- @Deprecated
- public void removeCarrierPrivilegesListener(@NonNull CarrierPrivilegesListener listener) {
- if (listener == null) {
- throw new IllegalArgumentException("listener must be non-null");
- }
- synchronized (sCarrierPrivilegeCallbacks) {
- WeakReference<CarrierPrivilegesCallbackWrapper> ref =
- sCarrierPrivilegeCallbacks.remove(listener);
- if (ref == null) return;
- CarrierPrivilegesCallbackWrapper wrapper = ref.get();
- if (wrapper == null) return;
- try {
- sRegistry.removeCarrierPrivilegesCallback(wrapper, mContext.getOpPackageName());
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
- }
-
- /**
* Registers a {@link CarrierPrivilegesCallback} on the given {@code logicalSlotIndex} to
* receive callbacks when the set of packages with carrier privileges changes. The callback will
* immediately be called with the latest state.
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 9720819f..3e3d726 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -16240,32 +16240,6 @@
}
/**
- * Callback to listen for when the set of packages with carrier privileges for a SIM changes.
- *
- * @hide
- * @deprecated Use {@link CarrierPrivilegesCallback} instead. This API will be removed soon
- * prior to API finalization.
- */
- @Deprecated
- @SystemApi
- public interface CarrierPrivilegesListener {
- /**
- * Called when the set of packages with carrier privileges has changed.
- *
- * <p>Of note, this callback will <b>not</b> be fired if a carrier triggers a SIM profile
- * switch and the same set of packages remains privileged after the switch.
- *
- * <p>At registration, the callback will receive the current set of privileged packages.
- *
- * @param privilegedPackageNames The updated set of package names that have carrier
- * privileges
- * @param privilegedUids The updated set of UIDs that have carrier privileges
- */
- void onCarrierPrivilegesChanged(
- @NonNull List<String> privilegedPackageNames, @NonNull int[] privilegedUids);
- }
-
- /**
* Callbacks to listen for when the set of packages with carrier privileges for a SIM changes.
*
* <p>Of note, when multiple callbacks are registered, they may be triggered one after another.
@@ -16314,61 +16288,6 @@
}
/**
- * Registers a {@link CarrierPrivilegesListener} on the given {@code logicalSlotIndex} to
- * receive callbacks when the set of packages with carrier privileges changes. The callback will
- * immediately be called with the latest state.
- *
- * @param logicalSlotIndex The SIM slot to listen on
- * @param executor The executor where {@code listener} will be invoked
- * @param listener The callback to register
- * @hide
- * @deprecated Use {@link #registerCarrierPrivilegesCallback} instead. This API will be
- * removed prior to API finalization.
- */
- @Deprecated
- @SystemApi
- @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
- public void addCarrierPrivilegesListener(
- int logicalSlotIndex,
- @NonNull @CallbackExecutor Executor executor,
- @NonNull CarrierPrivilegesListener listener) {
- if (mContext == null) {
- throw new IllegalStateException("Telephony service is null");
- } else if (executor == null || listener == null) {
- throw new IllegalArgumentException(
- "CarrierPrivilegesListener and executor must be non-null");
- }
- mTelephonyRegistryMgr = mContext.getSystemService(TelephonyRegistryManager.class);
- if (mTelephonyRegistryMgr == null) {
- throw new IllegalStateException("Telephony registry service is null");
- }
- mTelephonyRegistryMgr.addCarrierPrivilegesListener(logicalSlotIndex, executor, listener);
- }
-
- /**
- * Unregisters an existing {@link CarrierPrivilegesListener}.
- *
- * @hide
- * @deprecated Use {@link #unregisterCarrierPrivilegesCallback} instead. This API will be
- * removed prior to API finalization.
- */
- @Deprecated
- @SystemApi
- @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE)
- public void removeCarrierPrivilegesListener(@NonNull CarrierPrivilegesListener listener) {
- if (mContext == null) {
- throw new IllegalStateException("Telephony service is null");
- } else if (listener == null) {
- throw new IllegalArgumentException("CarrierPrivilegesListener must be non-null");
- }
- mTelephonyRegistryMgr = mContext.getSystemService(TelephonyRegistryManager.class);
- if (mTelephonyRegistryMgr == null) {
- throw new IllegalStateException("Telephony registry service is null");
- }
- mTelephonyRegistryMgr.removeCarrierPrivilegesListener(listener);
- }
-
- /**
* Registers a {@link CarrierPrivilegesCallback} on the given {@code logicalSlotIndex} to
* receive callbacks when the set of packages with carrier privileges changes. The callback will
* immediately be called with the latest state.