diff options
-rwxr-xr-x | api/current.txt | 14 | ||||
-rw-r--r-- | telephony/java/android/telephony/AvailableNetworkInfo.aidl | 19 | ||||
-rw-r--r-- | telephony/java/android/telephony/AvailableNetworkInfo.java | 168 | ||||
-rw-r--r-- | telephony/java/android/telephony/TelephonyManager.java | 30 | ||||
-rwxr-xr-x | telephony/java/com/android/internal/telephony/IAns.aidl | 20 |
5 files changed, 251 insertions, 0 deletions
diff --git a/api/current.txt b/api/current.txt index 31a5443a4e84..3580fa520f22 100755 --- a/api/current.txt +++ b/api/current.txt @@ -42028,6 +42028,19 @@ package android.telephony { field public static final int BAND_9 = 9; // 0x9 } + public final class AvailableNetworkInfo implements android.os.Parcelable { + ctor public AvailableNetworkInfo(int, int, java.util.ArrayList<java.lang.String>); + method public int describeContents(); + method public java.util.List<java.lang.String> getMccMncs(); + method public int getPriority(); + method public int getSubId(); + method public void writeToParcel(android.os.Parcel, int); + field public static final android.os.Parcelable.Creator<android.telephony.AvailableNetworkInfo> CREATOR; + field public static final int PRIORITY_HIGH = 1; // 0x1 + field public static final int PRIORITY_LOW = 3; // 0x3 + field public static final int PRIORITY_MED = 2; // 0x2 + } + public class CarrierConfigManager { method public android.os.PersistableBundle getConfig(); method public android.os.PersistableBundle getConfigForSubId(int); @@ -43006,6 +43019,7 @@ package android.telephony { method public boolean setVoiceMailNumber(java.lang.String, java.lang.String); method public deprecated void setVoicemailRingtoneUri(android.telecom.PhoneAccountHandle, android.net.Uri); method public deprecated void setVoicemailVibrationEnabled(android.telecom.PhoneAccountHandle, boolean); + method public boolean updateAvailableNetworks(java.util.List<android.telephony.AvailableNetworkInfo>); field public static final java.lang.String ACTION_CONFIGURE_VOICEMAIL = "android.telephony.action.CONFIGURE_VOICEMAIL"; field public static final java.lang.String ACTION_PHONE_STATE_CHANGED = "android.intent.action.PHONE_STATE"; field public static final java.lang.String ACTION_RESPOND_VIA_MESSAGE = "android.intent.action.RESPOND_VIA_MESSAGE"; diff --git a/telephony/java/android/telephony/AvailableNetworkInfo.aidl b/telephony/java/android/telephony/AvailableNetworkInfo.aidl new file mode 100644 index 000000000000..1d4378c502a3 --- /dev/null +++ b/telephony/java/android/telephony/AvailableNetworkInfo.aidl @@ -0,0 +1,19 @@ +/* + * 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; + +parcelable AvailableNetworkInfo; diff --git a/telephony/java/android/telephony/AvailableNetworkInfo.java b/telephony/java/android/telephony/AvailableNetworkInfo.java new file mode 100644 index 000000000000..fe07370394ad --- /dev/null +++ b/telephony/java/android/telephony/AvailableNetworkInfo.java @@ -0,0 +1,168 @@ +/* + * 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; + +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Objects; + +/** + * Defines available network information which includes corresponding subscription id, + * network plmns and corresponding priority to be used for network selection by Alternative Network + * Service. + */ +public final class AvailableNetworkInfo implements Parcelable { + + /* + * Defines number of priority level high. + */ + public static final int PRIORITY_HIGH = 1; + + /* + * Defines number of priority level medium. + */ + public static final int PRIORITY_MED = 2; + + /* + * Defines number of priority level low. + */ + public static final int PRIORITY_LOW = 3; + + /** + * subscription Id of the available network. This value must be one of the entry retrieved from + * {@link SubscriptionManager#getOpportunisticSubscriptions} + */ + private int mSubId; + + /** + * Priority for the subscription id. + * Priorities are in the range of 1 to 3 where 1 + * has the highest priority. + */ + private int mPriority; + + /** + * Describes the List of PLMN ids (MCC-MNC) associated with mSubId. + * If this entry is left empty, then the platform software will not scan the network + * to revalidate the input. + */ + private ArrayList<String> mMccMncs; + + /** + * Return subscription Id of the available network. + * This value must be one of the entry retrieved from + * {@link SubscriptionManager#getOpportunisticSubscriptions} + * @return subscription id + */ + public int getSubId() { + return mSubId; + } + + /** + * Return priority for the subscription id. Valid value will be within + * [{@link AvailableNetworkInfo#PRIORITY_HIGH}, {@link AvailableNetworkInfo#PRIORITY_LOW}] + * @return priority level + */ + public int getPriority() { + return mPriority; + } + + /** + * Return List of PLMN ids (MCC-MNC) associated with the sub ID. + * If this entry is left empty, then the platform software will not scan the network + * to revalidate the input. + * @return list of PLMN ids + */ + public List<String> getMccMncs() { + return (List<String>) mMccMncs.clone(); + } + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeInt(mSubId); + dest.writeInt(mPriority); + dest.writeStringList(mMccMncs); + } + + private AvailableNetworkInfo(Parcel in) { + mSubId = in.readInt(); + mPriority = in.readInt(); + in.readStringList(mMccMncs); + } + + public AvailableNetworkInfo(int subId, int priority, ArrayList<String> mccMncs) { + mSubId = subId; + mPriority = priority; + mMccMncs = new ArrayList<String>(mccMncs); + } + + @Override + public boolean equals(Object o) { + AvailableNetworkInfo ani; + + try { + ani = (AvailableNetworkInfo) o; + } catch (ClassCastException ex) { + return false; + } + + if (o == null) { + return false; + } + + return (mSubId == ani.mSubId + && mPriority == ani.mPriority + && (((mMccMncs != null) + && mMccMncs.equals(ani.mMccMncs)))); + } + + @Override + public int hashCode() { + return Objects.hash(mSubId, mPriority, mMccMncs); + } + + public static final Parcelable.Creator<AvailableNetworkInfo> CREATOR = + new Creator<AvailableNetworkInfo>() { + @Override + public AvailableNetworkInfo createFromParcel(Parcel in) { + return new AvailableNetworkInfo(in); + } + + @Override + public AvailableNetworkInfo[] newArray(int size) { + return new AvailableNetworkInfo[size]; + } + }; + + @Override + public String toString() { + return ("AvailableNetworkInfo:" + + " mSubId: " + mSubId + + " mPriority: " + mPriority + + " mMccMncs: " + Arrays.toString(mMccMncs.toArray())); + } +} + diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java index 15b540889977..585c0e40d478 100644 --- a/telephony/java/android/telephony/TelephonyManager.java +++ b/telephony/java/android/telephony/TelephonyManager.java @@ -9576,4 +9576,34 @@ public class TelephonyManager { } return subId; } + + /** + * Update availability of a list of networks in the current location. + * + * This api should be called to inform AlternativeNetwork Service about the availability + * of a network at the current location. This information will be used by AlternativeNetwork + * service to decide to attach to the network opportunistically. If an empty list is passed, + * it is assumed that no network is available. + * Requires that the calling app has carrier privileges on both primary and + * secondary subscriptions (see {@link #hasCarrierPrivileges}), or has permission + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * @param availableNetworks is a list of available network information. + * @return true if request is accepted + * + */ + @SuppressAutoDoc // Blocked by b/72967236 - no support for carrier privileges + public boolean updateAvailableNetworks(List<AvailableNetworkInfo> availableNetworks) { + String pkgForDebug = mContext != null ? mContext.getOpPackageName() : "<unknown>"; + boolean ret = false; + try { + IAns iAlternativeNetworkService = getIAns(); + if (iAlternativeNetworkService != null) { + ret = iAlternativeNetworkService.updateAvailableNetworks(availableNetworks, + pkgForDebug); + } + } catch (RemoteException ex) { + Rlog.e(TAG, "updateAvailableNetworks RemoteException", ex); + } + return ret; + } } diff --git a/telephony/java/com/android/internal/telephony/IAns.aidl b/telephony/java/com/android/internal/telephony/IAns.aidl index e9a46491522e..98bcd415a1ca 100755 --- a/telephony/java/com/android/internal/telephony/IAns.aidl +++ b/telephony/java/com/android/internal/telephony/IAns.aidl @@ -16,6 +16,7 @@ package com.android.internal.telephony; +import android.telephony.AvailableNetworkInfo; interface IAns { @@ -78,4 +79,23 @@ interface IAns { * */ int getPreferredData(String callingPackage); + + /** + * Update availability of a list of networks in the current location. + * + * This api should be called if the caller is aware of the availability of a network + * at the current location. This information will be used by AlternativeNetwork service + * to decide to attach to the network. If an empty list is passed, + * it is assumed that no network is available. + * Requires that the calling app has carrier privileges on both primary and + * secondary subscriptions (see + * {@link #hasCarrierPrivileges}), or has permission + * {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}. + * @param availableNetworks is a list of available network information. + * @param callingPackage caller's package name + * @return true if request is accepted + * + */ + boolean updateAvailableNetworks(in List<AvailableNetworkInfo> availableNetworks, + String callingPackage); } |