refactor radioPowerstate
1. new System API for getRadioPowerState with permision check 2. new System API for onRadioPowerStateChanged in PhoneStateListener 3. replace radioState enum in CommandsInterface to telephonyMgr defined int. Bug: 117349311 Test: telephony unit test Change-Id: I502568280fbf9213ca6bf1f7fb204d0d4ce86580 Merged-in: I502568280fbf9213ca6bf1f7fb204d0d4ce86580
This commit is contained in:
parent
2966539634
commit
760729c33e
@ -5137,6 +5137,11 @@ package android.telephony {
|
||||
field public static final int RESULT_SUCCESS = 0; // 0x0
|
||||
}
|
||||
|
||||
public class PhoneStateListener {
|
||||
method public void onRadioPowerStateChanged(int);
|
||||
field public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 4194304; // 0x400000
|
||||
}
|
||||
|
||||
public class ServiceState implements android.os.Parcelable {
|
||||
method public android.telephony.NetworkRegistrationState getNetworkRegistrationState(int, int);
|
||||
method public java.util.List<android.telephony.NetworkRegistrationState> getNetworkRegistrationStates();
|
||||
@ -5262,6 +5267,7 @@ package android.telephony {
|
||||
method public boolean getEmergencyCallbackMode();
|
||||
method public java.lang.String getIsimDomain();
|
||||
method public int getPreferredNetworkType(int);
|
||||
method public int getRadioPowerState();
|
||||
method public int getSimApplicationState();
|
||||
method public int getSimCardState();
|
||||
method public java.util.List<android.telephony.TelephonyHistogram> getTelephonyHistograms();
|
||||
@ -5325,6 +5331,9 @@ package android.telephony {
|
||||
field public static final int NETWORK_MODE_TDSCDMA_WCDMA = 14; // 0xe
|
||||
field public static final int NETWORK_MODE_WCDMA_ONLY = 2; // 0x2
|
||||
field public static final int NETWORK_MODE_WCDMA_PREF = 0; // 0x0
|
||||
field public static final int RADIO_POWER_OFF = 0; // 0x0
|
||||
field public static final int RADIO_POWER_ON = 1; // 0x1
|
||||
field public static final int RADIO_POWER_UNAVAILABLE = 2; // 0x2
|
||||
field public static final int SIM_ACTIVATION_STATE_ACTIVATED = 2; // 0x2
|
||||
field public static final int SIM_ACTIVATION_STATE_ACTIVATING = 1; // 0x1
|
||||
field public static final int SIM_ACTIVATION_STATE_DEACTIVATED = 3; // 0x3
|
||||
|
@ -211,6 +211,9 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
|
||||
private PhoneCapability mPhoneCapability = null;
|
||||
|
||||
@TelephonyManager.RadioPowerState
|
||||
private int mRadioPowerState = TelephonyManager.RADIO_POWER_UNAVAILABLE;
|
||||
|
||||
private final LocalLog mLocalLog = new LocalLog(100);
|
||||
|
||||
private PreciseDataConnectionState mPreciseDataConnectionState =
|
||||
@ -749,6 +752,13 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
remove(r.binder);
|
||||
}
|
||||
}
|
||||
if ((events & PhoneStateListener.LISTEN_RADIO_POWER_STATE_CHANGED) != 0) {
|
||||
try {
|
||||
r.callback.onRadioPowerStateChanged(mRadioPowerState);
|
||||
} catch (RemoteException ex) {
|
||||
remove(r.binder);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
@ -1570,6 +1580,32 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
}
|
||||
}
|
||||
|
||||
public void notifyRadioPowerStateChanged(@TelephonyManager.RadioPowerState int state) {
|
||||
if (!checkNotifyPermission("notifyRadioPowerStateChanged()")) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (VDBG) {
|
||||
log("notifyRadioPowerStateChanged: state= " + state);
|
||||
}
|
||||
|
||||
synchronized (mRecords) {
|
||||
mRadioPowerState = state;
|
||||
|
||||
for (Record r : mRecords) {
|
||||
if (r.matchPhoneStateListenerEvent(
|
||||
PhoneStateListener.LISTEN_RADIO_POWER_STATE_CHANGED)) {
|
||||
try {
|
||||
r.callback.onRadioPowerStateChanged(state);
|
||||
} catch (RemoteException ex) {
|
||||
mRemoveList.add(r.binder);
|
||||
}
|
||||
}
|
||||
}
|
||||
handleRemoveListLocked();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
|
||||
@ -1607,6 +1643,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
|
||||
pw.println("mBackgroundCallState=" + mBackgroundCallState);
|
||||
pw.println("mVoLteServiceState=" + mVoLteServiceState);
|
||||
pw.println("mPhoneCapability=" + mPhoneCapability);
|
||||
pw.println("mRadioPowerState=" + mRadioPowerState);
|
||||
|
||||
pw.decreaseIndent();
|
||||
|
||||
|
@ -17,6 +17,7 @@
|
||||
package android.telephony;
|
||||
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.UnsupportedAppUsage;
|
||||
import android.os.Bundle;
|
||||
import android.os.Handler;
|
||||
@ -280,6 +281,15 @@ public class PhoneStateListener {
|
||||
*/
|
||||
public static final int LISTEN_PHONE_CAPABILITY_CHANGE = 0x00200000;
|
||||
|
||||
/**
|
||||
* Listen for changes to the radio power state.
|
||||
*
|
||||
* @see #onRadioPowerStateChanged
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int LISTEN_RADIO_POWER_STATE_CHANGED = 0x00400000;
|
||||
|
||||
/*
|
||||
* Subscription used to listen to the phone state changes
|
||||
* @hide
|
||||
@ -406,6 +416,9 @@ public class PhoneStateListener {
|
||||
PhoneStateListener.this.onPhoneCapabilityChanged(
|
||||
(PhoneCapability) msg.obj);
|
||||
break;
|
||||
case LISTEN_RADIO_POWER_STATE_CHANGED:
|
||||
PhoneStateListener.this.onRadioPowerStateChanged((int) msg.obj);
|
||||
break;
|
||||
}
|
||||
}
|
||||
};
|
||||
@ -645,6 +658,18 @@ public class PhoneStateListener {
|
||||
// default implementation empty
|
||||
}
|
||||
|
||||
/**
|
||||
* Callback invoked when modem radio power state changes. Requires
|
||||
* the READ_PRIVILEGED_PHONE_STATE permission.
|
||||
* @param state the modem radio power state
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public void onRadioPowerStateChanged(@TelephonyManager.RadioPowerState int state) {
|
||||
// default implementation empty
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Callback invoked when telephony has received notice from a carrier
|
||||
* app that a network action that could result in connectivity loss
|
||||
@ -776,6 +801,10 @@ public class PhoneStateListener {
|
||||
public void onPhoneCapabilityChanged(PhoneCapability capability) {
|
||||
send(LISTEN_PHONE_CAPABILITY_CHANGE, 0, 0, capability);
|
||||
}
|
||||
|
||||
public void onRadioPowerStateChanged(@TelephonyManager.RadioPowerState int state) {
|
||||
send(LISTEN_RADIO_POWER_STATE_CHANGED, 0, 0, state);
|
||||
}
|
||||
}
|
||||
|
||||
@UnsupportedAppUsage
|
||||
|
@ -6842,6 +6842,60 @@ public class TelephonyManager {
|
||||
return false;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef(prefix = {"RADIO_POWER_"},
|
||||
value = {RADIO_POWER_OFF,
|
||||
RADIO_POWER_ON,
|
||||
RADIO_POWER_UNAVAILABLE,
|
||||
})
|
||||
public @interface RadioPowerState {}
|
||||
|
||||
/**
|
||||
* Radio explicitly powered off (e.g, airplane mode).
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int RADIO_POWER_OFF = 0;
|
||||
|
||||
/**
|
||||
* Radio power is on.
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int RADIO_POWER_ON = 1;
|
||||
|
||||
/**
|
||||
* Radio power unavailable (eg, modem resetting or not booted).
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
public static final int RADIO_POWER_UNAVAILABLE = 2;
|
||||
|
||||
/**
|
||||
* @return current modem radio state.
|
||||
*
|
||||
* <p>Requires permission: {@link android.Manifest.permission#READ_PRIVILEGED_PHONE_STATE} or
|
||||
* {@link android.Manifest.permission#READ_PHONE_STATE} or that the calling
|
||||
* app has carrier privileges (see {@link #hasCarrierPrivileges}).
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
@SystemApi
|
||||
@RequiresPermission(anyOf = {android.Manifest.permission.READ_PRIVILEGED_PHONE_STATE,
|
||||
android.Manifest.permission.READ_PHONE_STATE})
|
||||
public @RadioPowerState int getRadioPowerState() {
|
||||
try {
|
||||
ITelephony telephony = getITelephony();
|
||||
if (telephony != null) {
|
||||
return telephony.getRadioPowerState(getSlotIndex(), mContext.getOpPackageName());
|
||||
}
|
||||
} catch (RemoteException ex) {
|
||||
// This could happen if binder process crashes.
|
||||
}
|
||||
return RADIO_POWER_UNAVAILABLE;
|
||||
}
|
||||
|
||||
/** @hide */
|
||||
@SystemApi
|
||||
@SuppressLint("Doclava125")
|
||||
|
@ -52,5 +52,6 @@ oneway interface IPhoneStateListener {
|
||||
void onCarrierNetworkChange(in boolean active);
|
||||
void onUserMobileDataStateChanged(in boolean enabled);
|
||||
void onPhoneCapabilityChanged(in PhoneCapability capability);
|
||||
void onRadioPowerStateChanged(in int state);
|
||||
}
|
||||
|
||||
|
@ -1477,4 +1477,10 @@ interface ITelephony {
|
||||
* Return the network selection mode on the subscription with id {@code subId}.
|
||||
*/
|
||||
int getNetworkSelectionMode(int subId);
|
||||
|
||||
/**
|
||||
* Return the modem radio power state for slot index.
|
||||
*
|
||||
*/
|
||||
int getRadioPowerState(int slotIdex, String callingPackage);
|
||||
}
|
||||
|
@ -79,4 +79,5 @@ interface ITelephonyRegistry {
|
||||
void notifyCarrierNetworkChange(in boolean active);
|
||||
void notifyUserMobileDataStateChangedForPhoneId(in int phoneId, in int subId, in boolean state);
|
||||
void notifyPhoneCapabilityChanged(in PhoneCapability capability);
|
||||
void notifyRadioPowerStateChanged(in int state);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user