Création/Suppression de PrivacyLists fonctionnels.
authorJean-Manuel Da Silva <dasilvj@gmail.com>
Thu, 19 Nov 2009 01:14:15 +0100
changeset 529 7964f04c2bf7
parent 528 a77a7b4e7f34
child 532 58a827799e79
Création/Suppression de PrivacyLists fonctionnels.
res/values-fr/arrays.xml
res/values/arrays.xml
res/values/strings.xml
src/com/beem/project/beem/ui/PrivacyList.java
src/com/beem/project/beem/ui/Settings.java
--- a/res/values-fr/arrays.xml	Wed Nov 18 00:16:35 2009 +0100
+++ b/res/values-fr/arrays.xml	Thu Nov 19 01:14:15 2009 +0100
@@ -13,4 +13,9 @@
 		<item name="Unavailable">Indisponible</item>
 		<item name="Disconnected">Déconnecté(e)</item>
 	</string-array>
+	<string-array name="privacy_list_select_dialog">
+		<item name="@string/privacy_list_select_dialog_buddies">Contacts</item>
+		<item name="@string/privacy_list_select_dialog_groups">Groupes</item>
+		<item name="@string/privacy_list_select_dialog_delete">Supprimer</item>
+	</string-array>
 </resources>
--- a/res/values/arrays.xml	Wed Nov 18 00:16:35 2009 +0100
+++ b/res/values/arrays.xml	Thu Nov 19 01:14:15 2009 +0100
@@ -13,4 +13,9 @@
 		<item name="Unavailable">Unavailable</item>
 		<item name="Disconnected">Disconnected</item>
 	</string-array>
+	<string-array name="privacy_list_select_dialog">
+		<item name="@string/privacy_list_select_dialog_buddies">Buddies</item>
+		<item name="@string/privacy_list_select_dialog_groups">Groups</item>
+		<item name="@string/privacy_list_select_dialog_delete">Delete</item>
+	</string-array>
 </resources>
--- a/res/values/strings.xml	Wed Nov 18 00:16:35 2009 +0100
+++ b/res/values/strings.xml	Thu Nov 19 01:14:15 2009 +0100
@@ -280,6 +280,9 @@
 	<string name="privacy_list_create_dialog_title">Create a privacy list</string>
 	<string name="privacy_list_create_dialog_list_name_label">Title</string>
 	<string name="privacy_list_create_dialog_create_button">Create</string>
+	<string name="privacy_list_select_dialog_buddies">Buddies</string>
+	<string name="privacy_list_select_dialog_groups">Groups</string>
+	<string name="privacy_list_select_dialog_delete">Delete</string>
 
 	<string name="UpdateButton">Update</string>
 </resources>
--- a/src/com/beem/project/beem/ui/PrivacyList.java	Wed Nov 18 00:16:35 2009 +0100
+++ b/src/com/beem/project/beem/ui/PrivacyList.java	Thu Nov 19 01:14:15 2009 +0100
@@ -4,6 +4,7 @@
 import java.util.List;
 
 import android.app.AlertDialog;
+import android.app.Dialog;
 import android.app.ListActivity;
 import android.content.ComponentName;
 import android.content.DialogInterface;
@@ -20,10 +21,9 @@
 import android.view.MenuInflater;
 import android.view.MenuItem;
 import android.view.View;
-import android.widget.AdapterView;
 import android.widget.ArrayAdapter;
 import android.widget.EditText;
-import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ListView;
 
 import com.beem.project.beem.BeemService;
 import com.beem.project.beem.R;
@@ -44,10 +44,17 @@
     static {
 	SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
     }
+    private static final int DIALOG_PRIVACY_LIST_ITEM = 1;
+    private static final int DIALOG_CREATE_PRIVACY_LIST = 2;
+
+    private static final String SAVED_INSTANCE_KEY_PRIVACY_LISTS = "PRIVACY_LISTS";
+    private static final String SAVED_INSTANCE_KEY_LAST_CLICKED_ITEM = "LAST_CLICKED_ITEM";
+
     private Handler mHandler = new Handler();
 
     private ArrayAdapter<String> mAdapter;
     private final List<String> mPrivacyListNames = new ArrayList<String>();
+    private int mPosLastClickedItem;
 
     private final ServiceConnection mConn = new BeemServiceConnection();
     private BeemBroadcastReceiver mBroadcastReceiver;
@@ -66,6 +73,18 @@
      * {@inheritDoc}.
      */
     @Override
+    protected void onSaveInstanceState(Bundle savedInstanceState) {
+	Log.d(TAG, "BEGIN onSaveInstanceState.");
+	savedInstanceState.putStringArrayList(SAVED_INSTANCE_KEY_PRIVACY_LISTS, (ArrayList<String>) mPrivacyListNames);
+	savedInstanceState.putInt(SAVED_INSTANCE_KEY_LAST_CLICKED_ITEM, mPosLastClickedItem);
+	Log.d(TAG, "END onSaveInstanceState.");
+	super.onSaveInstanceState(savedInstanceState);
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
     protected void onCreate(Bundle savedInstanceState) {
 	super.onCreate(savedInstanceState);
 	Log.d(TAG, "BEGIN onCreate.");
@@ -73,15 +92,14 @@
 
 	mHandler = new Handler();
 
+	if (savedInstanceState != null && !savedInstanceState.isEmpty()) {
+	    mPrivacyListNames.addAll(savedInstanceState.getStringArrayList(SAVED_INSTANCE_KEY_PRIVACY_LISTS));
+	    mPosLastClickedItem = savedInstanceState.getInt(SAVED_INSTANCE_KEY_LAST_CLICKED_ITEM);
+	}
+
 	mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, mPrivacyListNames);
 	setListAdapter(mAdapter);
 
-	this.getListView().setOnItemClickListener(new OnItemClickListener() {
-	    @Override
-	    public void onItemClick(AdapterView<?> arg0, View arg1, int arg2, long arg3) {
-	    }
-	});
-
 	mPrivacyListListener = new PrivacyListListener();
 	mBroadcastReceiver = new BeemBroadcastReceiver(mConn);
 	this.registerReceiver(mBroadcastReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
@@ -93,6 +111,71 @@
      * {@inheritDoc}.
      */
     @Override
+    protected void onPrepareDialog(int id, Dialog dialog) {
+	Log.d(TAG, "BEGIN onPrepareDialog.");
+	switch (id) {
+	    case DIALOG_PRIVACY_LIST_ITEM:
+		String dialogTitle = (mPosLastClickedItem > mPrivacyListNames.size() ? "" : mPrivacyListNames
+		    .get(mPosLastClickedItem));
+		dialog.setTitle(dialogTitle);
+	}
+	Log.d(TAG, "END onPrepareDialog.");
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
+    protected Dialog onCreateDialog(int id) {
+	Log.d(TAG, "BEGIN onCreateDialog.");
+	switch (id) {
+	    case DIALOG_PRIVACY_LIST_ITEM:
+		return new AlertDialog.Builder(this).setTitle("X").setItems(R.array.privacy_list_select_dialog,
+		    new DialogInterface.OnClickListener() {
+			public void onClick(DialogInterface dialog, int which) {
+			    String[] items = getResources().getStringArray(R.array.privacy_list_select_dialog);
+			    if (items[which].equals(getResources().getString(
+				R.string.privacy_list_select_dialog_delete))) {
+				try {
+				    mPrivacyListManager.removePrivacyList(mPrivacyListNames.get(mPosLastClickedItem));
+				} catch (RemoteException e) {
+				    Log.e(TAG, e.getMessage());
+				}
+				dismissDialog(DIALOG_PRIVACY_LIST_ITEM);
+			    }
+			}
+		    }).create();
+
+	    case DIALOG_CREATE_PRIVACY_LIST:
+		LayoutInflater factory = LayoutInflater.from(this);
+		final View textEntryView = factory.inflate(R.layout.privacy_list_create_dialog, null);
+
+		return new AlertDialog.Builder(this).setTitle(R.string.privacy_list_create_dialog_title).setView(
+		    textEntryView).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());
+			    }
+			}
+		    }).setNegativeButton(R.string.CancelButton, new DialogInterface.OnClickListener() {
+		    public void onClick(DialogInterface dialog, int whichButton) {
+		    }
+		}).create();
+	}
+	Log.d(TAG, "END onCreateDialog.");
+	return null;
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
     protected void onDestroy() {
 	super.onDestroy();
 
@@ -150,10 +233,19 @@
      * {@inheritDoc}.
      */
     @Override
+    public void onListItemClick(ListView l, View v, int position, long id) {
+	mPosLastClickedItem = position;
+	showDialog(DIALOG_PRIVACY_LIST_ITEM);
+    }
+
+    /**
+     * {@inheritDoc}.
+     */
+    @Override
     public final boolean onOptionsItemSelected(MenuItem item) {
 	switch (item.getItemId()) {
 	    case R.id.privacy_list_menu_create:
-		createCreatePrivacyListDialog();
+		showDialog(DIALOG_CREATE_PRIVACY_LIST);
 		return true;
 	    default:
 		return false;
@@ -172,6 +264,7 @@
 	    try {
 		mPrivacyListManager = mXmppFacade.getPrivacyListManager();
 		mPrivacyListManager.addPrivacyListListener(mPrivacyListListener);
+		mPrivacyListNames.clear();
 		mPrivacyListNames.addAll(mPrivacyListManager.getPrivacyLists());
 		mAdapter.notifyDataSetChanged();
 	    } catch (RemoteException e) {
@@ -223,34 +316,4 @@
 	    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();
-    }
 }
--- a/src/com/beem/project/beem/ui/Settings.java	Wed Nov 18 00:16:35 2009 +0100
+++ b/src/com/beem/project/beem/ui/Settings.java	Thu Nov 19 01:14:15 2009 +0100
@@ -103,8 +103,9 @@
 		finish();
 		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;