diff options
| author | 2020-09-30 22:13:40 +0000 | |
|---|---|---|
| committer | 2020-09-30 22:13:40 +0000 | |
| commit | 9123ff8c6e22d8e0828ef50b3e21241f56e6dca9 (patch) | |
| tree | 2fabe7b1088b5cc787336a236aeede867b1bcc78 | |
| parent | c0e064f8482e8545c658e2f28bc8654898ef502c (diff) | |
| parent | a6bc5361b7175485410db5fa0f67436d2fb9f413 (diff) | |
Merge "Revert "Clean up IMS based interfaces to use a push model instea..."" am: 8827badd30 am: 9a8e4bf6f1 am: a6bc5361b7
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1443078
Change-Id: Icc3add9e3ea4d4a192f6b9e54c68673bc51497d8
8 files changed, 95 insertions, 272 deletions
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 257155948e31..85dca2b4e9b3 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -85,6 +85,8 @@ import android.telephony.emergency.EmergencyNumber; import android.telephony.emergency.EmergencyNumber.EmergencyServiceCategories; import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.aidl.IImsConfig; +import android.telephony.ims.aidl.IImsMmTelFeature; +import android.telephony.ims.aidl.IImsRcsFeature; import android.telephony.ims.aidl.IImsRegistration; import android.telephony.ims.feature.MmTelFeature; import android.telephony.ims.stub.ImsRegistrationImplBase; @@ -92,6 +94,7 @@ import android.text.TextUtils; import android.util.Log; import android.util.Pair; +import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.annotations.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.CellNetworkScanResult; @@ -7306,6 +7309,80 @@ public class TelephonyManager { } /** + * Returns the {@link IImsMmTelFeature} that corresponds to the given slot Id and MMTel + * feature or {@link null} if the service is not available. If an MMTelFeature is available, the + * {@link IImsServiceFeatureCallback} callback is registered as a listener for feature updates. + * @param slotIndex The SIM slot that we are requesting the {@link IImsMmTelFeature} for. + * @param callback Listener that will send updates to ImsManager when there are updates to + * ImsServiceController. + * @return {@link IImsMmTelFeature} interface for the feature specified or {@code null} if + * it is unavailable. + * @hide + */ + public @Nullable IImsMmTelFeature getImsMmTelFeatureAndListen(int slotIndex, + IImsServiceFeatureCallback callback) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getMmTelFeatureAndListen(slotIndex, callback); + } + } catch (RemoteException e) { + Rlog.e(TAG, "getImsMmTelFeatureAndListen, RemoteException: " + + e.getMessage()); + } + return null; + } + + /** + * Returns the {@link IImsRcsFeature} that corresponds to the given slot Id and RCS + * feature for emergency calling or {@link null} if the service is not available. If an + * RcsFeature is available, the {@link IImsServiceFeatureCallback} callback is registered as a + * listener for feature updates. + * @param slotIndex The SIM slot that we are requesting the {@link IImsRcsFeature} for. + * @param callback Listener that will send updates to ImsManager when there are updates to + * ImsServiceController. + * @return {@link IImsRcsFeature} interface for the feature specified or {@code null} if + * it is unavailable. + * @hide + */ + public @Nullable IImsRcsFeature getImsRcsFeatureAndListen(int slotIndex, + IImsServiceFeatureCallback callback) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + return telephony.getRcsFeatureAndListen(slotIndex, callback); + } + } catch (RemoteException e) { + Rlog.e(TAG, "getImsRcsFeatureAndListen, RemoteException: " + + e.getMessage()); + } + return null; + } + + /** + * Unregister a IImsServiceFeatureCallback previously associated with an ImsFeature through + * {@link #getImsMmTelFeatureAndListen(int, IImsServiceFeatureCallback)} or + * {@link #getImsRcsFeatureAndListen(int, IImsServiceFeatureCallback)}. + * @param slotIndex The SIM slot associated with the callback. + * @param featureType The {@link android.telephony.ims.feature.ImsFeature.FeatureType} + * associated with the callback. + * @param callback The callback to be unregistered. + * @hide + */ + public void unregisterImsFeatureCallback(int slotIndex, int featureType, + IImsServiceFeatureCallback callback) { + try { + ITelephony telephony = getITelephony(); + if (telephony != null) { + telephony.unregisterImsFeatureCallback(slotIndex, featureType, callback); + } + } catch (RemoteException e) { + Rlog.e(TAG, "unregisterImsFeatureCallback, RemoteException: " + + e.getMessage()); + } + } + + /** * @return the {@IImsRegistration} interface that corresponds with the slot index and feature. * @param slotIndex The SIM slot corresponding to the ImsService ImsRegistration is active for. * @param feature An integer indicating the feature that we wish to get the ImsRegistration for. diff --git a/telephony/java/android/telephony/ims/ImsMmTelManager.java b/telephony/java/android/telephony/ims/ImsMmTelManager.java index ee2fce7e7dd5..f6c14e67306b 100644 --- a/telephony/java/android/telephony/ims/ImsMmTelManager.java +++ b/telephony/java/android/telephony/ims/ImsMmTelManager.java @@ -59,7 +59,6 @@ import java.util.function.Consumer; * manager. */ public class ImsMmTelManager implements RegistrationManager { - private static final String TAG = "ImsMmTelManager"; /** * @hide @@ -810,7 +809,7 @@ public class ImsMmTelManager implements RegistrationManager { } try { - iTelephony.isMmTelCapabilitySupported(mSubId, new IIntegerConsumer.Stub() { + getITelephony().isMmTelCapabilitySupported(mSubId, new IIntegerConsumer.Stub() { @Override public void accept(int result) { executor.execute(() -> callback.accept(result == 1)); diff --git a/telephony/java/android/telephony/ims/ImsService.java b/telephony/java/android/telephony/ims/ImsService.java index 8a05bdfc8401..da7311c08307 100644 --- a/telephony/java/android/telephony/ims/ImsService.java +++ b/telephony/java/android/telephony/ims/ImsService.java @@ -16,7 +16,6 @@ package android.telephony.ims; -import android.annotation.LongDef; import android.annotation.SystemApi; import android.annotation.TestApi; import android.app.Service; @@ -42,11 +41,6 @@ import android.util.SparseArray; import com.android.ims.internal.IImsFeatureStatusCallback; import com.android.internal.annotations.VisibleForTesting; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.util.HashMap; -import java.util.Map; - /** * Main ImsService implementation, which binds via the Telephony ImsResolver. Services that extend * ImsService must register the service in their AndroidManifest to be detected by the framework. @@ -104,32 +98,6 @@ public class ImsService extends Service { private static final String LOG_TAG = "ImsService"; /** - * This ImsService supports the capability to place emergency calls over MMTEL. - * @hide This is encoded into the {@link ImsFeature#FEATURE_EMERGENCY_MMTEL}, but we will be - * adding other capabilities in a central location, so track this capability here as well. - */ - public static final long CAPABILITY_EMERGENCY_OVER_MMTEL = 1 << 0; - - /** - * @hide - */ - @LongDef(flag = true, - prefix = "CAPABILITY_", - value = { - CAPABILITY_EMERGENCY_OVER_MMTEL - }) - @Retention(RetentionPolicy.SOURCE) - public @interface ImsServiceCapability {} - - /** - * Used for logging purposes, see {@link #getCapabilitiesString(long)} - * @hide - */ - private static final Map<Long, String> CAPABILITIES_LOG_MAP = new HashMap<Long, String>() {{ - put(CAPABILITY_EMERGENCY_OVER_MMTEL, "EMERGENCY_OVER_MMTEL"); - }}; - - /** * The intent that must be defined as an intent-filter in the AndroidManifest of the ImsService. * @hide */ @@ -441,30 +409,4 @@ public class ImsService extends Service { public ImsRegistrationImplBase getRegistration(int slotId) { return new ImsRegistrationImplBase(); } - - /** - * @return A string representation of the ImsService capabilties for logging. - * @hide - */ - public static String getCapabilitiesString(@ImsServiceCapability long caps) { - StringBuffer result = new StringBuffer(); - result.append("capabilities={ "); - // filter incrementally fills 0s from left to right. This is used to keep filtering out - // more bits in the long until the remaining leftmost bits are all zero. - long filter = 0xFFFFFFFFFFFFFFFFL; - // position of iterator to potentially print capability. - long i = 0; - while ((caps & filter) != 0 && i <= 63) { - long bitToCheck = (1L << i); - if ((caps & bitToCheck) != 0) { - result.append(CAPABILITIES_LOG_MAP.getOrDefault(bitToCheck, bitToCheck + "?")); - result.append(" "); - } - // shift left by one and fill in another 1 on the leftmost bit. - filter <<= 1; - i++; - } - result.append("}"); - return result.toString(); - } }
\ No newline at end of file diff --git a/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl b/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl index d012703b7510..9e461420e126 100644 --- a/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl +++ b/telephony/java/android/telephony/ims/aidl/IImsRcsController.aidl @@ -22,7 +22,6 @@ import android.telephony.ims.aidl.IRcsUceControllerCallback; import android.telephony.ims.aidl.IRcsUcePublishStateCallback; import android.telephony.ims.aidl.IImsRegistrationCallback; -import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.telephony.IIntegerConsumer; /** @@ -51,9 +50,4 @@ interface IImsRcsController { void setUceSettingEnabled(int subId, boolean isEnabled); void registerUcePublishStateCallback(int subId, IRcsUcePublishStateCallback c); void unregisterUcePublishStateCallback(int subId, IRcsUcePublishStateCallback c); - - // Internal commands that should not be made public - void registerRcsFeatureCallback(int slotId, in IImsServiceFeatureCallback callback, - boolean oneShot); - void unregisterImsFeatureCallback(in IImsServiceFeatureCallback callback); } diff --git a/telephony/java/com/android/ims/ImsFeatureContainer.aidl b/telephony/java/com/android/ims/ImsFeatureContainer.aidl deleted file mode 100644 index 9706f20c59ca..000000000000 --- a/telephony/java/com/android/ims/ImsFeatureContainer.aidl +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.ims; - -parcelable ImsFeatureContainer;
\ No newline at end of file diff --git a/telephony/java/com/android/ims/ImsFeatureContainer.java b/telephony/java/com/android/ims/ImsFeatureContainer.java deleted file mode 100644 index b259679ea1bf..000000000000 --- a/telephony/java/com/android/ims/ImsFeatureContainer.java +++ /dev/null @@ -1,172 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.ims; - -import android.annotation.NonNull; -import android.os.IBinder; -import android.os.Parcel; -import android.os.Parcelable; -import android.telephony.ims.ImsService; -import android.telephony.ims.aidl.IImsConfig; -import android.telephony.ims.aidl.IImsRegistration; -import android.telephony.ims.feature.ImsFeature; - -import java.util.Objects; - -/** - * Contains an IBinder linking to the appropriate ImsFeature as well as the associated - * interfaces. - * @hide - */ -public final class ImsFeatureContainer implements Parcelable { - /** - * ImsFeature that is being tracked. - */ - public final IBinder imsFeature; - - /** - * IImsConfig interface that should be associated with the ImsFeature. - */ - public final android.telephony.ims.aidl.IImsConfig imsConfig; - - /** - * IImsRegistration interface that should be associated with this ImsFeature. - */ - public final IImsRegistration imsRegistration; - - /** - * State of the feature that is being tracked. - */ - private @ImsFeature.ImsState int mState = ImsFeature.STATE_UNAVAILABLE; - - /** - * Capabilities of this ImsService. - */ - private @ImsService.ImsServiceCapability long mCapabilities; - /** - * Contains the ImsFeature IBinder as well as the ImsService interfaces associated with - * that feature. - * @param iFace IBinder connection to the ImsFeature. - * @param iConfig IImsConfig interface associated with the ImsFeature. - * @param iReg IImsRegistration interface associated with the ImsFeature - * @param initialCaps The initial capabilities that the ImsService supports. - */ - public ImsFeatureContainer(@NonNull IBinder iFace, @NonNull IImsConfig iConfig, - @NonNull IImsRegistration iReg, long initialCaps) { - imsFeature = iFace; - imsConfig = iConfig; - imsRegistration = iReg; - mCapabilities = initialCaps; - } - - /** - * Create an ImsFeatureContainer from a Parcel. - */ - private ImsFeatureContainer(Parcel in) { - imsFeature = in.readStrongBinder(); - imsConfig = IImsConfig.Stub.asInterface(in.readStrongBinder()); - imsRegistration = IImsRegistration.Stub.asInterface(in.readStrongBinder()); - mState = in.readInt(); - mCapabilities = in.readLong(); - } - - /** - * @return the capabilties that are associated with the ImsService that this ImsFeature - * belongs to. - */ - public @ImsService.ImsServiceCapability long getCapabilities() { - return mCapabilities; - } - - /** - * Update the capabilities that are associated with the ImsService that this ImsFeature - * belongs to. - */ - public void setCapabilities(@ImsService.ImsServiceCapability long caps) { - mCapabilities = caps; - } - - /** - * @return The state of the ImsFeature. - */ - public @ImsFeature.ImsState int getState() { - return mState; - } - - /** - * Set the state that is associated with the ImsService that this ImsFeature - * belongs to. - */ - public void setState(@ImsFeature.ImsState int state) { - mState = state; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - ImsFeatureContainer that = (ImsFeatureContainer) o; - return imsFeature.equals(that.imsFeature) && - imsConfig.equals(that.imsConfig) && - imsRegistration.equals(that.imsRegistration) && - mState == that.getState() && - mCapabilities == that.getCapabilities(); - } - - @Override - public int hashCode() { - return Objects.hash(imsFeature, imsConfig, imsRegistration, mState, mCapabilities); - } - - @Override - public String toString() { - return "FeatureContainer{" + - "imsFeature=" + imsFeature + - ", imsConfig=" + imsConfig + - ", imsRegistration=" + imsRegistration + - ", state=" + ImsFeature.STATE_LOG_MAP.get(mState) + - ", capabilities = " + ImsService.getCapabilitiesString(mCapabilities) + - '}'; - } - - @Override - public int describeContents() { - return 0; - } - - @Override - public void writeToParcel(Parcel dest, int flags) { - dest.writeStrongBinder(imsFeature); - dest.writeStrongInterface(imsConfig); - dest.writeStrongInterface(imsRegistration); - dest.writeInt(mState); - dest.writeLong(mCapabilities); - } - - - public static final Creator<ImsFeatureContainer> CREATOR = new Creator<ImsFeatureContainer>() { - @Override - public ImsFeatureContainer createFromParcel(Parcel source) { - return new ImsFeatureContainer(source); - } - - @Override - public ImsFeatureContainer[] newArray(int size) { - return new ImsFeatureContainer[size]; - } - }; -} diff --git a/telephony/java/com/android/ims/internal/IImsServiceFeatureCallback.aidl b/telephony/java/com/android/ims/internal/IImsServiceFeatureCallback.aidl index f5f67bd36ec3..9a9cf5325310 100644 --- a/telephony/java/com/android/ims/internal/IImsServiceFeatureCallback.aidl +++ b/telephony/java/com/android/ims/internal/IImsServiceFeatureCallback.aidl @@ -16,18 +16,13 @@ package com.android.ims.internal; -import com.android.ims.ImsFeatureContainer; /** - * Interface from ImsResolver to FeatureConnections. - * Callback to FeatureConnections when a feature's status changes. + * Interface from ImsResolver to ImsServiceProxy in ImsManager. + * Callback to ImsManager when a feature changes in the ImsServiceController. * {@hide} */ oneway interface IImsServiceFeatureCallback { - void imsFeatureCreated(in ImsFeatureContainer feature); - // Reason defined in FeatureConnector.UnavailableReason - void imsFeatureRemoved(int reason); - // Status defined in ImsFeature.ImsState. - void imsStatusChanged(int status); - //Capabilities defined in ImsService.ImsServiceCapability - void updateCapabilities(long capabilities); + void imsFeatureCreated(int slotId, int feature); + void imsFeatureRemoved(int slotId, int feature); + void imsStatusChanged(int slotId, int feature, int status); }
\ No newline at end of file diff --git a/telephony/java/com/android/internal/telephony/ITelephony.aidl b/telephony/java/com/android/internal/telephony/ITelephony.aidl index 815ec68b2c4d..ae1b5c1b50bd 100644 --- a/telephony/java/com/android/internal/telephony/ITelephony.aidl +++ b/telephony/java/com/android/internal/telephony/ITelephony.aidl @@ -828,15 +828,22 @@ interface ITelephony { * as well as registering the MmTelFeature for callbacks using the IImsServiceFeatureCallback * interface. */ - void registerMmTelFeatureCallback(int slotId, in IImsServiceFeatureCallback callback, - boolean oneShot); + IImsMmTelFeature getMmTelFeatureAndListen(int slotId, in IImsServiceFeatureCallback callback); + + /** + * Get IImsRcsFeature binder from ImsResolver that corresponds to the subId and RCS feature + * as well as registering the RcsFeature for callbacks using the IImsServiceFeatureCallback + * interface. + */ + IImsRcsFeature getRcsFeatureAndListen(int slotId, in IImsServiceFeatureCallback callback); /** * Unregister a callback that was previously registered through - * {@link #registerMmTelFeatureCallback}. This should always be called when the callback is no - * longer being used. + * {@link #getMmTelFeatureAndListen} or {@link #getRcsFeatureAndListen}. This should always be + * called when the callback is no longer being used. */ - void unregisterImsFeatureCallback(in IImsServiceFeatureCallback callback); + void unregisterImsFeatureCallback(int slotId, int featureType, + in IImsServiceFeatureCallback callback); /** * Returns the IImsRegistration associated with the slot and feature specified. |