Submenu context.
authorVincent Veronis <veroni_v@epitech.net>
Fri, 04 Dec 2009 11:31:17 +0100
changeset 555 5262009d9a24
parent 554 eaf76f5b1f65
child 556 9d3c83e70ed2
Submenu context. Alias OK.
res/layout/contactdialogaliasdialog.xml
res/menu/contactlist_context.xml
res/values/strings.xml
src/com/beem/project/beem/ui/ContactList.java
src/com/beem/project/beem/ui/Settings.java
src/com/beem/project/beem/ui/UserInfo.java
--- a/res/layout/contactdialogaliasdialog.xml	Thu Dec 03 12:15:54 2009 +0100
+++ b/res/layout/contactdialogaliasdialog.xml	Fri Dec 04 11:31:17 2009 +0100
@@ -2,13 +2,14 @@
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
 	android:orientation="vertical" android:layout_width="fill_parent"
 	android:layout_height="fill_parent">
-
+	<TextView android:id="@+id/CDAliasDialogLabel"
+		android:layout_height="wrap_content" android:layout_width="wrap_content"
+		android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
+		android:text="@string/userinfo_label_alias"
+		android:gravity="left" style="@style/Label" />
 	<EditText android:id="@+id/CDAliasDialogName"
-		android:layout_width="fill_parent" android:layout_height="wrap_content"
-		android:inputType="textPersonName" android:imeOptions="actionDone"
-		android:singleLine="true" android:maxLines="1" />
-
-	<Button android:id="@+id/CDAliasDialogOk" android:layout_width="fill_parent"
-		android:layout_height="wrap_content" android:text="@string/OkButton" />
-
+		android:layout_height="wrap_content" android:layout_width="fill_parent"
+		android:layout_marginLeft="20dip" android:layout_marginRight="20dip"
+		android:scrollHorizontally="true" android:autoText="false"
+		android:capitalize="none" android:gravity="fill_horizontal" />
 </LinearLayout>
--- a/res/menu/contactlist_context.xml	Thu Dec 03 12:15:54 2009 +0100
+++ b/res/menu/contactlist_context.xml	Fri Dec 04 11:31:17 2009 +0100
@@ -1,5 +1,17 @@
 <menu xmlns:android="http://schemas.android.com/apk/res/android">
-    <item android:id="@+id/contact_list_context_menu_chat_item" android:title="@string/CDChat" />
-    <item android:id="@+id/contact_list_context_menu_call_item" android:title="@string/CDCall" android:visible="false" />
-    <item android:id="@+id/contact_list_context_menu_manage_user_item" android:title="@string/CDInfos" />
+	<item android:id="@+id/contact_list_context_menu_chat_item"
+		android:title="@string/CDChat" />
+	<item android:id="@+id/contact_list_context_menu_call_item"
+		android:title="@string/CDCall" android:visible="false" />
+	<item android:id="@+id/contact_list_context_menu_user_info"
+		android:title="@string/CDInfos">
+		<menu>
+			<item android:id="@+id/menu_userinfo_alias" android:title="@string/userinfo_label_alias" />
+			<item android:id="@+id/userinfo_layout_chg_group" android:title="@string/userinfo_label_chg_group" />
+			<item android:id="@+id/userinfo_layout_re_suscription"
+				android:title="@string/userinfo_label_re_suscription" />
+			<item android:id="@+id/userinfo_layout_block" android:title="@string/userinfo_label_block" />
+			<item android:id="@+id/userinfo_layout_delete" android:title="@string/userinfo_label_delete" />
+		</menu>
+	</item>
 </menu>
--- a/res/values/strings.xml	Thu Dec 03 12:15:54 2009 +0100
+++ b/res/values/strings.xml	Fri Dec 04 11:31:17 2009 +0100
@@ -233,7 +233,7 @@
 	<string name="contact_list_all_contact">All contacts</string>
 	<string name="contact_list_no_group">No group</string>
 
-	<!-- UserInfo Activity -->
+	<!-- UserInfo dialog -->
 	<string name="userinfo_label_alias">Alias</string>
 	<string name="userinfo_label_chg_group">Manage groups</string>
 	<string name="userinfo_label_re_suscription">Resend invit</string>
--- a/src/com/beem/project/beem/ui/ContactList.java	Thu Dec 03 12:15:54 2009 +0100
+++ b/src/com/beem/project/beem/ui/ContactList.java	Fri Dec 04 11:31:17 2009 +0100
@@ -10,8 +10,11 @@
 import org.jivesoftware.smack.util.StringUtils;
 
 import android.app.Activity;
+import android.app.AlertDialog;
+import android.app.Dialog;
 import android.content.ComponentName;
 import android.content.Context;
+import android.content.DialogInterface;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.ServiceConnection;
@@ -23,6 +26,7 @@
 import android.os.IBinder;
 import android.os.RemoteException;
 import android.preference.PreferenceManager;
+import android.util.Log;
 import android.view.ContextMenu;
 import android.view.LayoutInflater;
 import android.view.Menu;
@@ -32,10 +36,12 @@
 import android.view.ViewGroup;
 import android.widget.AdapterView;
 import android.widget.BaseAdapter;
+import android.widget.EditText;
 import android.widget.Gallery;
 import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
 import android.widget.AdapterView.OnItemClickListener;
 
 import com.beem.project.beem.R;
@@ -55,6 +61,7 @@
     // private static final String TAG = "CONTACTLIST_ACT";
     private static final Intent SERVICE_INTENT = new Intent();
     private static final int REQUEST_CODE = 1;
+    private static final int DIALOG_ALIAS = 11;
     private BeemContactList mAdapterContactList;
     private BeemBanner mAdapterBanner;
     private IRoster mRoster;
@@ -62,6 +69,7 @@
     private final List<String> mListGroup = new ArrayList<String>();
     private final Map<String, List<Contact>> mContactOnGroup = new HashMap<String, List<Contact>>();
     private String mCurGroup;
+    private Contact mContact;
     private Handler mHandler;
     private IXmppFacade mXmppFacade;
     private SharedPreferences mSettings;
@@ -140,6 +148,16 @@
 	// TODO gere les info du context menu pour afficher que pour le bon long click
 	MenuInflater inflater = getMenuInflater();
 	inflater.inflate(R.menu.contactlist_context, menu);
+	AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) menuInfo;
+	Contact c = mListContact.get(info.position);
+	try {
+	    mContact = mRoster.getContact(c.getJID());
+	} catch (RemoteException e) {
+	    // TODO Auto-generated catch block
+	    e.printStackTrace();
+	}
+	menu.setHeaderTitle(mContact.getJID());
+	Log.e("OO", mContact.getName());
     }
 
     /**
@@ -147,34 +165,31 @@
      */
     @Override
     public boolean onContextItemSelected(MenuItem item) {
-	ContextMenu.ContextMenuInfo i = item.getMenuInfo();
-	if (i != null && i instanceof AdapterView.AdapterContextMenuInfo) {
-	    AdapterView.AdapterContextMenuInfo info = (AdapterView.AdapterContextMenuInfo) i;
-	    Contact c = mListContact.get(info.position);
-	    Intent in;
-	    if (c != null) {
-		switch (item.getItemId()) {
-		    case R.id.contact_list_context_menu_chat_item:
-			in = new Intent(this, Chat.class);
-			in.setData(c.toUri());
-			startActivity(in);
+	Intent in;
+	if (mContact != null) {
+	    switch (item.getItemId()) {
+		case R.id.contact_list_context_menu_chat_item:
+		    in = new Intent(this, Chat.class);
+		    in.setData(mContact.toUri());
+		    startActivity(in);
+		    return true;
+		case R.id.contact_list_context_menu_call_item:
+		    try {
+			mXmppFacade.call(mContact.getJID() + "/psi");
 			return true;
-		    case R.id.contact_list_context_menu_call_item:
-			try {
-			mXmppFacade.call(c.getJID() + "/psi");
-			return true;
-			} catch (RemoteException e) {
-			    e.printStackTrace();
-			}
-		    case R.id.contact_list_context_menu_manage_user_item:
-			in = new Intent(this, UserInfo.class);
-			//TODO use in.setData(c.toUri()); a la place 
-			in.putExtra("contact_contactdialog", c.getJID());
-			startActivity(in);
-			return true;
-		    default:
-			return super.onContextItemSelected(item);
-		}
+		    } catch (RemoteException e) {
+			e.printStackTrace();
+		    }
+		    return true;
+		case R.id.contact_list_context_menu_user_info:
+		    item.getSubMenu().setHeaderTitle(mContact.getName());
+		    return true;
+		case R.id.menu_userinfo_alias:
+		    Dialog alias = new DialogAlias(ContactList.this, mContact).create();
+		    alias.show();
+		    return true;
+		default:
+		    return super.onContextItemSelected(item);
 	    }
 	}
 	return super.onContextItemSelected(item);
@@ -188,7 +203,6 @@
 		mListContact.clear();
 		stopService(SERVICE_INTENT);
 		finish();
-	//	startActivity(new Intent(this, Login.class));
 	    }
 	}
     }
@@ -340,8 +354,7 @@
 	    R.drawable.status_available));
 	mIconsMap.put(Status.CONTACT_STATUS_AVAILABLE_FOR_CHAT, BitmapFactory.decodeResource(getResources(),
 	    R.drawable.status_available));
-	mIconsMap
-	    .put(Status.CONTACT_STATUS_AWAY, BitmapFactory.decodeResource(getResources(), R.drawable.status_away));
+	mIconsMap.put(Status.CONTACT_STATUS_AWAY, BitmapFactory.decodeResource(getResources(), R.drawable.status_away));
 	mIconsMap.put(Status.CONTACT_STATUS_BUSY, BitmapFactory.decodeResource(getResources(), R.drawable.status_dnd));
 	mIconsMap.put(Status.CONTACT_STATUS_DISCONNECT, BitmapFactory.decodeResource(getResources(),
 	    R.drawable.status_offline));
@@ -564,7 +577,6 @@
 	    return position;
 	}
 
-
 	/**
 	 * {@inheritDoc}
 	 */
@@ -671,6 +683,52 @@
     }
 
     /**
+     * Create dialog alias.
+     */
+    public class DialogAlias extends AlertDialog.Builder {
+	EditText editTextAlias;
+	Contact contact;
+
+	protected DialogAlias(Context context, Contact c) {
+	    super(context);
+	    LayoutInflater factory = LayoutInflater.from(context);
+	    final View textEntryView = factory.inflate(R.layout.contactdialogaliasdialog, null);
+	    setTitle(c.getName());
+	    setView(textEntryView);
+	    editTextAlias = (EditText) textEntryView.findViewById(R.id.CDAliasDialogName);
+	    editTextAlias.setText(mContact.getName());
+	    setPositiveButton("OK", new ContactDialogAliasDialog());
+	    setNegativeButton("Cancel", new ContactDialogAliasDialog());
+	    contact = c;
+	}
+
+	/**
+	 * Event click on the button OK.
+	 */
+	class ContactDialogAliasDialog implements DialogInterface.OnClickListener {
+
+	    /**
+	     * Constructor.
+	     */
+	    public ContactDialogAliasDialog() {
+	    }
+
+	    @Override
+	    public void onClick(DialogInterface dialog, int which) {
+		Log.i("OOO", "OO " + which);
+		String name = editTextAlias.getText().toString();
+		if (name.length() == 0)
+		    name = mContact.getJID();
+		try {
+		    mRoster.setContactName(mContact.getJID(), name);
+		} catch (RemoteException e) {
+		    e.printStackTrace();
+		}
+	    }
+	}
+    }
+
+    /**
      * The service connection used to connect to the Beem service.
      */
     private class BeemServiceConnection implements ServiceConnection {
--- a/src/com/beem/project/beem/ui/Settings.java	Thu Dec 03 12:15:54 2009 +0100
+++ b/src/com/beem/project/beem/ui/Settings.java	Fri Dec 04 11:31:17 2009 +0100
@@ -93,9 +93,7 @@
 		startActivity(i);
 		return true;
 	    case R.id.settings_menu_privacy_lists:
-		/*
-		 * i = new Intent(this, PrivacyList.class); startActivity(i);
-		 */
+		 i = new Intent(this, PrivacyList.class); startActivity(i);
 		return true;
 	    default:
 		return false;
--- a/src/com/beem/project/beem/ui/UserInfo.java	Thu Dec 03 12:15:54 2009 +0100
+++ b/src/com/beem/project/beem/ui/UserInfo.java	Fri Dec 04 11:31:17 2009 +0100
@@ -160,14 +160,14 @@
 		nameText.setText(mContact.getJID());
 	    else
 		nameText.setText(mContact.getName());
-	    Button ok = (Button) findViewById(R.id.CDAliasDialogOk);
-	    ok.setOnClickListener(new ContactDialogAliasDialogOK());
+	    //Button ok = (Button) findViewById(R.id.CDAliasDialogOk);
+	    //ok.setOnClickListener(new ContactDialogAliasDialogOK());
 	}
 
 	/**
 	 * Event click on the button OK.
 	 */
-	private class ContactDialogAliasDialogOK implements View.OnClickListener {
+	public class ContactDialogAliasDialogOK implements View.OnClickListener {
 
 	    /**
 	     * Constructor.