am 98e0b146: Make PhoneStateListeners not call TelephonyManager

Merge commit '98e0b146b80670b52805b4b210ef5582dad6bb68' into eclair-plus-aosp

* commit '98e0b146b80670b52805b4b210ef5582dad6bb68':
  Make PhoneStateListeners not call TelephonyManager
This commit is contained in:
Robert Greenwalt
2009-10-09 01:22:57 -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 int mDataConnectionNetworkType;
static final int PHONE_STATE_PERMISSION_MASK =
PhoneStateListener.LISTEN_CALL_FORWARDING_INDICATOR |
PhoneStateListener.LISTEN_CALL_STATE |
@@ -187,7 +189,8 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
if ((events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try {
r.callback.onDataConnectionStateChanged(mDataConnectionState);
r.callback.onDataConnectionStateChanged(mDataConnectionState,
mDataConnectionNetworkType);
} catch (RemoteException ex) {
remove(r.binder);
}
@@ -345,7 +348,7 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
}
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()" )) {
return;
}
@@ -356,11 +359,12 @@ class TelephonyRegistry extends ITelephonyRegistry.Stub {
mDataConnectionApn = apn;
mDataConnectionApnTypes = apnTypes;
mDataConnectionInterfaceName = interfaceName;
mDataConnectionNetworkType = networkType;
for (int i = mRecords.size() - 1; i >= 0; i--) {
Record r = mRecords.get(i);
if ((r.events & PhoneStateListener.LISTEN_DATA_CONNECTION_STATE) != 0) {
try {
r.callback.onDataConnectionStateChanged(state);
r.callback.onDataConnectionStateChanged(state, networkType);
} catch (RemoteException ex) {
remove(r.binder);
}

View File

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

View File

@@ -205,6 +205,13 @@ public class PhoneStateListener {
// 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.
*
@@ -264,8 +271,9 @@ public class PhoneStateListener {
Message.obtain(mHandler, LISTEN_CALL_STATE, state, 0, incomingNumber).sendToTarget();
}
public void onDataConnectionStateChanged(int state) {
Message.obtain(mHandler, LISTEN_DATA_CONNECTION_STATE, state, 0, null).sendToTarget();
public void onDataConnectionStateChanged(int state, int networkType) {
Message.obtain(mHandler, LISTEN_DATA_CONNECTION_STATE, state, networkType, null).
sendToTarget();
}
public void onDataActivity(int direction) {
@@ -299,6 +307,7 @@ public class PhoneStateListener {
PhoneStateListener.this.onCallStateChanged(msg.arg1, (String)msg.obj);
break;
case LISTEN_DATA_CONNECTION_STATE:
PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1, msg.arg2);
PhoneStateListener.this.onDataConnectionStateChanged(msg.arg1);
break;
case LISTEN_DATA_ACTIVITY:

View File

@@ -120,6 +120,8 @@ public class ServiceState implements Parcelable {
private int mSystemId;
private int mCdmaRoamingIndicator;
private int mCdmaDefaultRoamingIndicator;
private int mCdmaEriIconIndex;
private int mCdmaEriIconMode;
/**
* Create a new ServiceState from a intent notifier Bundle
@@ -166,6 +168,8 @@ public class ServiceState implements Parcelable {
mSystemId = s.mSystemId;
mCdmaRoamingIndicator = s.mCdmaRoamingIndicator;
mCdmaDefaultRoamingIndicator = s.mCdmaDefaultRoamingIndicator;
mCdmaEriIconIndex = s.mCdmaEriIconIndex;
mCdmaEriIconMode = s.mCdmaEriIconMode;
}
/**
@@ -184,6 +188,8 @@ public class ServiceState implements Parcelable {
mSystemId = in.readInt();
mCdmaRoamingIndicator = in.readInt();
mCdmaDefaultRoamingIndicator = in.readInt();
mCdmaEriIconIndex = in.readInt();
mCdmaEriIconMode = in.readInt();
}
public void writeToParcel(Parcel out, int flags) {
@@ -199,6 +205,8 @@ public class ServiceState implements Parcelable {
out.writeInt(mSystemId);
out.writeInt(mCdmaRoamingIndicator);
out.writeInt(mCdmaDefaultRoamingIndicator);
out.writeInt(mCdmaEriIconIndex);
out.writeInt(mCdmaEriIconMode);
}
public int describeContents() {
@@ -253,6 +261,20 @@ public class ServiceState implements Parcelable {
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
*
@@ -412,8 +434,11 @@ public class ServiceState implements Parcelable {
mSystemId = -1;
mCdmaRoamingIndicator = -1;
mCdmaDefaultRoamingIndicator = -1;
mCdmaEriIconIndex = -1;
mCdmaEriIconMode = -1;
}
// TODO - can't this be combined with the above func..
public void setStateOff() {
mState = STATE_POWER_OFF;
mRoaming = false;
@@ -427,6 +452,8 @@ public class ServiceState implements Parcelable {
mSystemId = -1;
mCdmaRoamingIndicator = -1;
mCdmaDefaultRoamingIndicator = -1;
mCdmaEriIconIndex = -1;
mCdmaEriIconMode = -1;
}
public void setState(int state) {
@@ -451,6 +478,20 @@ public class ServiceState implements Parcelable {
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) {
mOperatorAlphaLong = longName;
mOperatorAlphaShort = shortName;

View File

@@ -93,13 +93,16 @@ public class DefaultPhoneNotifier implements PhoneNotifier {
}
public void notifyDataConnection(Phone sender, String reason) {
TelephonyManager telephony = TelephonyManager.getDefault();
try {
mRegistry.notifyDataConnection(
convertDataState(sender.getDataConnectionState()),
sender.isDataConnectivityPossible(), reason,
sender.getActiveApn(),
sender.getActiveApnTypes(),
sender.getInterfaceName(null));
sender.getInterfaceName(null),
((telephony!=null) ? telephony.getNetworkType() :
TelephonyManager.NETWORK_TYPE_UNKNOWN));
} catch (RemoteException ex) {
// 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
void onCellLocationChanged(in Bundle location);
void onCallStateChanged(int state, String incomingNumber);
void onDataConnectionStateChanged(int state);
void onDataConnectionStateChanged(int state, int networkType);
void onDataActivity(int direction);
void onSignalStrengthsChanged(in SignalStrength signalStrength);
}

View File

@@ -32,7 +32,7 @@ interface ITelephonyRegistry {
void notifyCallForwardingChanged(boolean cfi);
void notifyDataActivity(int state);
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 notifyCellLocation(in Bundle cellLocation);
}

View File

@@ -257,6 +257,12 @@ public class CDMAPhone extends PhoneBase {
}
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;
}
@@ -798,6 +804,10 @@ public class CDMAPhone extends PhoneBase {
}
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);
}