Merge "Adding hidden TM calls to scan/select cell networks." into mnc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
c242d9d2ae
@@ -33,9 +33,11 @@ import android.telecom.PhoneAccount;
|
|||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import com.android.internal.telecom.ITelecomService;
|
import com.android.internal.telecom.ITelecomService;
|
||||||
|
import com.android.internal.telephony.CellNetworkScanResult;
|
||||||
import com.android.internal.telephony.IPhoneSubInfo;
|
import com.android.internal.telephony.IPhoneSubInfo;
|
||||||
import com.android.internal.telephony.ITelephony;
|
import com.android.internal.telephony.ITelephony;
|
||||||
import com.android.internal.telephony.ITelephonyRegistry;
|
import com.android.internal.telephony.ITelephonyRegistry;
|
||||||
|
import com.android.internal.telephony.OperatorInfo;
|
||||||
import com.android.internal.telephony.PhoneConstants;
|
import com.android.internal.telephony.PhoneConstants;
|
||||||
import com.android.internal.telephony.RILConstants;
|
import com.android.internal.telephony.RILConstants;
|
||||||
import com.android.internal.telephony.TelephonyProperties;
|
import com.android.internal.telephony.TelephonyProperties;
|
||||||
@@ -3432,6 +3434,55 @@ public class TelephonyManager {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a radio scan and return the list of avialble networks.
|
||||||
|
*
|
||||||
|
* The return value is a list of the OperatorInfo of the networks found. Note that this
|
||||||
|
* scan can take a long time (sometimes minutes) to happen.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Requires Permission:
|
||||||
|
* {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}
|
||||||
|
* Or the calling app has carrier privileges. @see #hasCarrierPrivileges
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public CellNetworkScanResult getCellNetworkScanResults(int subId) {
|
||||||
|
try {
|
||||||
|
ITelephony telephony = getITelephony();
|
||||||
|
if (telephony != null)
|
||||||
|
return telephony.getCellNetworkScanResults(subId);
|
||||||
|
} catch (RemoteException ex) {
|
||||||
|
Rlog.e(TAG, "getCellNetworkScanResults RemoteException", ex);
|
||||||
|
} catch (NullPointerException ex) {
|
||||||
|
Rlog.e(TAG, "getCellNetworkScanResults NPE", ex);
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask the radio to connect to the input network and change selection mode to manual.
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* Requires Permission:
|
||||||
|
* {@link android.Manifest.permission#MODIFY_PHONE_STATE MODIFY_PHONE_STATE}
|
||||||
|
* Or the calling app has carrier privileges. @see #hasCarrierPrivileges
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public boolean setNetworkSelectionModeManual(int subId, OperatorInfo operator) {
|
||||||
|
try {
|
||||||
|
ITelephony telephony = getITelephony();
|
||||||
|
if (telephony != null)
|
||||||
|
return telephony.setNetworkSelectionModeManual(subId, operator);
|
||||||
|
} catch (RemoteException ex) {
|
||||||
|
Rlog.e(TAG, "setNetworkSelectionModeManual RemoteException", ex);
|
||||||
|
} catch (NullPointerException ex) {
|
||||||
|
Rlog.e(TAG, "setNetworkSelectionModeManual NPE", ex);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the preferred network type.
|
* Set the preferred network type.
|
||||||
* Used for device configuration by some CDMA operators.
|
* Used for device configuration by some CDMA operators.
|
||||||
|
|||||||
@@ -0,0 +1,19 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2015, 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;
|
||||||
|
|
||||||
|
parcelable CellNetworkScanResult;
|
||||||
@@ -0,0 +1,125 @@
|
|||||||
|
/*
|
||||||
|
** Copyright 2015, 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;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Response for querying available cellular networks.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public class CellNetworkScanResult implements Parcelable {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Possible status values.
|
||||||
|
*/
|
||||||
|
public static final int STATUS_SUCCESS = 1;
|
||||||
|
public static final int STATUS_RADIO_NOT_AVAILABLE = 2;
|
||||||
|
public static final int STATUS_RADIO_GENERIC_FAILURE = 3;
|
||||||
|
public static final int STATUS_UNKNOWN_ERROR = 4;
|
||||||
|
|
||||||
|
private final int mStatus;
|
||||||
|
private final List<OperatorInfo> mOperators;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Constructor.
|
||||||
|
*
|
||||||
|
* @hide
|
||||||
|
*/
|
||||||
|
public CellNetworkScanResult(int status, List<OperatorInfo> operators) {
|
||||||
|
mStatus = status;
|
||||||
|
mOperators = operators;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Construct a CellNetworkScanResult from a given parcel.
|
||||||
|
*/
|
||||||
|
private CellNetworkScanResult(Parcel in) {
|
||||||
|
mStatus = in.readInt();
|
||||||
|
int len = in.readInt();
|
||||||
|
if (len > 0) {
|
||||||
|
mOperators = new ArrayList();
|
||||||
|
for (int i = 0; i < len; ++i) {
|
||||||
|
mOperators.add(OperatorInfo.CREATOR.createFromParcel(in));
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
mOperators = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the status of the command.
|
||||||
|
*/
|
||||||
|
public int getStatus() {
|
||||||
|
return mStatus;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @return the operators.
|
||||||
|
*/
|
||||||
|
public List<OperatorInfo> getOperators() {
|
||||||
|
return mOperators;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel out, int flags) {
|
||||||
|
out.writeInt(mStatus);
|
||||||
|
if (mOperators != null && mOperators.size() > 0) {
|
||||||
|
for (OperatorInfo network : mOperators) {
|
||||||
|
network.writeToParcel(out, flags);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
out.writeInt(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
sb.append("CellNetworkScanResult: {");
|
||||||
|
sb.append(" status:").append(mStatus);
|
||||||
|
if (mOperators != null) {
|
||||||
|
for (OperatorInfo network : mOperators) {
|
||||||
|
sb.append(" network:").append(network);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
sb.append("}");
|
||||||
|
return sb.toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static final Parcelable.Creator<CellNetworkScanResult> CREATOR
|
||||||
|
= new Parcelable.Creator<CellNetworkScanResult>() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public CellNetworkScanResult createFromParcel(Parcel in) {
|
||||||
|
return new CellNetworkScanResult(in);
|
||||||
|
}
|
||||||
|
|
||||||
|
public CellNetworkScanResult[] newArray(int size) {
|
||||||
|
return new CellNetworkScanResult[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
@@ -24,6 +24,8 @@ import android.telephony.IccOpenLogicalChannelResponse;
|
|||||||
import android.telephony.NeighboringCellInfo;
|
import android.telephony.NeighboringCellInfo;
|
||||||
import android.telephony.RadioAccessFamily;
|
import android.telephony.RadioAccessFamily;
|
||||||
import android.telephony.ModemActivityInfo;
|
import android.telephony.ModemActivityInfo;
|
||||||
|
import com.android.internal.telephony.CellNetworkScanResult;
|
||||||
|
import com.android.internal.telephony.OperatorInfo;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
|
||||||
@@ -678,6 +680,23 @@ interface ITelephony {
|
|||||||
*/
|
*/
|
||||||
void setNetworkSelectionModeAutomatic(int subId);
|
void setNetworkSelectionModeAutomatic(int subId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Perform a radio scan and return the list of avialble networks.
|
||||||
|
*
|
||||||
|
* @param subId the id of the subscription.
|
||||||
|
* @return CellNetworkScanResult containing status of scan and networks.
|
||||||
|
*/
|
||||||
|
CellNetworkScanResult getCellNetworkScanResults(int subId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ask the radio to connect to the input network and change selection mode to manual.
|
||||||
|
*
|
||||||
|
* @param subId the id of the subscription.
|
||||||
|
* @param operatorInfo the operator to attach to.
|
||||||
|
* @return true if the request suceeded.
|
||||||
|
*/
|
||||||
|
boolean setNetworkSelectionModeManual(int subId, in OperatorInfo operator);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set the preferred network type.
|
* Set the preferred network type.
|
||||||
* Used for device configuration by some CDMA operators.
|
* Used for device configuration by some CDMA operators.
|
||||||
@@ -917,7 +936,6 @@ interface ITelephony {
|
|||||||
* @return {@code true} if the device supports hearing aid compatibility.
|
* @return {@code true} if the device supports hearing aid compatibility.
|
||||||
*/
|
*/
|
||||||
boolean isHearingAidCompatibilitySupported();
|
boolean isHearingAidCompatibilitySupported();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get IMS Registration Status
|
* Get IMS Registration Status
|
||||||
*/
|
*/
|
||||||
|
|||||||
160
telephony/java/com/android/internal/telephony/OperatorInfo.java
Normal file
160
telephony/java/com/android/internal/telephony/OperatorInfo.java
Normal file
@@ -0,0 +1,160 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2006 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;
|
||||||
|
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@hide}
|
||||||
|
*/
|
||||||
|
public class OperatorInfo implements Parcelable {
|
||||||
|
public enum State {
|
||||||
|
UNKNOWN,
|
||||||
|
AVAILABLE,
|
||||||
|
CURRENT,
|
||||||
|
FORBIDDEN;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String mOperatorAlphaLong;
|
||||||
|
private String mOperatorAlphaShort;
|
||||||
|
private String mOperatorNumeric;
|
||||||
|
|
||||||
|
private State mState = State.UNKNOWN;
|
||||||
|
|
||||||
|
|
||||||
|
public String
|
||||||
|
getOperatorAlphaLong() {
|
||||||
|
return mOperatorAlphaLong;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String
|
||||||
|
getOperatorAlphaShort() {
|
||||||
|
return mOperatorAlphaShort;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String
|
||||||
|
getOperatorNumeric() {
|
||||||
|
return mOperatorNumeric;
|
||||||
|
}
|
||||||
|
|
||||||
|
public State
|
||||||
|
getState() {
|
||||||
|
return mState;
|
||||||
|
}
|
||||||
|
|
||||||
|
OperatorInfo(String operatorAlphaLong,
|
||||||
|
String operatorAlphaShort,
|
||||||
|
String operatorNumeric,
|
||||||
|
State state) {
|
||||||
|
|
||||||
|
mOperatorAlphaLong = operatorAlphaLong;
|
||||||
|
mOperatorAlphaShort = operatorAlphaShort;
|
||||||
|
mOperatorNumeric = operatorNumeric;
|
||||||
|
|
||||||
|
mState = state;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public OperatorInfo(String operatorAlphaLong,
|
||||||
|
String operatorAlphaShort,
|
||||||
|
String operatorNumeric,
|
||||||
|
String stateString) {
|
||||||
|
this (operatorAlphaLong, operatorAlphaShort,
|
||||||
|
operatorNumeric, rilStateToState(stateString));
|
||||||
|
}
|
||||||
|
|
||||||
|
public OperatorInfo(String operatorAlphaLong,
|
||||||
|
String operatorAlphaShort,
|
||||||
|
String operatorNumeric) {
|
||||||
|
this(operatorAlphaLong, operatorAlphaShort, operatorNumeric, State.UNKNOWN);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See state strings defined in ril.h RIL_REQUEST_QUERY_AVAILABLE_NETWORKS
|
||||||
|
*/
|
||||||
|
private static State rilStateToState(String s) {
|
||||||
|
if (s.equals("unknown")) {
|
||||||
|
return State.UNKNOWN;
|
||||||
|
} else if (s.equals("available")) {
|
||||||
|
return State.AVAILABLE;
|
||||||
|
} else if (s.equals("current")) {
|
||||||
|
return State.CURRENT;
|
||||||
|
} else if (s.equals("forbidden")) {
|
||||||
|
return State.FORBIDDEN;
|
||||||
|
} else {
|
||||||
|
throw new RuntimeException(
|
||||||
|
"RIL impl error: Invalid network state '" + s + "'");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public String toString() {
|
||||||
|
return "OperatorInfo " + mOperatorAlphaLong
|
||||||
|
+ "/" + mOperatorAlphaShort
|
||||||
|
+ "/" + mOperatorNumeric
|
||||||
|
+ "/" + mState;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parcelable interface implemented below.
|
||||||
|
* This is a simple effort to make OperatorInfo parcelable rather than
|
||||||
|
* trying to make the conventional containing object (AsyncResult),
|
||||||
|
* implement parcelable. This functionality is needed for the
|
||||||
|
* NetworkQueryService to fix 1128695.
|
||||||
|
*/
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int describeContents() {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement the Parcelable interface.
|
||||||
|
* Method to serialize a OperatorInfo object.
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
dest.writeString(mOperatorAlphaLong);
|
||||||
|
dest.writeString(mOperatorAlphaShort);
|
||||||
|
dest.writeString(mOperatorNumeric);
|
||||||
|
dest.writeSerializable(mState);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Implement the Parcelable interface
|
||||||
|
* Method to deserialize a OperatorInfo object, or an array thereof.
|
||||||
|
*/
|
||||||
|
public static final Creator<OperatorInfo> CREATOR =
|
||||||
|
new Creator<OperatorInfo>() {
|
||||||
|
@Override
|
||||||
|
public OperatorInfo createFromParcel(Parcel in) {
|
||||||
|
OperatorInfo opInfo = new OperatorInfo(
|
||||||
|
in.readString(), /*operatorAlphaLong*/
|
||||||
|
in.readString(), /*operatorAlphaShort*/
|
||||||
|
in.readString(), /*operatorNumeric*/
|
||||||
|
(State) in.readSerializable()); /*state*/
|
||||||
|
return opInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public OperatorInfo[] newArray(int size) {
|
||||||
|
return new OperatorInfo[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user