L'ajout de contact ne necessite plus de remplir tous les champs
authorDa Risk <darisk972@gmail.com>
Mon, 22 Jun 2009 20:40:24 +0200
changeset 265 3ee7b8fdbddd
parent 264 454a83b47bcd
child 266 a224ac0a1e95
L'ajout de contact ne necessite plus de remplir tous les champs
src/com/beem/project/beem/service/RosterAdapter.java
src/com/beem/project/beem/ui/AddContact.java
--- a/src/com/beem/project/beem/service/RosterAdapter.java	Mon Jun 22 19:13:57 2009 +0200
+++ b/src/com/beem/project/beem/service/RosterAdapter.java	Mon Jun 22 20:40:24 2009 +0200
@@ -30,126 +30,16 @@
  * 
  * @author darisk
  */
-public class RosterAdapter extends com.beem.project.beem.service.aidl.IRoster.Stub {
-
-	/**
-	 * Listener for the roster events. It will call the remote listeners registered.
-	 * 
-	 * @author darisk
-	 */
-	private class RosterListenerAdapter implements RosterListener {
-
-		/**
-		 * Constructor.
-		 */
-		public RosterListenerAdapter() {
-			// TODO Auto-generated constructor stub
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public void entriesAdded(Collection<String> addresses) {
-			Log.i(TAG, "Ajout de l'entry");
-			final int n = mRemoteRosListeners.beginBroadcast();
-
-			List<String> tab = new ArrayList<String>();
-			tab.addAll(addresses);
-			for (int i = 0; i < n; i++) {
-				IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
-				try {					
-					listener.onEntriesAdded(tab);
-				} catch (RemoteException e) {
-					Log.w(TAG, "Error while adding roster entries", e);
-				}
-			}
-			mRemoteRosListeners.finishBroadcast();
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public void entriesDeleted(Collection<String> addresses) {
-			Log.i(TAG, "Suppression de l'entry");
-			final int n = mRemoteRosListeners.beginBroadcast();
-
-			List<String> tab = new ArrayList<String>();
-			tab.addAll(addresses);
-			for (int i = 0; i < n; i++) {
-				IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
-				try {					
-					listener.onEntriesDeleted(tab);
-				} catch (RemoteException e) {
-					Log.w(TAG, "Error while deleting roster entries", e);
-				}
-			}
-			mRemoteRosListeners.finishBroadcast();
-		}
+public class RosterAdapter extends
+		com.beem.project.beem.service.aidl.IRoster.Stub {
 
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public void entriesUpdated(Collection<String> addresses) {
-			Log.d(TAG, "Update de l'entry");
-			final int n = mRemoteRosListeners.beginBroadcast();
-
-			List<String> tab = new ArrayList<String>();
-			tab.addAll(addresses);
-			for (int i = 0; i < n; i++) {
-				IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
-				try {					
-					listener.onEntriesUpdated(tab);
-				} catch (RemoteException e) {
-					Log.w(TAG, "Error while updating roster entries", e);
-				}
-			}
-			mRemoteRosListeners.finishBroadcast();
-		}
-
-		/**
-		 * {@inheritDoc}
-		 */
-		@Override
-		public void presenceChanged(Presence presence) {
-			Log.i(TAG, "Changement de Presence");
-			String user = StringUtils.parseBareAddress(presence.getFrom());
-			Log.d(TAG, "User : " + user);
-			Contact c = mContacts.get(StringUtils.parseBareAddress(user));
-			if (c == null) {
-				c = new Contact(user);
-				mContacts.put(user, c);
-			}
-			c.addRes(StringUtils.parseResource(presence.getFrom()));
-			c.setStatus(mAdaptee.getPresence(presence.getFrom()));
-			c.setMsgState(presence.getStatus());
-			c.setName(mAdaptee.getEntry(user).getName());
-			/* redispatch vers les IBeemRosterListener */
-			final int n = mRemoteRosListeners.beginBroadcast();
-
-			for (int i = 0; i < n; i++) {
-				IBeemRosterListener listener = mRemoteRosListeners.getBroadcastItem(i);
-				try {
-					listener.onPresenceChanged(new PresenceAdapter(presence));
-				} catch (RemoteException e) {
-					// The RemoteCallbackList will take care of removing the
-					// dead listeners.
-					Log.w(TAG, "Error while updating roster entries", e);
-				}
-			}
-			mRemoteRosListeners.finishBroadcast();
-		}
-	}
-
-	private static final String                     TAG                 = "RosterAdapter";
-	private Roster                                  mAdaptee;
+	private static final String TAG = "RosterAdapter";
+	private Roster mAdaptee;
 	private RemoteCallbackList<IBeemRosterListener> mRemoteRosListeners = new RemoteCallbackList<IBeemRosterListener>();
 
-	private Map<String, Contact>                    mContacts           = new HashMap<String, Contact>();
+	private Map<String, Contact> mContacts = new HashMap<String, Contact>();
 
-	private RosterListenerAdapter                   mRosterListener     = new RosterListenerAdapter();
+	private RosterListenerAdapter mRosterListener = new RosterListenerAdapter();
 
 	/**
 	 * Constructor.
@@ -176,7 +66,8 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public void addRosterListener(IBeemRosterListener listen) throws RemoteException {
+	public void addRosterListener(IBeemRosterListener listen)
+			throws RemoteException {
 		if (listen != null)
 			mRemoteRosListeners.register(listen);
 	}
@@ -185,46 +76,52 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public Contact addContact(String user, String name, String[] groups) throws RemoteException {
+	public Contact addContact(String user, String name, String[] groups)
+			throws RemoteException {
 		Contact res = null;
 		RosterEntry contact = mAdaptee.getEntry(user);
-		if (contact != null)  {
+		if (contact != null) {
 			res = mContacts.get(user);
-			for (String groupStr : groups) {
-				boolean found = false;
-				for (RosterGroup group: mAdaptee.getGroups()) {
-					if (group.getName().equals(groupStr) && !group.contains(contact)) {
+			if (groups != null) {
+				for (String groupStr : groups) {
+					boolean found = false;
+					for (RosterGroup group : mAdaptee.getGroups()) {
+						if (group.getName().equals(groupStr)
+								&& !group.contains(contact)) {
+							try {
+								group.addEntry(contact);
+								res.addGroup(groupStr);
+								found = true;
+							} catch (XMPPException e) {
+								e.printStackTrace();
+							}
+						}
+					}
+					if (!found) {
 						try {
-							group.addEntry(contact);
-							res.addGroup(groupStr);
-							found = true;
+							mAdaptee.createGroup(groupStr).addEntry(contact);
 						} catch (XMPPException e) {
 							e.printStackTrace();
+						} catch (IllegalArgumentException e) {
 						}
+						res.addGroup(groupStr);
 					}
 				}
-				if (!found) {
-					try {
-						mAdaptee.createGroup(groupStr).addEntry(contact);
-					} catch (XMPPException e) {
-						e.printStackTrace();
-					} catch (IllegalArgumentException e) {
-					}
-					res.addGroup(groupStr);
-				}
 			}
 		} else {
 			try {
 				mAdaptee.createEntry(user, name, groups);
 				res = new Contact(user);
 				mContacts.put(user, res);
-				for (String groupStr : groups) {
-					try {
-						mAdaptee.createGroup(groupStr);
-					} catch (IllegalArgumentException e) {
-						//e.printStackTrace();
+				if (groups != null) {
+					for (String groupStr : groups) {
+						try {
+							mAdaptee.createGroup(groupStr);
+						} catch (IllegalArgumentException e) {
+							// e.printStackTrace();
+						}
+						res.addGroup(groupStr);
 					}
-					res.addGroup(groupStr);
 				}
 			} catch (XMPPException e) {
 				Log.e(TAG, "Error while adding new contact", e);
@@ -285,7 +182,8 @@
 	 * {@inheritDoc}
 	 */
 	@Override
-	public void removeRosterListener(IBeemRosterListener listen) throws RemoteException {
+	public void removeRosterListener(IBeemRosterListener listen)
+			throws RemoteException {
 		if (listen != null)
 			mRemoteRosListeners.unregister(listen);
 	}
@@ -304,4 +202,120 @@
 		return new PresenceAdapter(mAdaptee.getPresence(jid));
 	}
 
+	/**
+	 * Listener for the roster events. It will call the remote listeners
+	 * registered.
+	 * 
+	 * @author darisk
+	 */
+	private class RosterListenerAdapter implements RosterListener {
+
+		/**
+		 * Constructor.
+		 */
+		public RosterListenerAdapter() {
+			// TODO Auto-generated constructor stub
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public void entriesAdded(Collection<String> addresses) {
+			Log.i(TAG, "Ajout de l'entry");
+			final int n = mRemoteRosListeners.beginBroadcast();
+
+			List<String> tab = new ArrayList<String>();
+			tab.addAll(addresses);
+			for (int i = 0; i < n; i++) {
+				IBeemRosterListener listener = mRemoteRosListeners
+						.getBroadcastItem(i);
+				try {
+					listener.onEntriesAdded(tab);
+				} catch (RemoteException e) {
+					Log.w(TAG, "Error while adding roster entries", e);
+				}
+			}
+			mRemoteRosListeners.finishBroadcast();
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public void entriesDeleted(Collection<String> addresses) {
+			Log.i(TAG, "Suppression de l'entry");
+			final int n = mRemoteRosListeners.beginBroadcast();
+
+			List<String> tab = new ArrayList<String>();
+			tab.addAll(addresses);
+			for (int i = 0; i < n; i++) {
+				IBeemRosterListener listener = mRemoteRosListeners
+						.getBroadcastItem(i);
+				try {
+					listener.onEntriesDeleted(tab);
+				} catch (RemoteException e) {
+					Log.w(TAG, "Error while deleting roster entries", e);
+				}
+			}
+			mRemoteRosListeners.finishBroadcast();
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public void entriesUpdated(Collection<String> addresses) {
+			Log.d(TAG, "Update de l'entry");
+			final int n = mRemoteRosListeners.beginBroadcast();
+
+			List<String> tab = new ArrayList<String>();
+			tab.addAll(addresses);
+			for (int i = 0; i < n; i++) {
+				IBeemRosterListener listener = mRemoteRosListeners
+						.getBroadcastItem(i);
+				try {
+					listener.onEntriesUpdated(tab);
+				} catch (RemoteException e) {
+					Log.w(TAG, "Error while updating roster entries", e);
+				}
+			}
+			mRemoteRosListeners.finishBroadcast();
+		}
+
+		/**
+		 * {@inheritDoc}
+		 */
+		@Override
+		public void presenceChanged(Presence presence) {
+			Log.i(TAG, "Changement de Presence");
+			String user = StringUtils.parseBareAddress(presence.getFrom());
+			Log.d(TAG, "User : " + user);
+			Contact c = mContacts.get(StringUtils.parseBareAddress(user));
+			if (c == null) {
+				c = new Contact(user);
+				mContacts.put(user, c);
+			}
+			c.addRes(StringUtils.parseResource(presence.getFrom()));
+			c.setStatus(mAdaptee.getPresence(presence.getFrom()));
+			c.setMsgState(presence.getStatus());
+			c.setName(mAdaptee.getEntry(user).getName());
+			/* redispatch vers les IBeemRosterListener */
+			final int n = mRemoteRosListeners.beginBroadcast();
+
+			for (int i = 0; i < n; i++) {
+				IBeemRosterListener listener = mRemoteRosListeners
+						.getBroadcastItem(i);
+				try {
+					listener.onPresenceChanged(new PresenceAdapter(presence));
+				} catch (RemoteException e) {
+					// The RemoteCallbackList will take care of removing the
+					// dead listeners.
+					Log.w(TAG, "Error while updating roster entries", e);
+				}
+			}
+			mRemoteRosListeners.finishBroadcast();
+		}
+	}
+
 }
--- a/src/com/beem/project/beem/ui/AddContact.java	Mon Jun 22 19:13:57 2009 +0200
+++ b/src/com/beem/project/beem/ui/AddContact.java	Mon Jun 22 20:40:24 2009 +0200
@@ -28,81 +28,79 @@
  */
 public class AddContact extends Activity {
 
-    protected static final String TAG = "AddContact";
-    private String mLogin;
-    private String mAlias;
-    private final List<String> mGroup = new ArrayList<String>();
-    private IXmppFacade xmppFacade;
-    private final ServiceConnection mServConn = new BeemServiceConnection();
-
-    private final OnClickListener mOkListener = new OnClickListener() {
+	protected static final String TAG = "AddContact";
+	private String mLogin;
+	private String mAlias;
+	private final List<String> mGroup = new ArrayList<String>();
+	private IXmppFacade xmppFacade;
+	private final ServiceConnection mServConn = new BeemServiceConnection();
 
 	@Override
-	public void onClick(View v) {
-	    boolean valid = true;
-	    if (getWidgetText(R.id.addc_login).length() == 0) {
-		valid = false;
-	    } else {
-		mLogin = getWidgetText(R.id.addc_login);
-	    }
-	    if (getWidgetText(R.id.addc_alias).length() == 0) {
-		valid = false;
-	    } else {
-		mAlias = getWidgetText(R.id.addc_alias);
-	    }
-	    if (getWidgetText(R.id.addc_group).length() == 0) {
-		valid = false;
-	    } else {
-		mGroup.add(getWidgetText(R.id.addc_group));
-	    }
-	    if (valid) {
-		try {
-		    xmppFacade.getRoster().addContact(mLogin, mAlias, mGroup.toArray(new String[mGroup.size()]));
-		    Toast.makeText(AddContact.this, getString(R.string.AddCContactAdded), Toast.LENGTH_SHORT).show();
-		    finish();
-		} catch (RemoteException e) {
-		    Toast.makeText(AddContact.this, e.getMessage(), Toast.LENGTH_SHORT).show();
-		    e.printStackTrace();
-		}
-		setResult(RESULT_OK);
-	    } else {
-		Toast.makeText(AddContact.this, getString(R.string.AddCBadForm), Toast.LENGTH_SHORT).show();
-		setResult(RESULT_CANCELED);
-	    }
-
-	}
-    };
-
-    private String getWidgetText(int id) {
-	EditText widget = (EditText) this.findViewById(id);
-	return widget.getText().toString();
-    }
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-	super.onCreate(savedInstanceState);
-	setContentView(R.layout.addcontact);
-	Button ok = (Button) findViewById(R.id.addc_ok);
-	ok.setOnClickListener(mOkListener);
-	bindService(new Intent(this, BeemService.class), mServConn, BIND_AUTO_CREATE);
-    }
-
-    @Override
-    protected void onDestroy() {
-	super.onDestroy();
-	unbindService(mServConn);
-    }
-
-    private class BeemServiceConnection implements ServiceConnection {
-
-	@Override
-	public void onServiceConnected(ComponentName name, IBinder service) {
-	    xmppFacade = IXmppFacade.Stub.asInterface(service);
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setContentView(R.layout.addcontact);
+		Button ok = (Button) findViewById(R.id.addc_ok);
+		ok.setOnClickListener(mOkListener);
+		bindService(new Intent(this, BeemService.class), mServConn,
+				BIND_AUTO_CREATE);
 	}
 
 	@Override
-	public void onServiceDisconnected(ComponentName name) {
-	    xmppFacade = null;
+	protected void onDestroy() {
+		super.onDestroy();
+		unbindService(mServConn);
+	}
+
+	private class BeemServiceConnection implements ServiceConnection {
+
+		@Override
+		public void onServiceConnected(ComponentName name, IBinder service) {
+			xmppFacade = IXmppFacade.Stub.asInterface(service);
+		}
+
+		@Override
+		public void onServiceDisconnected(ComponentName name) {
+			xmppFacade = null;
+		}
+	}
+
+	private String getWidgetText(int id) {
+		EditText widget = (EditText) this.findViewById(id);
+		return widget.getText().toString();
 	}
-    }
+
+	private final OnClickListener mOkListener = new OnClickListener() {
+	
+		@Override
+		public void onClick(View v) {
+			boolean valid = true;
+			mLogin = getWidgetText(R.id.addc_login);
+			mAlias = getWidgetText(R.id.addc_alias);
+			if (mLogin.length() == 0)
+				valid = false;
+			if (getWidgetText(R.id.addc_group).length() != 0)
+				mGroup.add(getWidgetText(R.id.addc_group));
+			if (valid) {
+				try {
+					xmppFacade.getRoster().addContact(mLogin, mAlias,
+							mGroup.toArray(new String[mGroup.size()]));
+					Toast.makeText(AddContact.this,
+							getString(R.string.AddCContactAdded),
+							Toast.LENGTH_SHORT).show();
+					finish();
+				} catch (RemoteException e) {
+					Toast.makeText(AddContact.this, e.getMessage(),
+							Toast.LENGTH_SHORT).show();
+					e.printStackTrace();
+				}
+				setResult(RESULT_OK);
+			} else {
+				Toast.makeText(AddContact.this,
+						getString(R.string.AddCBadForm), Toast.LENGTH_SHORT)
+						.show();
+				setResult(RESULT_CANCELED);
+			}
+	
+		}
+	};
 }