From 32e446bf00bfab0df3a482bfc8dcaac680f590d9 Mon Sep 17 00:00:00 2001 From: Sooraj Sasindran Date: Mon, 6 Aug 2018 15:24:45 -0700 Subject: [PATCH] Introduce AlternativeNetwork APIs Introduce AlternativeNetwork APIs Bug: 113106744 Test: Verified using test app to make api calls Change-Id: I134d1aef40f014378fd1364e0bfec6926fe2093e Merged-In: I7f470cd6028a12cc66a660d58720f803271d38eb --- Android.bp | 1 + api/current.txt | 1 + .../telephony/SubscriptionManager.java | 11 ++-- .../android/telephony/TelephonyManager.java | 64 ++++++++++++++++++- .../com/android/internal/telephony/IAns.aidl | 52 +++++++++++++++ 5 files changed, 123 insertions(+), 6 deletions(-) create mode 100755 telephony/java/com/android/internal/telephony/IAns.aidl diff --git a/Android.bp b/Android.bp index ee593aac39ad4..f17e5020b6dbc 100644 --- a/Android.bp +++ b/Android.bp @@ -550,6 +550,7 @@ java_defaults { "telephony/java/com/android/internal/telephony/IPhoneSubInfo.aidl", "telephony/java/com/android/internal/telephony/ISms.aidl", "telephony/java/com/android/internal/telephony/ISub.aidl", + "telephony/java/com/android/internal/telephony/IAns.aidl", "telephony/java/com/android/internal/telephony/ITelephony.aidl", "telephony/java/com/android/internal/telephony/ITelephonyRegistry.aidl", "telephony/java/com/android/internal/telephony/IWapPushManager.aidl", diff --git a/api/current.txt b/api/current.txt index 7e3629274ba6f..c5c4911977a1d 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42637,6 +42637,7 @@ package android.telephony { method public static int getDefaultSubscriptionId(); method public static int getDefaultVoiceSubscriptionId(); method public static int[] getSubscriptionIds(int); + method public java.util.List getOpportunisticSubscriptions(int); method public java.util.List getSubscriptionPlans(int); method public boolean isActiveSubscriptionId(int); method public boolean isNetworkRoaming(int); diff --git a/telephony/java/android/telephony/SubscriptionManager.java b/telephony/java/android/telephony/SubscriptionManager.java index 3ef80c2efcb51..24a50775a7d15 100644 --- a/telephony/java/android/telephony/SubscriptionManager.java +++ b/telephony/java/android/telephony/SubscriptionManager.java @@ -2162,20 +2162,21 @@ public class SubscriptionManager { } /** - * Get User downloaded Profiles. + * Get opportunistic data Profiles. * - * Provide all available user downloaded profile on the phone. - * @param slotId on which phone the switch will operate on + * Provide all available user downloaded profiles on phone which are used only for + * opportunistic data. + * @param slotIndex slot on which the profiles are queried from. */ @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) - List getOpportunisticSubscriptions(int slotId) { + public List getOpportunisticSubscriptions(int slotIndex) { String pkgForDebug = mContext != null ? mContext.getOpPackageName() : ""; List subInfoList = null; try { ISub iSub = ISub.Stub.asInterface(ServiceManager.getService("isub")); if (iSub != null) { - subInfoList = iSub.getOpportunisticSubscriptions(slotId, pkgForDebug); + subInfoList = iSub.getOpportunisticSubscriptions(slotIndex, pkgForDebug); } } catch (RemoteException ex) { // ignore it diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index bba4868c54c1d..96a7cfb5a1fbe 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -66,6 +66,7 @@ import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telecom.ITelecomService; import com.android.internal.telephony.CellNetworkScanResult; +import com.android.internal.telephony.IAns; import com.android.internal.telephony.IPhoneSubInfo; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.ITelephonyRegistry; @@ -4412,6 +4413,10 @@ public class TelephonyManager { return ITelephonyRegistry.Stub.asInterface(ServiceManager.getService("telephony.registry")); } + private IAns getIAns() { + return IAns.Stub.asInterface(ServiceManager.getService("ians")); + } + // // // PhoneStateListener @@ -8580,7 +8585,6 @@ public class TelephonyManager { return UNKNOWN_CARRIER_ID_LIST_VERSION; } - /** * How many modems can have simultaneous data connections. * @hide @@ -8598,4 +8602,62 @@ public class TelephonyManager { } return 0; } + + /** + * Enable or disable AlternativeNetworkService. + * + * This method should be called to enable or disable + * AlternativeNetwork service on the device. + * + *

+ * Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * + * @param enable enable(True) or disable(False) + * @return returns true if successfully set. + * @hide + */ + @RequiresPermission(android.Manifest.permission.MODIFY_PHONE_STATE) + public boolean setAlternativeNetworkState(boolean enable) { + String pkgForDebug = mContext != null ? mContext.getOpPackageName() : ""; + boolean ret = false; + try { + IAns iAlternativeNetworkService = getIAns(); + if (iAlternativeNetworkService != null) { + ret = iAlternativeNetworkService.setEnable(enable, pkgForDebug); + } + } catch (RemoteException ex) { + Rlog.e(TAG, "enableAlternativeNetwork RemoteException", ex); + } + + return ret; + } + + /** + * is AlternativeNetworkService enabled + * + * This method should be called to determine if the AlternativeNetworkService is + * enabled + * + *

+ * Requires Permission: + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} + * @hide + */ + @RequiresPermission(android.Manifest.permission.READ_PHONE_STATE) + public boolean isAlternativeNetworkEnabled() { + String pkgForDebug = mContext != null ? mContext.getOpPackageName() : ""; + boolean isEnabled = false; + + try { + IAns iAlternativeNetworkService = getIAns(); + if (iAlternativeNetworkService != null) { + isEnabled = iAlternativeNetworkService.isEnabled(pkgForDebug); + } + } catch (RemoteException ex) { + Rlog.e(TAG, "enableAlternativeNetwork RemoteException", ex); + } + + return isEnabled; + } } diff --git a/telephony/java/com/android/internal/telephony/IAns.aidl b/telephony/java/com/android/internal/telephony/IAns.aidl new file mode 100755 index 0000000000000..6eb8d666cb1e1 --- /dev/null +++ b/telephony/java/com/android/internal/telephony/IAns.aidl @@ -0,0 +1,52 @@ +/* + * 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 com.android.internal.telephony; + + +interface IAns { + + /** + * Enable or disable Alternative Network service. + * + * This method should be called to enable or disable + * AlternativeNetwork service on the device. + * + *

+ * Requires Permission: + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param enable enable(True) or disable(False) + * @param callingPackage caller's package name + * @return returns true if successfully set. + */ + boolean setEnable(boolean enable, String callingPackage); + + /** + * is Alternative Network service enabled + * + * This method should be called to determine if the Alternative Network service is enabled + * + *

+ * Requires Permission: + * {@link android.Manifest.permission#READ_PHONE_STATE READ_PHONE_STATE} + * Or the calling app has carrier privileges. @see #hasCarrierPrivileges + * + * @param callingPackage caller's package name + */ + boolean isEnabled(String callingPackage); +}