Privacy

What is?

Privacy is a method for users to block communications from particular other users. In XMPP this is done by managing one's privacy lists.
Server-side privacy lists enable successful completion of the following use cases:

How can I use it?

The API implementation releases three main public classes:

  1. Right from the start, a client MAY get his/her privacy list that is stored in the server:
    	// Create a privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Retrieve server privacy lists
    	PrivacyList[] lists = privacyManager.getPrivacyLists();
    
    Now the client is able to show every PrivacyItem of the server and also for every list if it is active, default or none of them. The client is a listener of privacy changes.

  2. In order to add a new list in the server, the client MAY implement something like:
    	// Set the name of the list
    	String listName = "newList";
    
    	// Create the list of PrivacyItem that will allow or deny some privacy aspect
    	String user = "tybalt@example.com";
    	String groupName = "enemies";
    	ArrayList privacyItems = new ArrayList();
    
    	PrivacyItem item = new PrivacyItem(PrivacyRule.JID, true, 1);
    	item.setValue(user);
    	privacyItems.add(item);
    
    	item = new PrivacyItem(PrivacyRule.SUBSCRIPTION, true, 2);
    	item.setValue(PrivacyRule.SUBSCRIPTION_BOTH);
    	privacyItems.add(item);
         	
    	item = new PrivacyItem(PrivacyRule.GROUP, false, 3);
    	item.setValue(groupName);
    	item.setFilterMessage(true);
    	privacyItems.add(item);
    
    	// Get the privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Create the new list.
    	privacyManager.createPrivacyList(listName, Arrays.asList(privacyItems));
    
  3. To modify an existent list, the client code MAY be like:
    	// Set the name of the list
    	String listName = "existingList";
    	// Get the privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Sent the new list to the server.
    	privacyManager.updatePrivacyList(listName, items);
    
    Notice items was defined at the example 2 and MUST contain all the elements in the list (not the "delta").
  4. In order to delete an existing list, the client MAY perform something like:
    	// Set the name of the list
    	String listName = "existingList";
    	// Get the privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Remove the list.
    	privacyManager.deletePrivacyList(listName);
    
  5. In order to decline the use of an active list, the client MAY perform something like:
    	// Get the privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Decline the use of the active list.
    	privacyManager.declineActiveList();
    
  6. In order to decline the use of a default list, the client MAY perform something like:
    	// Get the privacy manager for the current connection.
    	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
    	// Decline the use of the default list.
    	privacyManager.declineDefaultList();
    

Listening for Privacy Changes

In order to handle privacy changes, clients SHOULD listen manager's updates. When a list is changed the manager notifies every added listener. Listeners MUST implement the PrivacyListListener interface. Clients may need to react when a privacy list is modified. The PrivacyListManager lets you add listerners that will be notified when a list has been changed. Listeners should implement the PrivacyListListener interface.
The most important notification is updatedPrivacyList that is performed when a privacy list changes its privacy items.
The listener becomes notified after performing:

	// Get the privacy manager for the current connection.
	PrivacyListManager privacyManager = PrivacyListManager.getInstanceFor(myConnection);
	// Add the listener (this) to get notified
	privacyManager.addListener(this);

References