Fix p2p settings crash

- Restore on orientation change
- Use appropriate string for dialog

Bug: 6456079
Bug: 6463563
Change-Id: I1fa0b90a14d09608b580ebf3d66b92fc8721eae7
This commit is contained in:
Irfan Sheriff
2012-05-18 13:27:05 -07:00
parent 4837a691ce
commit db3d4bb8c4

View File

@@ -89,6 +89,8 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
private static final int DIALOG_CANCEL_CONNECT = 2; private static final int DIALOG_CANCEL_CONNECT = 2;
private static final int DIALOG_RENAME = 3; private static final int DIALOG_RENAME = 3;
private static final String SAVE_DIALOG_PEER = "PEER_STATE";
private WifiP2pDevice mThisDevice; private WifiP2pDevice mThisDevice;
private WifiP2pDeviceList mPeers = new WifiP2pDeviceList(); private WifiP2pDeviceList mPeers = new WifiP2pDeviceList();
@@ -134,8 +136,7 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
}; };
@Override @Override
public void onCreate(Bundle icicle) { public void onActivityCreated(Bundle savedInstanceState) {
super.onCreate(icicle);
addPreferencesFromResource(R.xml.wifi_p2p_settings); addPreferencesFromResource(R.xml.wifi_p2p_settings);
mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION);
@@ -157,6 +158,11 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
Log.e(TAG, "mWifiP2pManager is null !"); Log.e(TAG, "mWifiP2pManager is null !");
} }
if (savedInstanceState != null && savedInstanceState.containsKey(SAVE_DIALOG_PEER)) {
WifiP2pDevice device = savedInstanceState.getParcelable(SAVE_DIALOG_PEER);
mSelectedWifiPeer = new WifiP2pPeer(getActivity(), device);
}
mRenameListener = new OnClickListener() { mRenameListener = new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
@@ -229,6 +235,8 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
mPeersGroup = new PreferenceCategory(getActivity()); mPeersGroup = new PreferenceCategory(getActivity());
mPeersGroup.setTitle(R.string.wifi_p2p_peer_devices); mPeersGroup.setTitle(R.string.wifi_p2p_peer_devices);
super.onActivityCreated(savedInstanceState);
} }
@Override @Override
@@ -336,14 +344,19 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
@Override @Override
public Dialog onCreateDialog(int id) { public Dialog onCreateDialog(int id) {
if (id == DIALOG_DISCONNECT) { if (id == DIALOG_DISCONNECT) {
int stringId = (mConnectedDevices > 1) ? R.string.wifi_p2p_disconnect_multiple_message :
R.string.wifi_p2p_disconnect_message;
String deviceName = TextUtils.isEmpty(mSelectedWifiPeer.device.deviceName) ? String deviceName = TextUtils.isEmpty(mSelectedWifiPeer.device.deviceName) ?
mSelectedWifiPeer.device.deviceAddress : mSelectedWifiPeer.device.deviceAddress :
mSelectedWifiPeer.device.deviceName; mSelectedWifiPeer.device.deviceName;
String msg;
if (mConnectedDevices > 1) {
msg = getActivity().getString(R.string.wifi_p2p_disconnect_multiple_message,
deviceName, mConnectedDevices - 1);
} else {
msg = getActivity().getString(R.string.wifi_p2p_disconnect_message, deviceName);
}
AlertDialog dialog = new AlertDialog.Builder(getActivity()) AlertDialog dialog = new AlertDialog.Builder(getActivity())
.setTitle(R.string.wifi_p2p_disconnect_title) .setTitle(R.string.wifi_p2p_disconnect_title)
.setMessage(getActivity().getString(stringId, deviceName)) .setMessage(msg)
.setPositiveButton(getActivity().getString(R.string.dlg_ok), mDisconnectListener) .setPositiveButton(getActivity().getString(R.string.dlg_ok), mDisconnectListener)
.setNegativeButton(getActivity().getString(R.string.dlg_cancel), null) .setNegativeButton(getActivity().getString(R.string.dlg_cancel), null)
.create(); .create();
@@ -374,6 +387,13 @@ public class WifiP2pSettings extends SettingsPreferenceFragment
return null; return null;
} }
@Override
public void onSaveInstanceState(Bundle outState) {
if (mSelectedWifiPeer != null) {
outState.putParcelable(SAVE_DIALOG_PEER, mSelectedWifiPeer.device);
}
}
public void onPeersAvailable(WifiP2pDeviceList peers) { public void onPeersAvailable(WifiP2pDeviceList peers) {
mPeersGroup.removeAll(); mPeersGroup.removeAll();