--- 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();
+ }
}