src/com/beem/project/beem/ui/PrivacyList.java
changeset 520 88a19fcd70b3
parent 518 6b8089c9b834
child 528 a77a7b4e7f34
--- a/src/com/beem/project/beem/ui/PrivacyList.java	Sun Nov 15 23:03:54 2009 +0100
+++ b/src/com/beem/project/beem/ui/PrivacyList.java	Mon Nov 16 02:00:06 2009 +0100
@@ -3,19 +3,30 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import android.app.AlertDialog;
 import android.app.ListActivity;
 import android.content.ComponentName;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
 import android.os.Bundle;
+import android.os.Handler;
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
 import android.widget.ArrayAdapter;
+import android.widget.EditText;
 
 import com.beem.project.beem.BeemService;
 import com.beem.project.beem.R;
+import com.beem.project.beem.service.PrivacyListItem;
+import com.beem.project.beem.service.aidl.IPrivacyListListener;
 import com.beem.project.beem.service.aidl.IPrivacyListManager;
 import com.beem.project.beem.service.aidl.IXmppFacade;
 import com.beem.project.beem.utils.BeemBroadcastReceiver;
@@ -31,13 +42,16 @@
     static {
 	SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
     }
+    private Handler mHandler = new Handler();
 
     private ArrayAdapter<String> mAdapter;
     private final List<String> mPrivacyListNames = new ArrayList<String>();
 
     private final ServiceConnection mConn = new BeemServiceConnection();
     private BeemBroadcastReceiver mBroadcastReceiver;
+
     private IPrivacyListManager mPrivacyListManager;
+    private IPrivacyListListener mPrivacyListListener;
 
     /**
      * Constructor.
@@ -55,9 +69,12 @@
 	Log.d(TAG, "BEGIN onCreate.");
 	setContentView(R.layout.privacy_list);
 
+	mHandler = new Handler();
+
 	mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPrivacyListNames);
 	setListAdapter(mAdapter);
 
+	mPrivacyListListener = new PrivacyListListener();
 	mBroadcastReceiver = new BeemBroadcastReceiver(mConn);
 	this.registerReceiver(mBroadcastReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
 
@@ -102,6 +119,32 @@
 	Log.v(TAG, "END onStop.");
     }
 
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
+    public final boolean onCreateOptionsMenu(Menu menu) {
+	super.onCreateOptionsMenu(menu);
+
+	MenuInflater inflater = getMenuInflater();
+	inflater.inflate(R.menu.privacy_list, menu);
+	return true;
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
+    public final boolean onOptionsItemSelected(MenuItem item) {
+	switch (item.getItemId()) {
+	    case R.id.privacy_list_menu_create:
+		createCreatePrivacyListDialog();
+		return true;
+	    default:
+		return false;
+	}
+    }
+
     private final class BeemServiceConnection implements ServiceConnection {
 
 	private IXmppFacade mXmppFacade;
@@ -110,8 +153,18 @@
 	public void onServiceConnected(ComponentName name, IBinder service) {
 	    Log.v(TAG, "BEGIN onServiceConnected.");
 	    mXmppFacade = IXmppFacade.Stub.asInterface(service);
+	    mBroadcastReceiver.setBinded(true);
 	    try {
 		mPrivacyListManager = mXmppFacade.getPrivacyListManager();
+		mPrivacyListManager.addPrivacyListListener(mPrivacyListListener);
+		/**
+		 * FIXME: ERROR /AndroidRuntime(21999): java.lang.ClassCastException:
+		 * org.jivesoftware.smack.PacketReader$4 ERROR/AndroidRuntime(21999): at
+		 * org.jivesoftware.smack.PrivacyListManager.getRequest(PrivacyListManager.java:189) at
+		 * org.jivesoftware.smack.PrivacyListManager.getPrivacyWithListNames(PrivacyListManager.java:254)
+		 */
+		// mPrivacyListNames = mPrivacyListManager.getPrivacyLists();
+		// mAdapter.notifyDataSetChanged();
 	    } catch (RemoteException e) {
 		Log.e(TAG, e.getMessage());
 	    }
@@ -122,7 +175,55 @@
 	public void onServiceDisconnected(ComponentName name) {
 	    Log.v(TAG, "BEGIN onServiceDisconnected.");
 	    mXmppFacade = null;
+	    mBroadcastReceiver.setBinded(false);
 	    Log.v(TAG, "END onServiceDisconnected.");
 	}
     }
+
+    private class PrivacyListListener extends IPrivacyListListener.Stub {
+
+	@Override
+	public void setPrivacyList(String listName, List<PrivacyListItem> listItem) throws RemoteException {
+	    Log.d(TAG, "BEGIN PrivacyListListener >> setPrivacyList.");
+	    Log.d(TAG, listName);
+	    Log.d(TAG, "END PrivacyListListener >> setPrivacyList.");
+	}
+
+	@Override
+	public void updatedPrivacyList(String listName) throws RemoteException {
+	    Log.d(TAG, "BEGIN PrivacyListListener >> updatedPrivacyList.");
+	    Log.d(TAG, listName);
+	    Log.d(TAG, "END PrivacyListListener >> updatedPrivacyList.");
+	}
+    }
+
+    private void createCreatePrivacyListDialog() {
+	LayoutInflater factory = LayoutInflater.from(this);
+	final View textEntryView = factory.inflate(R.layout.privacy_list_create_dialog, null);
+	AlertDialog.Builder builder = new AlertDialog.Builder(this);
+	builder.setTitle(R.string.privacy_list_create_dialog_title);
+	builder.setView(textEntryView);
+
+	builder.setPositiveButton(R.string.privacy_list_create_dialog_create_button,
+	    new DialogInterface.OnClickListener() {
+		public void onClick(DialogInterface dialog, int whichButton) {
+		    EditText listNameField = (EditText) textEntryView
+			.findViewById(R.id.privacy_list_create_dialog_list_name);
+		    try {
+			mPrivacyListManager.createPrivacyList(listNameField.getText().toString(),
+			    new ArrayList<PrivacyListItem>());
+		    } catch (RemoteException e) {
+			Log.e(TAG, e.getMessage());
+		    }
+		}
+	    });
+
+	builder.setNegativeButton(R.string.CancelButton, new DialogInterface.OnClickListener() {
+	    public void onClick(DialogInterface dialog, int whichButton) {
+	    }
+	});
+
+	AlertDialog createPrivacyListDialog = builder.create();
+	createPrivacyListDialog.show();
+    }
 }