Loading api/system-current.txt +16 −0 Original line number Diff line number Diff line Loading @@ -6236,6 +6236,22 @@ package android.telephony.ims { method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile); } public class ProvisioningManager { method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(android.content.Context, int); method public int getProvisioningIntValue(int); method public java.lang.String getProvisioningStringValue(int); method public void registerProvisioningChangedCallback(java.util.concurrent.Executor, android.telephony.ims.ProvisioningManager.Callback); method public int setProvisioningIntValue(int, int); method public int setProvisioningStringValue(int, java.lang.String); method public void unregisterProvisioningChangedCallback(android.telephony.ims.ProvisioningManager.Callback); } public static class ProvisioningManager.Callback { ctor public ProvisioningManager.Callback(); method public void onProvisioningIntChanged(int, int); method public void onProvisioningStringChanged(int, java.lang.String); } } package android.telephony.ims.feature { Loading telephony/java/android/telephony/ims/ImsMmTelManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -292,7 +292,7 @@ public class ImsMmTelManager { * Create an instance of ImsManager for the subscription id specified. * * @param context * @param subId The ID of the subscription that this ImsManager will use. * @param subId The ID of the subscription that this ImsMmTelManager will use. * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid or * the subscription ID is not an active subscription. Loading telephony/java/android/telephony/ims/ProvisioningManager.java 0 → 100644 +252 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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 android.telephony.ims; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.SubscriptionManager; import android.telephony.ims.aidl.IImsConfigCallback; import android.telephony.ims.stub.ImsConfigImplBase; import com.android.internal.telephony.ITelephony; import java.util.concurrent.Executor; /** * Manages IMS provisioning and configuration parameters, as well as callbacks for apps to listen * to changes in these configurations. * * Note: IMS provisioning keys are defined per carrier or OEM using OMA-DM or other provisioning * applications and may vary. * @hide */ @SystemApi public class ProvisioningManager { /** * Callback for IMS provisioning changes. */ public static class Callback { private static class CallbackBinder extends IImsConfigCallback.Stub { private final Callback mLocalConfigurationCallback; private Executor mExecutor; private CallbackBinder(Callback localConfigurationCallback) { mLocalConfigurationCallback = localConfigurationCallback; } @Override public final void onIntConfigChanged(int item, int value) { Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mLocalConfigurationCallback.onProvisioningIntChanged(item, value))); } @Override public final void onStringConfigChanged(int item, String value) { Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mLocalConfigurationCallback.onProvisioningStringChanged(item, value))); } private void setExecutor(Executor executor) { mExecutor = executor; } } private final CallbackBinder mBinder = new CallbackBinder(this); /** * Called when a provisioning item has changed. * @param item the IMS provisioning key constant, as defined by the OEM. * @param value the new integer value of the IMS provisioning key. */ public void onProvisioningIntChanged(int item, int value) { // Base Implementation } /** * Called when a provisioning item has changed. * @param item the IMS provisioning key constant, as defined by the OEM. * @param value the new String value of the IMS configuration constant. */ public void onProvisioningStringChanged(int item, String value) { // Base Implementation } /**@hide*/ public final IImsConfigCallback getBinder() { return mBinder; } /**@hide*/ public void setExecutor(Executor executor) { mBinder.setExecutor(executor); } } private int mSubId; /** * Create a new {@link ProvisioningManager} for the subscription specified. * @param context The context that this manager will use. * @param subId The ID of the subscription that this ProvisioningManager will use. * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid or * the subscription ID is not an active subscription. */ public static ProvisioningManager createForSubscriptionId(Context context, int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId) || !getSubscriptionManager(context).isActiveSubscriptionId(subId)) { throw new IllegalArgumentException("Invalid subscription ID"); } return new ProvisioningManager(subId); } private ProvisioningManager(int subId) { mSubId = subId; } /** * Register a new {@link Callback} to listen to changes to changes in * IMS provisioning. Use {@link SubscriptionManager.OnSubscriptionsChangedListener} to listen to * Subscription changed events and call * {@link #unregisterProvisioningChangedCallback(Callback)} to clean up after a * subscription is removed. * @param executor The {@link Executor} to call the callback methods on * @param callback The provisioning callbackto be registered. * @see #unregisterProvisioningChangedCallback(Callback) * @see SubscriptionManager.OnSubscriptionsChangedListener */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@CallbackExecutor Executor executor, @NonNull Callback callback) { callback.setExecutor(executor); try { getITelephony().registerImsProvisioningChangedCallback(mSubId, callback.getBinder()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Unregister an existing {@link Callback}. Ensure to call this method when cleaning * up to avoid memory leaks or when the subscription is removed. * @param callback The existing {@link Callback} to be removed. * @see #registerProvisioningChangedCallback(Executor, Callback) */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull Callback callback) { try { getITelephony().unregisterImsProvisioningChangedCallback(mSubId, callback.getBinder()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Query for the integer value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @return an integer value for the provided key. * @throws IllegalArgumentException if the key provided was invalid. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getProvisioningIntValue(int key) { try { return getITelephony().getImsProvisioningInt(mSubId, key); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Query for the String value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @return a String value for the provided key, or {@code null} if the key doesn't exist. * @throws IllegalArgumentException if the key provided was invalid. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getProvisioningStringValue(int key) { try { return getITelephony().getImsProvisioningString(mSubId, key); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Set the integer value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @param value a integer value for the provided key. * @return the result of setting the configuration value. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public @ImsConfigImplBase.SetConfigResult int setProvisioningIntValue(int key, int value) { try { return getITelephony().setImsProvisioningInt(mSubId, key, value); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Set the String value associated with the provided key. * * @param key An integer that represents the provisioning key, which is defined by the OEM. * @param value a String value for the provided key. * @return the result of setting the configuration value. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public @ImsConfigImplBase.SetConfigResult int setProvisioningStringValue(int key, String value) { try { return getITelephony().setImsProvisioningString(mSubId, key, value); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } private static SubscriptionManager getSubscriptionManager(Context context) { SubscriptionManager manager = context.getSystemService(SubscriptionManager.class); if (manager == null) { throw new RuntimeException("Could not find SubscriptionManager."); } return manager; } private static ITelephony getITelephony() { ITelephony binder = ITelephony.Stub.asInterface( ServiceManager.getService(Context.TELEPHONY_SERVICE)); if (binder == null) { throw new RuntimeException("Could not find Telephony Service."); } return binder; } } telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java +21 −47 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.telephony.ims.stub; import android.annotation.IntDef; import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.telephony.ims.aidl.IImsConfig; Loading @@ -28,6 +28,8 @@ import android.util.Log; import com.android.ims.ImsConfig; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.util.HashMap; Loading Loading @@ -214,41 +216,6 @@ public class ImsConfigImplBase { } } /** * Callback that the framework uses for receiving Configuration change updates. * {@hide} */ public static class Callback extends IImsConfigCallback.Stub { @Override public final void onIntConfigChanged(int item, int value) throws RemoteException { onConfigChanged(item, value); } @Override public final void onStringConfigChanged(int item, String value) throws RemoteException { onConfigChanged(item, value); } /** * Called when the IMS configuration has changed. * @param item the IMS configuration key constant, as defined in ImsConfig. * @param value the new integer value of the IMS configuration constant. */ public void onConfigChanged(int item, int value) { // Base Implementation } /** * Called when the IMS configuration has changed. * @param item the IMS configuration key constant, as defined in ImsConfig. * @param value the new String value of the IMS configuration constant. */ public void onConfigChanged(int item, String value) { // Base Implementation } } /** * The configuration requested resulted in an unknown result. This may happen if the * IMS configurations are unavailable. Loading @@ -263,6 +230,16 @@ public class ImsConfigImplBase { */ public static final int CONFIG_RESULT_FAILED = 1; /** * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = "CONFIG_RESULT_", value = { CONFIG_RESULT_SUCCESS, CONFIG_RESULT_FAILED }) public @interface SetConfigResult {} private final RemoteCallbackList<IImsConfigCallback> mCallbacks = new RemoteCallbackList<>(); ImsConfigStub mImsConfigStub; Loading @@ -279,17 +256,16 @@ public class ImsConfigImplBase { } /** * Adds a {@link Callback} to the list of callbacks notified when a value in the configuration * changes. * Adds a {@link android.telephony.ims.ProvisioningManager.Callback} to the list of callbacks * notified when a value in the configuration changes. * @param c callback to add. */ private void addImsConfigCallback(IImsConfigCallback c) { mCallbacks.register(c); } /** * Removes a {@link Callback} to the list of callbacks notified when a value in the * configuration changes. * * Removes a {@link android.telephony.ims.ProvisioningManager.Callback} to the list of callbacks * notified when a value in the configuration changes. * @param c callback to remove. */ private void removeImsConfigCallback(IImsConfigCallback c) { Loading Loading @@ -370,10 +346,9 @@ public class ImsConfigImplBase { * * @param item an integer key. * @param value an integer containing the configuration value. * @return the result of setting the configuration value, defined as either * {@link #CONFIG_RESULT_FAILED} or {@link #CONFIG_RESULT_SUCCESS}. * @return the result of setting the configuration value. */ public int setConfig(int item, int value) { public @SetConfigResult int setConfig(int item, int value) { // Base Implementation - To be overridden. return CONFIG_RESULT_FAILED; } Loading @@ -383,10 +358,9 @@ public class ImsConfigImplBase { * * @param item an integer key. * @param value a String containing the new configuration value. * @return Result of setting the configuration value, defined as either * {@link #CONFIG_RESULT_FAILED} or {@link #CONFIG_RESULT_SUCCESS}. * @return Result of setting the configuration value. */ public int setConfig(int item, String value) { public @SetConfigResult int setConfig(int item, String value) { // Base Implementation - To be overridden. return CONFIG_RESULT_FAILED; } Loading telephony/java/com/android/ims/ImsConfig.java +34 −9 Original line number Diff line number Diff line Loading @@ -16,12 +16,17 @@ package com.android.ims; import android.content.Context; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; import android.os.RemoteException; import android.telephony.Rlog; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.aidl.IImsConfig; import android.telephony.ims.stub.ImsConfigImplBase; import android.telephony.ims.aidl.IImsConfigCallback; import java.util.concurrent.Executor; /** * Provides APIs to get/set the IMS service feature/capability/parameters. Loading @@ -29,8 +34,10 @@ import android.telephony.ims.stub.ImsConfigImplBase; * 1) Items provisioned by the operator. * 2) Items configured by user. Mainly service feature class. * * @deprecated Use {@link ProvisioningManager} to change these configurations in the ImsService. * @hide */ @Deprecated public class ImsConfig { private static final String TAG = "ImsConfig"; private boolean DBG = true; Loading @@ -46,7 +53,7 @@ public class ImsConfig { /** * Broadcast action: the configuration was changed * @deprecated Use {@link ImsConfig#addConfigCallback(ImsConfigImplBase.Callback)} instead. * @deprecated Use {@link android.telephony.ims.ProvisioningManager.Callback} instead. * @hide */ public static final String ACTION_IMS_CONFIG_CHANGED = Loading Loading @@ -673,13 +680,25 @@ public class ImsConfig { } /** * Adds a {@link ImsConfigImplBase.Callback} to the ImsService to notify when a Configuration * Adds a {@link ProvisioningManager.Callback} to the ImsService to notify when a Configuration * item has changed. * * Make sure to call {@link #removeConfigCallback(ImsConfigImplBase.Callback)} when finished * Make sure to call {@link #removeConfigCallback(IImsConfigCallback)} when finished * using this callback. */ public void addConfigCallback(ImsConfigImplBase.Callback callback) throws ImsException { public void addConfigCallback(ProvisioningManager.Callback callback) throws ImsException { callback.setExecutor(getThreadExecutor()); addConfigCallback(callback.getBinder()); } /** * Adds a {@link IImsConfigCallback} to the ImsService to notify when a Configuration * item has changed. * * Make sure to call {@link #removeConfigCallback(IImsConfigCallback)} when finished * using this callback. */ public void addConfigCallback(IImsConfigCallback callback) throws ImsException { if (DBG) Rlog.d(TAG, "addConfigCallback: " + callback); try { miConfig.addImsConfigCallback(callback); Loading @@ -690,10 +709,9 @@ public class ImsConfig { } /** * Removes a {@link ImsConfigImplBase.Callback} from the ImsService that was previously added * by {@link #addConfigCallback(ImsConfigImplBase.Callback)}. * Removes an existing {@link IImsConfigCallback} from the ImsService. */ public void removeConfigCallback(ImsConfigImplBase.Callback callback) throws ImsException { public void removeConfigCallback(IImsConfigCallback callback) throws ImsException { if (DBG) Rlog.d(TAG, "removeConfigCallback: " + callback); try { miConfig.removeImsConfigCallback(callback); Loading @@ -709,4 +727,11 @@ public class ImsConfig { public boolean isBinderAlive() { return miConfig.asBinder().isBinderAlive(); } private Executor getThreadExecutor() { if (Looper.myLooper() == null) { Looper.prepare(); } return new HandlerExecutor(new Handler(Looper.myLooper())); } } Loading
api/system-current.txt +16 −0 Original line number Diff line number Diff line Loading @@ -6236,6 +6236,22 @@ package android.telephony.ims { method public void receiveSessionModifyResponse(int, android.telecom.VideoProfile, android.telecom.VideoProfile); } public class ProvisioningManager { method public static android.telephony.ims.ProvisioningManager createForSubscriptionId(android.content.Context, int); method public int getProvisioningIntValue(int); method public java.lang.String getProvisioningStringValue(int); method public void registerProvisioningChangedCallback(java.util.concurrent.Executor, android.telephony.ims.ProvisioningManager.Callback); method public int setProvisioningIntValue(int, int); method public int setProvisioningStringValue(int, java.lang.String); method public void unregisterProvisioningChangedCallback(android.telephony.ims.ProvisioningManager.Callback); } public static class ProvisioningManager.Callback { ctor public ProvisioningManager.Callback(); method public void onProvisioningIntChanged(int, int); method public void onProvisioningStringChanged(int, java.lang.String); } } package android.telephony.ims.feature { Loading
telephony/java/android/telephony/ims/ImsMmTelManager.java +1 −1 Original line number Diff line number Diff line Loading @@ -292,7 +292,7 @@ public class ImsMmTelManager { * Create an instance of ImsManager for the subscription id specified. * * @param context * @param subId The ID of the subscription that this ImsManager will use. * @param subId The ID of the subscription that this ImsMmTelManager will use. * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid or * the subscription ID is not an active subscription. Loading
telephony/java/android/telephony/ims/ProvisioningManager.java 0 → 100644 +252 −0 Original line number Diff line number Diff line /* * Copyright (C) 2018 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 android.telephony.ims; import android.Manifest; import android.annotation.CallbackExecutor; import android.annotation.NonNull; import android.annotation.RequiresPermission; import android.annotation.SystemApi; import android.content.Context; import android.os.Binder; import android.os.RemoteException; import android.os.ServiceManager; import android.telephony.SubscriptionManager; import android.telephony.ims.aidl.IImsConfigCallback; import android.telephony.ims.stub.ImsConfigImplBase; import com.android.internal.telephony.ITelephony; import java.util.concurrent.Executor; /** * Manages IMS provisioning and configuration parameters, as well as callbacks for apps to listen * to changes in these configurations. * * Note: IMS provisioning keys are defined per carrier or OEM using OMA-DM or other provisioning * applications and may vary. * @hide */ @SystemApi public class ProvisioningManager { /** * Callback for IMS provisioning changes. */ public static class Callback { private static class CallbackBinder extends IImsConfigCallback.Stub { private final Callback mLocalConfigurationCallback; private Executor mExecutor; private CallbackBinder(Callback localConfigurationCallback) { mLocalConfigurationCallback = localConfigurationCallback; } @Override public final void onIntConfigChanged(int item, int value) { Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mLocalConfigurationCallback.onProvisioningIntChanged(item, value))); } @Override public final void onStringConfigChanged(int item, String value) { Binder.withCleanCallingIdentity(() -> mExecutor.execute(() -> mLocalConfigurationCallback.onProvisioningStringChanged(item, value))); } private void setExecutor(Executor executor) { mExecutor = executor; } } private final CallbackBinder mBinder = new CallbackBinder(this); /** * Called when a provisioning item has changed. * @param item the IMS provisioning key constant, as defined by the OEM. * @param value the new integer value of the IMS provisioning key. */ public void onProvisioningIntChanged(int item, int value) { // Base Implementation } /** * Called when a provisioning item has changed. * @param item the IMS provisioning key constant, as defined by the OEM. * @param value the new String value of the IMS configuration constant. */ public void onProvisioningStringChanged(int item, String value) { // Base Implementation } /**@hide*/ public final IImsConfigCallback getBinder() { return mBinder; } /**@hide*/ public void setExecutor(Executor executor) { mBinder.setExecutor(executor); } } private int mSubId; /** * Create a new {@link ProvisioningManager} for the subscription specified. * @param context The context that this manager will use. * @param subId The ID of the subscription that this ProvisioningManager will use. * @see android.telephony.SubscriptionManager#getActiveSubscriptionInfoList() * @throws IllegalArgumentException if the subscription is invalid or * the subscription ID is not an active subscription. */ public static ProvisioningManager createForSubscriptionId(Context context, int subId) { if (!SubscriptionManager.isValidSubscriptionId(subId) || !getSubscriptionManager(context).isActiveSubscriptionId(subId)) { throw new IllegalArgumentException("Invalid subscription ID"); } return new ProvisioningManager(subId); } private ProvisioningManager(int subId) { mSubId = subId; } /** * Register a new {@link Callback} to listen to changes to changes in * IMS provisioning. Use {@link SubscriptionManager.OnSubscriptionsChangedListener} to listen to * Subscription changed events and call * {@link #unregisterProvisioningChangedCallback(Callback)} to clean up after a * subscription is removed. * @param executor The {@link Executor} to call the callback methods on * @param callback The provisioning callbackto be registered. * @see #unregisterProvisioningChangedCallback(Callback) * @see SubscriptionManager.OnSubscriptionsChangedListener */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void registerProvisioningChangedCallback(@CallbackExecutor Executor executor, @NonNull Callback callback) { callback.setExecutor(executor); try { getITelephony().registerImsProvisioningChangedCallback(mSubId, callback.getBinder()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Unregister an existing {@link Callback}. Ensure to call this method when cleaning * up to avoid memory leaks or when the subscription is removed. * @param callback The existing {@link Callback} to be removed. * @see #registerProvisioningChangedCallback(Executor, Callback) */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public void unregisterProvisioningChangedCallback(@NonNull Callback callback) { try { getITelephony().unregisterImsProvisioningChangedCallback(mSubId, callback.getBinder()); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Query for the integer value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @return an integer value for the provided key. * @throws IllegalArgumentException if the key provided was invalid. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public int getProvisioningIntValue(int key) { try { return getITelephony().getImsProvisioningInt(mSubId, key); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Query for the String value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @return a String value for the provided key, or {@code null} if the key doesn't exist. * @throws IllegalArgumentException if the key provided was invalid. */ @RequiresPermission(Manifest.permission.READ_PRIVILEGED_PHONE_STATE) public String getProvisioningStringValue(int key) { try { return getITelephony().getImsProvisioningString(mSubId, key); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Set the integer value associated with the provided key. * @param key An integer that represents the provisioning key, which is defined by the OEM. * @param value a integer value for the provided key. * @return the result of setting the configuration value. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public @ImsConfigImplBase.SetConfigResult int setProvisioningIntValue(int key, int value) { try { return getITelephony().setImsProvisioningInt(mSubId, key, value); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } /** * Set the String value associated with the provided key. * * @param key An integer that represents the provisioning key, which is defined by the OEM. * @param value a String value for the provided key. * @return the result of setting the configuration value. */ @RequiresPermission(Manifest.permission.MODIFY_PHONE_STATE) public @ImsConfigImplBase.SetConfigResult int setProvisioningStringValue(int key, String value) { try { return getITelephony().setImsProvisioningString(mSubId, key, value); } catch (RemoteException e) { throw e.rethrowAsRuntimeException(); } } private static SubscriptionManager getSubscriptionManager(Context context) { SubscriptionManager manager = context.getSystemService(SubscriptionManager.class); if (manager == null) { throw new RuntimeException("Could not find SubscriptionManager."); } return manager; } private static ITelephony getITelephony() { ITelephony binder = ITelephony.Stub.asInterface( ServiceManager.getService(Context.TELEPHONY_SERVICE)); if (binder == null) { throw new RuntimeException("Could not find Telephony Service."); } return binder; } }
telephony/java/android/telephony/ims/stub/ImsConfigImplBase.java +21 −47 Original line number Diff line number Diff line Loading @@ -16,9 +16,9 @@ package android.telephony.ims.stub; import android.annotation.IntDef; import android.annotation.SystemApi; import android.content.Context; import android.content.Intent; import android.os.RemoteCallbackList; import android.os.RemoteException; import android.telephony.ims.aidl.IImsConfig; Loading @@ -28,6 +28,8 @@ import android.util.Log; import com.android.ims.ImsConfig; import com.android.internal.annotations.VisibleForTesting; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.ref.WeakReference; import java.util.HashMap; Loading Loading @@ -214,41 +216,6 @@ public class ImsConfigImplBase { } } /** * Callback that the framework uses for receiving Configuration change updates. * {@hide} */ public static class Callback extends IImsConfigCallback.Stub { @Override public final void onIntConfigChanged(int item, int value) throws RemoteException { onConfigChanged(item, value); } @Override public final void onStringConfigChanged(int item, String value) throws RemoteException { onConfigChanged(item, value); } /** * Called when the IMS configuration has changed. * @param item the IMS configuration key constant, as defined in ImsConfig. * @param value the new integer value of the IMS configuration constant. */ public void onConfigChanged(int item, int value) { // Base Implementation } /** * Called when the IMS configuration has changed. * @param item the IMS configuration key constant, as defined in ImsConfig. * @param value the new String value of the IMS configuration constant. */ public void onConfigChanged(int item, String value) { // Base Implementation } } /** * The configuration requested resulted in an unknown result. This may happen if the * IMS configurations are unavailable. Loading @@ -263,6 +230,16 @@ public class ImsConfigImplBase { */ public static final int CONFIG_RESULT_FAILED = 1; /** * @hide */ @Retention(RetentionPolicy.SOURCE) @IntDef(prefix = "CONFIG_RESULT_", value = { CONFIG_RESULT_SUCCESS, CONFIG_RESULT_FAILED }) public @interface SetConfigResult {} private final RemoteCallbackList<IImsConfigCallback> mCallbacks = new RemoteCallbackList<>(); ImsConfigStub mImsConfigStub; Loading @@ -279,17 +256,16 @@ public class ImsConfigImplBase { } /** * Adds a {@link Callback} to the list of callbacks notified when a value in the configuration * changes. * Adds a {@link android.telephony.ims.ProvisioningManager.Callback} to the list of callbacks * notified when a value in the configuration changes. * @param c callback to add. */ private void addImsConfigCallback(IImsConfigCallback c) { mCallbacks.register(c); } /** * Removes a {@link Callback} to the list of callbacks notified when a value in the * configuration changes. * * Removes a {@link android.telephony.ims.ProvisioningManager.Callback} to the list of callbacks * notified when a value in the configuration changes. * @param c callback to remove. */ private void removeImsConfigCallback(IImsConfigCallback c) { Loading Loading @@ -370,10 +346,9 @@ public class ImsConfigImplBase { * * @param item an integer key. * @param value an integer containing the configuration value. * @return the result of setting the configuration value, defined as either * {@link #CONFIG_RESULT_FAILED} or {@link #CONFIG_RESULT_SUCCESS}. * @return the result of setting the configuration value. */ public int setConfig(int item, int value) { public @SetConfigResult int setConfig(int item, int value) { // Base Implementation - To be overridden. return CONFIG_RESULT_FAILED; } Loading @@ -383,10 +358,9 @@ public class ImsConfigImplBase { * * @param item an integer key. * @param value a String containing the new configuration value. * @return Result of setting the configuration value, defined as either * {@link #CONFIG_RESULT_FAILED} or {@link #CONFIG_RESULT_SUCCESS}. * @return Result of setting the configuration value. */ public int setConfig(int item, String value) { public @SetConfigResult int setConfig(int item, String value) { // Base Implementation - To be overridden. return CONFIG_RESULT_FAILED; } Loading
telephony/java/com/android/ims/ImsConfig.java +34 −9 Original line number Diff line number Diff line Loading @@ -16,12 +16,17 @@ package com.android.ims; import android.content.Context; import android.os.Handler; import android.os.HandlerExecutor; import android.os.Looper; import android.os.RemoteException; import android.telephony.Rlog; import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.aidl.IImsConfig; import android.telephony.ims.stub.ImsConfigImplBase; import android.telephony.ims.aidl.IImsConfigCallback; import java.util.concurrent.Executor; /** * Provides APIs to get/set the IMS service feature/capability/parameters. Loading @@ -29,8 +34,10 @@ import android.telephony.ims.stub.ImsConfigImplBase; * 1) Items provisioned by the operator. * 2) Items configured by user. Mainly service feature class. * * @deprecated Use {@link ProvisioningManager} to change these configurations in the ImsService. * @hide */ @Deprecated public class ImsConfig { private static final String TAG = "ImsConfig"; private boolean DBG = true; Loading @@ -46,7 +53,7 @@ public class ImsConfig { /** * Broadcast action: the configuration was changed * @deprecated Use {@link ImsConfig#addConfigCallback(ImsConfigImplBase.Callback)} instead. * @deprecated Use {@link android.telephony.ims.ProvisioningManager.Callback} instead. * @hide */ public static final String ACTION_IMS_CONFIG_CHANGED = Loading Loading @@ -673,13 +680,25 @@ public class ImsConfig { } /** * Adds a {@link ImsConfigImplBase.Callback} to the ImsService to notify when a Configuration * Adds a {@link ProvisioningManager.Callback} to the ImsService to notify when a Configuration * item has changed. * * Make sure to call {@link #removeConfigCallback(ImsConfigImplBase.Callback)} when finished * Make sure to call {@link #removeConfigCallback(IImsConfigCallback)} when finished * using this callback. */ public void addConfigCallback(ImsConfigImplBase.Callback callback) throws ImsException { public void addConfigCallback(ProvisioningManager.Callback callback) throws ImsException { callback.setExecutor(getThreadExecutor()); addConfigCallback(callback.getBinder()); } /** * Adds a {@link IImsConfigCallback} to the ImsService to notify when a Configuration * item has changed. * * Make sure to call {@link #removeConfigCallback(IImsConfigCallback)} when finished * using this callback. */ public void addConfigCallback(IImsConfigCallback callback) throws ImsException { if (DBG) Rlog.d(TAG, "addConfigCallback: " + callback); try { miConfig.addImsConfigCallback(callback); Loading @@ -690,10 +709,9 @@ public class ImsConfig { } /** * Removes a {@link ImsConfigImplBase.Callback} from the ImsService that was previously added * by {@link #addConfigCallback(ImsConfigImplBase.Callback)}. * Removes an existing {@link IImsConfigCallback} from the ImsService. */ public void removeConfigCallback(ImsConfigImplBase.Callback callback) throws ImsException { public void removeConfigCallback(IImsConfigCallback callback) throws ImsException { if (DBG) Rlog.d(TAG, "removeConfigCallback: " + callback); try { miConfig.removeImsConfigCallback(callback); Loading @@ -709,4 +727,11 @@ public class ImsConfig { public boolean isBinderAlive() { return miConfig.asBinder().isBinderAlive(); } private Executor getThreadExecutor() { if (Looper.myLooper() == null) { Looper.prepare(); } return new HandlerExecutor(new Handler(Looper.myLooper())); } }