am 98e0b146: Make PhoneStateListeners not call TelephonyManager

Merge commit '98e0b146b80670b52805b4b210ef5582dad6bb68' into eclair-mr2

* commit '98e0b146b80670b52805b4b210ef5582dad6bb68':
  Make PhoneStateListeners not call TelephonyManager
This commit is contained in:
Robert Greenwalt
2009-10-09 01:22:22 -07:00
committed by Android Git Automerger
8 changed files with 84 additions and 17 deletions

View File

@@ -94,6 +94,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
private Bundle mCellLocation = new Bundle(); private Bundle mCellLocation = new Bundle();
private int mDataConnectionNetworkType;
static final int PHONE_STATE_PERMISSION_MASK = static final int PHONE_STATE_PERMISSION_MASK =
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR | PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
PhoneStateListener.LISTEN_CALL_STATE | PhoneStateListener.LISTEN_CALL_STATE |
@@ -187,7 +189,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
if ((events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) { if ((events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try { try {
r.callback.onDataConnectionStateChanged(mDataConnectionState); r.callback.onDataConnectionStateChanged(mDataConnectionState,
mDataConnectionNetworkType);
} catch (RemoteException ex) { } catch (RemoteException ex) {
remove(r.binder); remove(r.binder);
} }
@@ -345,7 +348,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
} }
public void notifyDataConnection(int state, boolean isDataConnectivityPossible, public void notifyDataConnection(int state, boolean isDataConnectivityPossible,
String reason, String apn, String[] apnTypes, String interfaceName) { String reason, String apn, String[] apnTypes, String interfaceName, int networkType) {
if (!checkNotifyPermission("notifyDataConnection()" )) { if (!checkNotifyPermission("notifyDataConnection()" )) {
return; return;
} }
@@ -356,11 +359,12 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
mDataConnectionApn = apn; mDataConnectionApn = apn;
mDataConnectionApnTypes = apnTypes; mDataConnectionApnTypes = apnTypes;
mDataConnectionInterfaceName = interfaceName; mDataConnectionInterfaceName = interfaceName;
mDataConnectionNetworkType = networkType;
for (int i = mRecords.size() - 1; i >= 0; i--) { for (int i = mRecords.size() - 1; i >= 0; i--) {
Record r = mRecords.get(i); Record r = mRecords.get(i);
if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) { if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try { try {
r.callback.onDataConnectionStateChanged(state); r.callback.onDataConnectionStateChanged(state, networkType);
} catch (RemoteException ex) { } catch (RemoteException ex) {
remove(r.binder); remove(r.binder);
} }

View File

@@ -782,7 +782,7 @@ public class StatusBarPolicy {
public void onServiceStateChanged(ServiceState state) { public void onServiceStateChanged(ServiceState state) {
mServiceState = state; mServiceState = state;
updateSignalStrength(); updateSignalStrength();
updateCdmaRoamingIcon(); updateCdmaRoamingIcon(state);
updateDataIcon(); updateDataIcon();
} }
@@ -796,9 +796,9 @@ public class StatusBarPolicy {
} }
@Override @Override
public void onDataConnectionStateChanged(int state) { public void onDataConnectionStateChanged(int state, int networkType) {
mDataState = state; mDataState = state;
updateDataNetType(); updateDataNetType(networkType);
updateDataIcon(); updateDataIcon();
} }
@@ -835,7 +835,7 @@ public class StatusBarPolicy {
} }
private boolean isCdma() { private boolean isCdma() {
return ((mPhone != null) && (mPhone.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA)); return (mSignalStrength != null) && !mSignalStrength.isGsm();
} }
private boolean isEvdo() { private boolean isEvdo() {
@@ -889,6 +889,7 @@ public class StatusBarPolicy {
else if (asu >= 4) iconLevel = 2; else if (asu >= 4) iconLevel = 2;
else iconLevel = 1; else iconLevel = 1;
// Though mPhone is a Manager, this call is not an IPC
if (mPhone.isNetworkRoaming()) { if (mPhone.isNetworkRoaming()) {
iconList = sSignalImages_r; iconList = sSignalImages_r;
} else { } else {
@@ -956,8 +957,7 @@ public class StatusBarPolicy {
return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr; return (levelEvdoDbm < levelEvdoSnr) ? levelEvdoDbm : levelEvdoSnr;
} }
private final void updateDataNetType() { private final void updateDataNetType(int net) {
int net = mPhone.getNetworkType();
switch (net) { switch (net) {
case TelephonyManager.NETWORK_TYPE_EDGE: case TelephonyManager.NETWORK_TYPE_EDGE:
@@ -1211,7 +1211,7 @@ public class StatusBarPolicy {
} }
} }
private final void updateCdmaRoamingIcon() { private final void updateCdmaRoamingIcon(ServiceState state) {
if (!hasService()) { if (!hasService()) {
mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false); mService.setIconVisibility(mCdmaRoamingIndicatorIcon, false);
return; return;
@@ -1223,8 +1223,8 @@ public class StatusBarPolicy {
} }
int[] iconList = sRoamingIndicatorImages_cdma; int[] iconList = sRoamingIndicatorImages_cdma;
int iconIndex = mPhone.getCdmaEriIconIndex(); int iconIndex = state.getCdmaEriIconIndex();
int iconMode = mPhone.getCdmaEriIconMode(); int iconMode = state.getCdmaEriIconMode();
if (iconIndex == -1) { if (iconIndex == -1) {
Log.e(TAG, "getCdmaEriIconIndex returned null, skipping ERI icon update"); Log.e(TAG, "getCdmaEriIconIndex returned null, skipping ERI icon update");

View File

@@ -205,6 +205,13 @@ public class PhoneStateListener {
// default implementation empty // default implementation empty
} }
/**
* @hide
* same as above, but with the network type. Both called.
*/
public void onDataConnectionStateChanged(int state, int networkType) {
}
/** /**
* Callback invoked when data activity state changes. * Callback invoked when data activity state changes.
* *
@@ -264,8 +271,9 @@ public class PhoneStateListener {
Message.obtain(mHandler, LISTEN_CALL_STATE, state, 0, incomingNumber).sendToTarget(); Message.obtain(mHandler, LISTEN_CALL_STATE, state, 0, incomingNumber).sendToTarget();
} }
public void onDataConnectionStateChanged(int state) { public void onDataConnectionStateChanged(int state, int networkType) {
Message.obtain(mHandler, LISTEN_DATA_CONNECTION_STATE, state, 0, null).sendToTarget(); Message.obtain(mHandler, LISTEN_DATA_CONNECTION_STATE, state, networkType, null).
sendToTarget();
} }
public void onDataActivity(int direction) { public void onDataActivity(int direction) {
@@ -299,6 +307,7 @@ public class PhoneStateListener {
PhoneStateListener.this.onCallStateChanged(msg.arg1, (String)msg.obj); PhoneStateListener.this.onCallStateChanged(msg.arg1, (String)msg.obj);
break; break;
case LISTEN_DATA_CONNECTION_STATE: case LISTEN_DATA_CONNECTION_STATE:
PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1, msg.arg2);
PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1); PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1);
break; break;
case LISTEN_DATA_ACTIVITY: case LISTEN_DATA_ACTIVITY:

View File

@@ -120,6 +120,8 @@ public class ServiceState implements Parcelable {
private int mSystemId; private int mSystemId;
private int mCdmaRoamingIndicator; private int mCdmaRoamingIndicator;
private int mCdmaDefaultRoamingIndicator; private int mCdmaDefaultRoamingIndicator;
private int mCdmaEriIconIndex;
private int mCdmaEriIconMode;
/** /**
* Create a new ServiceState from a intent notifier Bundle * Create a new ServiceState from a intent notifier Bundle
@@ -166,6 +168,8 @@ public class ServiceState implements Parcelable {
mSystemId = s.mSystemId; mSystemId = s.mSystemId;
mCdmaRoamingIndicator = s.mCdmaRoamingIndicator; mCdmaRoamingIndicator = s.mCdmaRoamingIndicator;
mCdmaDefaultRoamingIndicator = s.mCdmaDefaultRoamingIndicator; mCdmaDefaultRoamingIndicator = s.mCdmaDefaultRoamingIndicator;
mCdmaEriIconIndex = s.mCdmaEriIconIndex;
mCdmaEriIconMode = s.mCdmaEriIconMode;
} }
/** /**
@@ -184,6 +188,8 @@ public class ServiceState implements Parcelable {
mSystemId = in.readInt(); mSystemId = in.readInt();
mCdmaRoamingIndicator = in.readInt(); mCdmaRoamingIndicator = in.readInt();
mCdmaDefaultRoamingIndicator = in.readInt(); mCdmaDefaultRoamingIndicator = in.readInt();
mCdmaEriIconIndex = in.readInt();
mCdmaEriIconMode = in.readInt();
} }
public void writeToParcel(Parcel out, int flags) { public void writeToParcel(Parcel out, int flags) {
@@ -199,6 +205,8 @@ public class ServiceState implements Parcelable {
out.writeInt(mSystemId); out.writeInt(mSystemId);
out.writeInt(mCdmaRoamingIndicator); out.writeInt(mCdmaRoamingIndicator);
out.writeInt(mCdmaDefaultRoamingIndicator); out.writeInt(mCdmaDefaultRoamingIndicator);
out.writeInt(mCdmaEriIconIndex);
out.writeInt(mCdmaEriIconMode);
} }
public int describeContents() { public int describeContents() {
@@ -253,6 +261,20 @@ public class ServiceState implements Parcelable {
return this.mCdmaDefaultRoamingIndicator; return this.mCdmaDefaultRoamingIndicator;
} }
/**
* @hide
*/
public int getCdmaEriIconIndex() {
return this.mCdmaEriIconIndex;
}
/**
* @hide
*/
public int getCdmaEriIconMode() {
return this.mCdmaEriIconMode;
}
/** /**
* Get current registered operator name in long alphanumeric format * Get current registered operator name in long alphanumeric format
* *
@@ -412,8 +434,11 @@ public class ServiceState implements Parcelable {
mSystemId = -1; mSystemId = -1;
mCdmaRoamingIndicator = -1; mCdmaRoamingIndicator = -1;
mCdmaDefaultRoamingIndicator = -1; mCdmaDefaultRoamingIndicator = -1;
mCdmaEriIconIndex = -1;
mCdmaEriIconMode = -1;
} }
// TODO - can't this be combined with the above func..
public void setStateOff() { public void setStateOff() {
mState = STATE_POWER_OFF; mState = STATE_POWER_OFF;
mRoaming = false; mRoaming = false;
@@ -427,6 +452,8 @@ public class ServiceState implements Parcelable {
mSystemId = -1; mSystemId = -1;
mCdmaRoamingIndicator = -1; mCdmaRoamingIndicator = -1;
mCdmaDefaultRoamingIndicator = -1; mCdmaDefaultRoamingIndicator = -1;
mCdmaEriIconIndex = -1;
mCdmaEriIconMode = -1;
} }
public void setState(int state) { public void setState(int state) {
@@ -451,6 +478,20 @@ public class ServiceState implements Parcelable {
this.mCdmaDefaultRoamingIndicator = roaming; this.mCdmaDefaultRoamingIndicator = roaming;
} }
/**
* @hide
*/
public void setCdmaEriIconIndex(int index) {
this.mCdmaEriIconIndex = index;
}
/**
* @hide
*/
public void setCdmaEriIconMode(int mode) {
this.mCdmaEriIconMode = mode;
}
public void setOperatorName(String longName, String shortName, String numeric) { public void setOperatorName(String longName, String shortName, String numeric) {
mOperatorAlphaLong = longName; mOperatorAlphaLong = longName;
mOperatorAlphaShort = shortName; mOperatorAlphaShort = shortName;

View File

@@ -93,13 +93,16 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
} }
public void notifyDataConnection(Phone sender, String reason) { public void notifyDataConnection(Phone sender, String reason) {
TelephonyManager telephony = TelephonyManager.getDefault();
try { try {
mRegistry.notifyDataConnection( mRegistry.notifyDataConnection(
convertDataState(sender.getDataConnectionState()), convertDataState(sender.getDataConnectionState()),
sender.isDataConnectivityPossible(), reason, sender.isDataConnectivityPossible(), reason,
sender.getActiveApn(), sender.getActiveApn(),
sender.getActiveApnTypes(), sender.getActiveApnTypes(),
sender.getInterfaceName(null)); sender.getInterfaceName(null),
((telephony!=null) ? telephony.getNetworkType() :
TelephonyManager.NETWORK_TYPE_UNKNOWN));
} catch (RemoteException ex) { } catch (RemoteException ex) {
// system process is dead // system process is dead
} }

View File

@@ -29,7 +29,7 @@ oneway interface IPhoneStateListener {
// we use bundle here instead of CellLocation so it can get the right subclass // we use bundle here instead of CellLocation so it can get the right subclass
void onCellLocationChanged(in Bundle location); void onCellLocationChanged(in Bundle location);
void onCallStateChanged(int state, String incomingNumber); void onCallStateChanged(int state, String incomingNumber);
void onDataConnectionStateChanged(int state); void onDataConnectionStateChanged(int state, int networkType);
void onDataActivity(int direction); void onDataActivity(int direction);
void onSignalStrengthsChanged(in SignalStrength signalStrength); void onSignalStrengthsChanged(in SignalStrength signalStrength);
} }

View File

@@ -32,7 +32,7 @@ interface ITelephonyRegistry {
void notifyCallForwardingChanged(boolean cfi); void notifyCallForwardingChanged(boolean cfi);
void notifyDataActivity(int state); void notifyDataActivity(int state);
void notifyDataConnection(int state, boolean isDataConnectivityPossible, void notifyDataConnection(int state, boolean isDataConnectivityPossible,
String reason, String apn, in String[] apnTypes, String interfaceName); String reason, String apn, in String[] apnTypes, String interfaceName, int networkType);
void notifyDataConnectionFailed(String reason); void notifyDataConnectionFailed(String reason);
void notifyCellLocation(in Bundle cellLocation); void notifyCellLocation(in Bundle cellLocation);
} }

View File

@@ -257,6 +257,12 @@ public class CDMAPhone extends PhoneBase {
} }
public ServiceState getServiceState() { public ServiceState getServiceState() {
int roamInd = mSST.ss.getCdmaRoamingIndicator();
int defRoamInd = mSST.ss.getCdmaDefaultRoamingIndicator();
mSST.ss.setCdmaEriIconIndex(mEriManager.getCdmaEriIconIndex(roamInd, defRoamInd));
mSST.ss.setCdmaEriIconMode(mEriManager.getCdmaEriIconMode(roamInd, defRoamInd));
return mSST.ss; return mSST.ss;
} }
@@ -798,6 +804,10 @@ public class CDMAPhone extends PhoneBase {
} }
void notifyServiceStateChanged(ServiceState ss) { void notifyServiceStateChanged(ServiceState ss) {
// TODO this seems really inefficient. Can't we calc this when the fundamentals change and store in the
// service state?
ss.setCdmaEriIconIndex(this.getCdmaEriIconIndex());
ss.setCdmaEriIconMode(this.getCdmaEriIconMode());
super.notifyServiceStateChangedP(ss); super.notifyServiceStateChangedP(ss);
} }