am 7f00c22b: Merge "Avoid duplicate dialogs leading to NPE" into ics-mr0

* commit '7f00c22b7fa7b38b644585c0a3c6faadc5def94c':
  Avoid duplicate dialogs leading to NPE
This commit is contained in:
Irfan Sheriff
2011-11-02 21:38:55 +00:00
committed by Android Git Automerger

View File

@@ -81,7 +81,7 @@ import java.util.Collection;
*/ */
public class WifiP2pService extends IWifiP2pManager.Stub { public class WifiP2pService extends IWifiP2pManager.Stub {
private static final String TAG = "WifiP2pService"; private static final String TAG = "WifiP2pService";
private static final boolean DBG = true; private static final boolean DBG = false;
private static final String NETWORKTYPE = "WIFI_P2P"; private static final String NETWORKTYPE = "WIFI_P2P";
private Context mContext; private Context mContext;
@@ -131,12 +131,22 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
/* User rejected to disable Wi-Fi in order to enable p2p */ /* User rejected to disable Wi-Fi in order to enable p2p */
private static final int WIFI_DISABLE_USER_REJECT = BASE + 5; private static final int WIFI_DISABLE_USER_REJECT = BASE + 5;
/* User accepted a group negotiation request */
private static final int GROUP_NEGOTIATION_USER_ACCEPT = BASE + 6;
/* User rejected a group negotiation request */
private static final int GROUP_NEGOTIATION_USER_REJECT = BASE + 7;
/* User accepted a group invitation request */
private static final int GROUP_INVITATION_USER_ACCEPT = BASE + 8;
/* User rejected a group invitation request */
private static final int GROUP_INVITATION_USER_REJECT = BASE + 9;
/* Airplane mode changed */ /* Airplane mode changed */
private static final int AIRPLANE_MODE_CHANGED = BASE + 6; private static final int AIRPLANE_MODE_CHANGED = BASE + 10;
/* Emergency callback mode */ /* Emergency callback mode */
private static final int EMERGENCY_CALLBACK_MODE = BASE + 7; private static final int EMERGENCY_CALLBACK_MODE = BASE + 11;
private static final int WPS_PBC = BASE + 8; private static final int WPS_PBC = BASE + 12;
private static final int WPS_PIN = BASE + 9; private static final int WPS_PIN = BASE + 13;
private final boolean mP2pSupported; private final boolean mP2pSupported;
@@ -260,6 +270,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
private P2pEnabledState mP2pEnabledState = new P2pEnabledState(); private P2pEnabledState mP2pEnabledState = new P2pEnabledState();
// Inactive is when p2p is enabled with no connectivity // Inactive is when p2p is enabled with no connectivity
private InactiveState mInactiveState = new InactiveState(); private InactiveState mInactiveState = new InactiveState();
private UserAuthorizingGroupNegotiationState mUserAuthorizingGroupNegotiationState
= new UserAuthorizingGroupNegotiationState();
private UserAuthorizingGroupInvitationState mUserAuthorizingGroupInvitationState
= new UserAuthorizingGroupInvitationState();
private GroupNegotiationState mGroupNegotiationState = new GroupNegotiationState(); private GroupNegotiationState mGroupNegotiationState = new GroupNegotiationState();
private GroupCreatedState mGroupCreatedState = new GroupCreatedState(); private GroupCreatedState mGroupCreatedState = new GroupCreatedState();
@@ -290,6 +304,8 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
addState(mP2pEnablingState, mDefaultState); addState(mP2pEnablingState, mDefaultState);
addState(mP2pEnabledState, mDefaultState); addState(mP2pEnabledState, mDefaultState);
addState(mInactiveState, mP2pEnabledState); addState(mInactiveState, mP2pEnabledState);
addState(mUserAuthorizingGroupNegotiationState, mInactiveState);
addState(mUserAuthorizingGroupInvitationState, mInactiveState);
addState(mGroupNegotiationState, mP2pEnabledState); addState(mGroupNegotiationState, mP2pEnabledState);
addState(mGroupCreatedState, mP2pEnabledState); addState(mGroupCreatedState, mP2pEnabledState);
@@ -379,6 +395,10 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
// Ignore // Ignore
case WIFI_DISABLE_USER_ACCEPT: case WIFI_DISABLE_USER_ACCEPT:
case WIFI_DISABLE_USER_REJECT: case WIFI_DISABLE_USER_REJECT:
case GROUP_NEGOTIATION_USER_ACCEPT:
case GROUP_NEGOTIATION_USER_REJECT:
case GROUP_INVITATION_USER_ACCEPT:
case GROUP_INVITATION_USER_REJECT:
case GROUP_NEGOTIATION_TIMED_OUT: case GROUP_NEGOTIATION_TIMED_OUT:
break; break;
default: default:
@@ -747,6 +767,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT: case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT:
mSavedGoNegotiationConfig = (WifiP2pConfig) message.obj; mSavedGoNegotiationConfig = (WifiP2pConfig) message.obj;
notifyP2pGoNegotationRequest(mSavedGoNegotiationConfig); notifyP2pGoNegotationRequest(mSavedGoNegotiationConfig);
transitionTo(mUserAuthorizingGroupNegotiationState);
break; break;
case WifiP2pManager.CREATE_GROUP: case WifiP2pManager.CREATE_GROUP:
mPersistGroup = true; mPersistGroup = true;
@@ -761,6 +782,7 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
case WifiMonitor.P2P_INVITATION_RECEIVED_EVENT: case WifiMonitor.P2P_INVITATION_RECEIVED_EVENT:
WifiP2pGroup group = (WifiP2pGroup) message.obj; WifiP2pGroup group = (WifiP2pGroup) message.obj;
notifyP2pInvitationReceived(group); notifyP2pInvitationReceived(group);
transitionTo(mUserAuthorizingGroupInvitationState);
break; break;
default: default:
return NOT_HANDLED; return NOT_HANDLED;
@@ -769,6 +791,70 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
} }
} }
class UserAuthorizingGroupNegotiationState extends State {
@Override
public void enter() {
if (DBG) logd(getName());
}
@Override
public boolean processMessage(Message message) {
if (DBG) logd(getName() + message.toString());
switch (message.what) {
case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT:
case WifiMonitor.P2P_INVITATION_RECEIVED_EVENT:
//Ignore additional connection requests
break;
case GROUP_NEGOTIATION_USER_ACCEPT:
sendMessage(WifiP2pManager.CONNECT, mSavedGoNegotiationConfig);
mSavedGoNegotiationConfig = null;
break;
case GROUP_NEGOTIATION_USER_REJECT:
if (DBG) logd("User rejected incoming negotiation request");
mSavedGoNegotiationConfig = null;
transitionTo(mInactiveState);
break;
default:
return NOT_HANDLED;
}
return HANDLED;
}
}
class UserAuthorizingGroupInvitationState extends State {
@Override
public void enter() {
if (DBG) logd(getName());
}
@Override
public boolean processMessage(Message message) {
if (DBG) logd(getName() + message.toString());
switch (message.what) {
case WifiMonitor.P2P_GO_NEGOTIATION_REQUEST_EVENT:
case WifiMonitor.P2P_INVITATION_RECEIVED_EVENT:
//Ignore additional connection requests
break;
case GROUP_INVITATION_USER_ACCEPT:
if (DBG) logd(getName() + " connect to invited group");
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = mSavedP2pGroup.getOwner().deviceAddress;
sendMessage(WifiP2pManager.CONNECT, config);
mSavedP2pGroup = null;
break;
case GROUP_INVITATION_USER_REJECT:
if (DBG) logd("User rejected incoming invitation request");
mSavedP2pGroup = null;
transitionTo(mInactiveState);
break;
default:
return NOT_HANDLED;
}
return HANDLED;
}
}
class GroupNegotiationState extends State { class GroupNegotiationState extends State {
@Override @Override
public void enter() { public void enter() {
@@ -1091,15 +1177,14 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
mSavedGoNegotiationConfig.wps.setup = WpsInfo.KEYPAD; mSavedGoNegotiationConfig.wps.setup = WpsInfo.KEYPAD;
mSavedGoNegotiationConfig.wps.pin = pin.getText().toString(); mSavedGoNegotiationConfig.wps.pin = pin.getText().toString();
} }
sendMessage(WifiP2pManager.CONNECT, mSavedGoNegotiationConfig); sendMessage(GROUP_NEGOTIATION_USER_ACCEPT);
mSavedGoNegotiationConfig = null;
} }
}) })
.setNegativeButton(r.getString(R.string.cancel), new OnClickListener() { .setNegativeButton(r.getString(R.string.cancel), new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
if (DBG) logd(getName() + " ignore connect"); if (DBG) logd(getName() + " ignore connect");
mSavedGoNegotiationConfig = null; sendMessage(GROUP_NEGOTIATION_USER_REJECT);
} }
}) })
.create(); .create();
@@ -1180,14 +1265,16 @@ public class WifiP2pService extends IWifiP2pManager.Stub {
.setView(textEntryView) .setView(textEntryView)
.setPositiveButton(r.getString(R.string.ok), new OnClickListener() { .setPositiveButton(r.getString(R.string.ok), new OnClickListener() {
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
WifiP2pConfig config = new WifiP2pConfig(); sendMessage(GROUP_INVITATION_USER_ACCEPT);
config.deviceAddress = mSavedP2pGroup.getOwner().deviceAddress; }
if (DBG) logd(getName() + " connect to invited group"); })
sendMessage(WifiP2pManager.CONNECT, config); .setNegativeButton(r.getString(R.string.cancel), new OnClickListener() {
mSavedP2pGroup = null; @Override
public void onClick(DialogInterface dialog, int which) {
if (DBG) logd(getName() + " ignore invite");
sendMessage(GROUP_INVITATION_USER_REJECT);
} }
}) })
.setNegativeButton(r.getString(R.string.cancel), null)
.create(); .create();
pin.setVisibility(View.GONE); pin.setVisibility(View.GONE);