# HG changeset patch
# User "Vincent Veronis"
# Date 1307970023 -7200
# Node ID c2c6ee3d3c7121653c543c476066c1c39378f012
# Parent e43d5abca8b0a5fe180a3dc50f5eda4c3acb6b55
Login UI - new login UI to connect multi account
diff -r e43d5abca8b0 -r c2c6ee3d3c71 res/anim/rotate_and_scale.xml
--- a/res/anim/rotate_and_scale.xml Fri Jun 10 21:04:07 2011 +0200
+++ b/res/anim/rotate_and_scale.xml Mon Jun 13 15:00:23 2011 +0200
@@ -1,9 +1,12 @@
-
-
-
-
+
+
+
\ No newline at end of file
diff -r e43d5abca8b0 -r c2c6ee3d3c71 res/layout/login_row_account.xml
--- a/res/layout/login_row_account.xml Fri Jun 10 21:04:07 2011 +0200
+++ b/res/layout/login_row_account.xml Mon Jun 13 15:00:23 2011 +0200
@@ -1,5 +1,45 @@
-
\ No newline at end of file
+
+
+
+
+
\ No newline at end of file
diff -r e43d5abca8b0 -r c2c6ee3d3c71 res/values/strings.xml
--- a/res/values/strings.xml Fri Jun 10 21:04:07 2011 +0200
+++ b/res/values/strings.xml Mon Jun 13 15:00:23 2011 +0200
@@ -184,6 +184,7 @@
Login
No internet connection found
Settings configuration in menu
+ Pending ...
Connecting ...
diff -r e43d5abca8b0 -r c2c6ee3d3c71 src/com/beem/project/beem/BeemService.java
--- a/src/com/beem/project/beem/BeemService.java Fri Jun 10 21:04:07 2011 +0200
+++ b/src/com/beem/project/beem/BeemService.java Mon Jun 13 15:00:23 2011 +0200
@@ -125,12 +125,12 @@
Log.d(TAG, "ONBIND()");
String accountName = intent.getStringExtra("account_name");
Log.e(TAG, accountName);
- try {
- for (XmppConnectionAdapter connection : mConnection.values())
- connection.connect();
- } catch (RemoteException e) {
- Log.w(TAG, "Error while connecting", e);
- }
+// try {
+// for (XmppConnectionAdapter connection : mConnection.values())
+// connection.connect();
+// } catch (RemoteException e) {
+// Log.w(TAG, "Error while connecting", e);
+// }
return (IBinder) mBind.get(accountName);
}
@@ -204,12 +204,16 @@
public void onStart(Intent intent, int startId) {
super.onStart(intent, startId);
Log.d(TAG, "onStart");
- try {
- for (XmppConnectionAdapter connection : mConnection.values())
- connection.connectAsync();
- } catch (RemoteException e) {
- e.printStackTrace();
- }
+// try {
+// for (XmppConnectionAdapter connection : mConnection.values())
+// connection.connectAsync();
+// } catch (RemoteException e) {
+// e.printStackTrace();
+// }
+ }
+
+ public XmppConnectionAdapter getConnection(String accountName) {
+ return mConnection.get(accountName);
}
/**
diff -r e43d5abca8b0 -r c2c6ee3d3c71 src/com/beem/project/beem/account/SyncAdapterService.java
--- a/src/com/beem/project/beem/account/SyncAdapterService.java Fri Jun 10 21:04:07 2011 +0200
+++ b/src/com/beem/project/beem/account/SyncAdapterService.java Mon Jun 13 15:00:23 2011 +0200
@@ -44,6 +44,7 @@
package com.beem.project.beem.account;
+import java.io.IOException;
import java.util.ArrayList;
import org.jivesoftware.smack.Roster;
@@ -75,6 +76,7 @@
import com.beem.project.beem.BeemConnection;
import com.beem.project.beem.R;
+import com.beem.project.beem.service.BeemAvatarCache;
import com.beem.project.beem.utils.Status;
/**
@@ -247,6 +249,9 @@
} else { // Found, update
ContentProviderOperation.Builder builder = addUpdateStructuredName(entry, rawContactID, false);
ops.add(builder.build());
+ //TODO: ADD AVATAR
+ //builder = addUpdatePhoto(entry, rawContactID, false);
+ //ops.add(builder.build());
}
return rawContactID;
}
@@ -280,7 +285,42 @@
builder.withValue(ContactsContract.CommonDataKinds.StructuredName.FAMILY_NAME, displayName);
return builder;
}
+
+ private static ContentProviderOperation.Builder addUpdatePhoto(RosterEntry entry, long rawContactID,
+ boolean isInsert) {
+ String displayName = entry.getName() != null ? entry.getName() : entry.getUser();
+ ContentProviderOperation.Builder builder;
+ if (isInsert) {
+ builder = ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI);
+ builder.withValue(ContactsContract.Data.RAW_CONTACT_ID, rawContactID);
+ builder.withValue(ContactsContract.Data.MIMETYPE,
+ ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE);
+ builder.withValue(ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID, rawContactID);
+ } else {
+ builder = ContentProviderOperation.newUpdate(ContactsContract.Data.CONTENT_URI);
+ builder.withSelection(
+ ContactsContract.CommonDataKinds.Photo.RAW_CONTACT_ID + " =? AND "
+ + ContactsContract.Data.MIMETYPE + " = '" + ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE
+ + "'", new String[] { String.valueOf(rawContactID) });
+ }
+ BeemAvatarCache bac = new BeemAvatarCache(mContext);
+ try {
+ builder.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO , bac.get(entry.getUser()));
+ } catch (IOException e) {
+ Log.e(TAG, "Error cache beem avatar", e);
+ }
+ return builder;
+ }
+
+ /**
+ * Method to insert or update group name informations.
+ * @param entry The roster entry to sync
+ * @param rawContactID The contact ID in the android database
+ * @param rawGroupID The group ID in the android database
+ * @param isInsert Insert boolean
+ * @return
+ */
private static ContentProviderOperation.Builder addUpdateGroup(RosterEntry entry, long rawContactID,
long rawGroupID, boolean isInsert) {
String displayName = entry.getName() != null ? entry.getName() : entry.getUser();
@@ -367,6 +407,12 @@
return authorId;
}
+ /**
+ * Get group ID from android database.
+ * @param account The account related
+ * @param group The group related
+ * @return ID in the database of the jid
+ */
private static long getRawGroupID(String account, String group) {
long authorId = -1;
final Cursor c = mContentResolver.query(ContactsContract.Groups.CONTENT_URI,
diff -r e43d5abca8b0 -r c2c6ee3d3c71 src/com/beem/project/beem/service/LoginAsyncTask.java
--- a/src/com/beem/project/beem/service/LoginAsyncTask.java Fri Jun 10 21:04:07 2011 +0200
+++ b/src/com/beem/project/beem/service/LoginAsyncTask.java Mon Jun 13 15:00:23 2011 +0200
@@ -43,9 +43,11 @@
*/
package com.beem.project.beem.service;
+import android.content.Context;
import android.os.AsyncTask;
import android.os.RemoteException;
import android.util.Log;
+
import com.beem.project.beem.service.aidl.IXmppConnection;
import com.beem.project.beem.service.aidl.IXmppFacade;
@@ -77,7 +79,7 @@
private IXmppConnection mConnection;
private String mErrorMessage;
-
+
/**
* Constructor.
*/
@@ -93,6 +95,7 @@
mConnection = facade.createConnection();
if (!mConnection.connect()) {
mErrorMessage = mConnection.getErrorMessage();
+ publishProgress(STATE_LOGIN_FAILED);
return false;
}
publishProgress(STATE_LOGIN_RUNNING);
diff -r e43d5abca8b0 -r c2c6ee3d3c71 src/com/beem/project/beem/ui/ContactList.java
--- a/src/com/beem/project/beem/ui/ContactList.java Fri Jun 10 21:04:07 2011 +0200
+++ b/src/com/beem/project/beem/ui/ContactList.java Mon Jun 13 15:00:23 2011 +0200
@@ -42,32 +42,21 @@
*/
package com.beem.project.beem.ui;
-import java.io.IOException;
-import java.io.InputStream;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.HashMap;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
-import org.jivesoftware.smack.util.StringUtils;
-
import android.app.Activity;
import android.app.Dialog;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
-import android.content.ServiceConnection;
import android.content.SharedPreferences;
import android.database.Cursor;
-import android.graphics.drawable.Drawable;
-import android.graphics.drawable.LayerDrawable;
-import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
-import android.os.IBinder;
import android.os.RemoteException;
import android.preference.PreferenceManager;
import android.provider.ContactsContract;
@@ -81,12 +70,8 @@
import android.view.ViewGroup;
import android.view.ViewStub;
import android.widget.AdapterView;
-import android.widget.BaseAdapter;
-import android.widget.CursorAdapter;
-import android.widget.Filter;
import android.widget.Filterable;
import android.widget.Gallery;
-import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
@@ -95,10 +80,7 @@
import android.widget.AdapterView.OnItemClickListener;
import com.beem.project.beem.R;
-import com.beem.project.beem.providers.AvatarProvider;
import com.beem.project.beem.service.Contact;
-import com.beem.project.beem.service.PresenceAdapter;
-import com.beem.project.beem.service.aidl.IBeemRosterListener;
import com.beem.project.beem.service.aidl.IChatManager;
import com.beem.project.beem.service.aidl.IRoster;
import com.beem.project.beem.service.aidl.IXmppFacade;
@@ -107,8 +89,6 @@
import com.beem.project.beem.ui.dialogs.builders.DeleteContact;
import com.beem.project.beem.ui.dialogs.builders.ResendSubscription;
import com.beem.project.beem.utils.BeemBroadcastReceiver;
-import com.beem.project.beem.utils.SortedList;
-import com.beem.project.beem.utils.Status;
/**
* The contact list activity displays the roster of the user.
@@ -122,19 +102,15 @@
private static final String SETTINGS_HIDDEN_CONTACT = "settings_key_hidden_contact";
private static final String TAG = "ContactList";
- private final List mListGroup = new ArrayList();
/**
* Map containing a list of the different contacts of a given group. Each list is a @{link SortedList} so there is
* no need to sort it again.
*/
- private final Map> mContactOnGroup = new HashMap>();
+
private final BeemContactListOnClick mOnContactClick = new BeemContactListOnClick();
- private final Handler mHandler = new Handler();
- private final ServiceConnection mServConn = new BeemServiceConnection();
- private final BeemBroadcastReceiver mReceiver = new BeemBroadcastReceiver();
+
private final ComparatorContactListByStatusAndName mComparator = new ComparatorContactListByStatusAndName();
- private final BeemRosterListener mBeemRosterListener = new BeemRosterListener();
private List mListContact;
private String mSelectedGroup;
private IRoster mRoster;
@@ -155,11 +131,47 @@
public ContactList() {
}
- /**
- * Callback for menu creation.
- * @param menu the menu created
- * @return true on success, false otherwise
- */
+ @Override
+ protected void onCreate(Bundle saveBundle) {
+ super.onCreate(saveBundle);
+ mSettings = PreferenceManager.getDefaultSharedPreferences(this);
+ setContentView(R.layout.contactlist);
+
+ mInflater = getLayoutInflater();
+
+ //Get Groups list
+ final Cursor cursorGroup = getContentResolver().query(ContactsContract.Groups.CONTENT_URI,
+ new String[] { ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }, null, null, null);
+ mAdapterBanner = new BeemBanner(this, R.layout.contactlist_group, cursorGroup,
+ new String[] { ContactsContract.Groups.TITLE }, new int[] { R.id.contactlist_group });
+
+ //Get Contacts list
+ final Cursor cursorContact = getContentResolver().query(
+ ContactsContract.Contacts.CONTENT_URI,
+ new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME,
+ ContactsContract.Contacts.CONTACT_STATUS }, null, null, null);
+ //TODO: GetAvatar + Presence
+ mAdapterContactList = new BeemContactList(this, R.layout.contactlistcontact, cursorContact, new String[] {
+ ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME,
+ ContactsContract.Contacts.CONTACT_STATUS }, new int[] { R.id.avatar, R.id.contactlistpseudo,
+ R.id.contactlistmsgperso });
+
+ ListView listView = (ListView) findViewById(R.id.contactlist);
+ listView.setOnItemClickListener(mOnContactClick);
+ registerForContextMenu(listView);
+ listView.setAdapter(mAdapterContactList);
+ Log.e(TAG, "ONCREATE");
+ }
+
+ @Override
+ protected void onResume() {
+ super.onResume();
+ if (!mSettings.getBoolean("settings_key_hide_groups", false))
+ showGroups();
+ else
+ hideGroups();
+ }
+
@Override
public final boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
@@ -282,86 +294,12 @@
return super.onContextItemSelected(item);
}
- @Override
- protected void onCreate(Bundle saveBundle) {
- super.onCreate(saveBundle);
- mSettings = PreferenceManager.getDefaultSharedPreferences(this);
- setContentView(R.layout.contactlist);
-
- this.registerReceiver(mReceiver, new IntentFilter(BeemBroadcastReceiver.BEEM_CONNECTION_CLOSED));
-
- mInflater = getLayoutInflater();
-
- final Cursor cursorGroup = getContentResolver().query(ContactsContract.Groups.CONTENT_URI,
- new String[] { ContactsContract.Groups._ID, ContactsContract.Groups.TITLE }, null, null, null);
- mAdapterBanner = new BeemBanner(this, R.layout.contactlist_group, cursorGroup,
- new String[] { ContactsContract.Groups.TITLE }, new int[] { R.id.contactlist_group });
-
- final Cursor cursorContact = getContentResolver().query(
- ContactsContract.Contacts.CONTENT_URI,
- new String[] { ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME}, null, null, null);
- mAdapterContactList = new BeemContactList(this, R.layout.contactlistcontact, cursorContact, new String[] {
- ContactsContract.Contacts.DISPLAY_NAME}, new int[] { R.id.avatar,
- R.id.contactlistpseudo, R.id.contactlistmsgperso });
-
- mListContact = new ArrayList();
- ListView listView = (ListView) findViewById(R.id.contactlist);
- listView.setOnItemClickListener(mOnContactClick);
- registerForContextMenu(listView);
- listView.setAdapter(mAdapterContactList);
- Log.e(TAG, "ONCREATE");
- }
-
- @Override
- protected void onResume() {
- super.onResume();
- if (!mBinded) {
- Log.e(TAG, "ON RESUME");
- Intent i = new Intent(SERVICE_INTENT);
- i.putExtras(getIntent());
- mAccountName = i.getStringExtra("account_name");
- Log.e(TAG, i.getStringExtra("account_name"));
- mBinded = bindService(i, mServConn, BIND_AUTO_CREATE);
- }
- }
-
- /**
- * {@inheritDoc}
- */
- @Override
- protected void onPause() {
- super.onPause();
- try {
- if (mRoster != null) {
- mRoster.removeRosterListener(mBeemRosterListener);
- mRoster = null;
- }
- } catch (RemoteException e) {
- Log.d("ContactList", "Remote exception", e);
- }
- if (mBinded) {
- unbindService(mServConn);
- mBinded = false;
- }
- mXmppFacade = null;
- }
-
- @Override
- protected void onDestroy() {
- super.onDestroy();
- this.unregisterReceiver(mReceiver);
- Log.e(TAG, "onDestroy activity");
- }
-
/**
* Build and display the contact list.
* @param group name of the contact list.
*/
private void buildContactList(String group) {
- mListContact = mContactOnGroup.get(group);
- mSelectedGroup = group;
- Log.d(TAG, "buildContactList for group " + group);
- mAdapterContactList.notifyDataSetChanged();
+
}
/**
@@ -393,217 +331,6 @@
}
/**
- * Listener on service event.
- */
- private class BeemRosterListener extends IBeemRosterListener.Stub {
- /**
- * Constructor.
- */
- public BeemRosterListener() {
- }
-
- /**
- * {@inheritDoc} Simple stategy to handle the onEntriesAdded event. if contact has to be shown :
- *
- * - add him to his groups
- * - add him to the specials groups>
- *
- */
- @Override
- public void onEntriesAdded(final List addresses) throws RemoteException {
- final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
- for (String newName : addresses) {
- Contact contact = mRoster.getContact(newName);
- boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
- List groups = contact.getGroups();
- if (visible) {
- for (String group : groups) {
- if (!mListGroup.contains(group)) {
- mListGroup.add(mListGroup.size() - 1, group);
- List tmplist = new SortedList(new LinkedList(), mComparator);
- mContactOnGroup.put(group, tmplist);
- }
- List contactByGroups = mContactOnGroup.get(group);
- if (mSelectedGroup.equals(group)) {
- updateCurrentList(group, contact);
- continue;
- }
- contactByGroups.add(contact);
- }
-
- // add the contact to all and no groups
- addToSpecialList(contact);
- }
- }
- }
-
- /**
- * {@inheritDoc} Simple stategy to handle the onEntriesDeleted event.
- *
- * - Remove the contact from all groups
- *
- */
- @Override
- public void onEntriesDeleted(final List addresses) throws RemoteException {
- Log.d(TAG, "onEntries deleted " + addresses);
- for (String cToDelete : addresses) {
- Contact contact = new Contact(cToDelete);
- for (Map.Entry> entry : mContactOnGroup.entrySet()) {
- List contactByGroups = entry.getValue();
- if (mSelectedGroup.equals(entry.getKey())) {
- updateCurrentList(entry.getKey(), contact);
- continue;
- }
- contactByGroups.remove(contact);
- }
- cleanBannerGroup();
- }
-
- mHandler.post(new Runnable() {
- public void run() {
- mSelectedGroup = getString(R.string.contact_list_all_contact);
- mListContact = mContactOnGroup.get(mSelectedGroup);
-
- mAdapterContactList.notifyDataSetChanged();
- }
- });
-
- }
-
- /**
- * {@inheritDoc} Simple stategy to handle the onEntriesUpdated event.
- *
- * - Remove the contact from all groups
- * - if contact has to be shown add it to his groups
- * - if contact has to be shown add it to the specials groups
- *
- */
- @Override
- public void onEntriesUpdated(final List addresses) throws RemoteException {
- final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
- for (String adr : addresses) {
- Contact contact = mRoster.getContact(adr);
- boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
- List groups = contact.getGroups();
- for (Map.Entry> entry : mContactOnGroup.entrySet()) {
- List contactByGroups = entry.getValue();
- if (mSelectedGroup.equals(entry.getKey())) {
- updateCurrentList(entry.getKey(), contact);
- continue;
- }
- contactByGroups.remove(contact);
- if (visible) {
- for (String group : groups) {
- if (!mListGroup.contains(group)) {
- mListGroup.add(mListGroup.size() - 1, group);
- List tmplist = new SortedList(new LinkedList(), mComparator);
- mContactOnGroup.put(group, tmplist);
- }
- mContactOnGroup.get(group).remove(contact);
- }
- }
-
- }
-
- // add the contact to all and no groups
- if (visible) {
- addToSpecialList(contact);
- }
- }
- cleanBannerGroup();
- }
-
- /**
- * {@inheritDoc} Simple stategy to handle the onPresenceChanged event.
- *
- * - Remove the contact from all groups
- * - if contact has to be shown add it to his groups
- * - if contact has to be shown add it to the specials groups
- *
- */
- @Override
- public void onPresenceChanged(PresenceAdapter presence) throws RemoteException {
- Log.d(TAG, "presence");
- String from = presence.getFrom();
- final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
- final Contact contact = mRoster.getContact(StringUtils.parseBareAddress(from));
- boolean visible = !hideDisconnected || Status.statusOnline(contact.getStatus());
- List groups = contact.getGroups();
- for (Map.Entry> entry : mContactOnGroup.entrySet()) {
- List contactByGroups = entry.getValue();
- if (mSelectedGroup.equals(entry.getKey())) {
- updateCurrentList(entry.getKey(), contact);
- continue;
- }
- contactByGroups.remove(contact);
- if (visible) {
- if (groups.contains(entry.getKey())) {
- contactByGroups.add(contact);
- }
- }
- }
- if (visible) {
- addToSpecialList(contact);
- }
- }
-
- /**
- * Add a contact to the special list No Group and All contacts. The contact will be added if the list is not the
- * current list otherwise the list must be modified in a Handler.
- * @param contact the contact to add.
- */
- private void addToSpecialList(Contact contact) {
- List groups = contact.getGroups();
- List list = mContactOnGroup.get(getString(R.string.contact_list_all_contact));
- if (list != mListContact) {
- list.add(contact);
- }
- list = mContactOnGroup.get(getString(R.string.contact_list_no_group));
- if (list != mListContact && groups.isEmpty()) {
- list.add(contact);
- }
- }
-
- /**
- * Update the current list with the status of contact.
- * @param listName name of the current list
- * @param contact contact to update
- */
- private void updateCurrentList(String listName, final Contact contact) {
- final boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
- final List groups = contact.getGroups();
- String noGroup = getString(R.string.contact_list_no_group);
- String allGroup = getString(R.string.contact_list_all_contact);
- final boolean add = ((!hideDisconnected || Status.statusOnline(contact.getStatus())) && // must show and
- ((listName.equals(noGroup) && groups.isEmpty()) || // in no group
- groups.contains(listName) || // or in current
- listName.equals(allGroup) // or in all
- ));
- mHandler.post(new Runnable() {
- public void run() {
- mListContact.remove(contact);
- if (add) {
- mListContact.add(contact);
- }
- mAdapterContactList.notifyDataSetChanged();
- }
- });
-
- }
-
- /**
- * Remove old groups on the banner.
- * @throws RemoteException if an error occur when communicating with the service
- */
- private void cleanBannerGroup() throws RemoteException {
- List rosterGroups = mRoster.getGroupsNames();
- List realGroups = mListGroup.subList(1, mListContact.size() - 1);
- realGroups.retainAll(rosterGroups);
- }
-
- }
-
- /**
* Adapter contact list.
*/
private static class BeemContactList extends SimpleCursorAdapter implements Filterable {
@@ -619,25 +346,8 @@
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
- Cursor c = getCursor();
-
final LayoutInflater inflater = LayoutInflater.from(mContext);
- View v = inflater.inflate(mLayout, parent, false);
- String name = c.getString(c.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
-
- TextView nameText = (TextView) v.findViewById(R.id.contactlistpseudo);
- if (nameText != null) {
- nameText.setText(name);
- }
-
-// String msgStatus = c.getString(c.getColumnIndex(ContactsContract.StatusUpdates.STATUS));
-//
-// TextView msgStatusText = (TextView) v.findViewById(R.id.contactlistmsgperso);
-// if (msgStatusText != null) {
-// msgStatusText.setText(msgStatus);
-// }
-
- return v;
+ return inflater.inflate(mLayout, parent, false);
}
@Override
@@ -648,56 +358,25 @@
nameText.setText(name);
}
-// String msgStatus = cursor.getString(cursor.getColumnIndex(ContactsContract.StatusUpdates.STATUS));
-//
-// TextView msgStatusText = (TextView) view.findViewById(R.id.contactlistmsgperso);
-// if (msgStatusText != null) {
-// msgStatusText.setText(msgStatus);
-// }
- }
+ String msgStatus = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.CONTACT_STATUS));
+ TextView msgStatusText = (TextView) view.findViewById(R.id.contactlistmsgperso);
+ if (msgStatusText != null) {
+ msgStatusText.setText(msgStatus);
+ }
- // public View getView(int position, View convertView, ViewGroup parent) {
- // View v = convertView;
- // if (convertView == null) {
- // v = mInflater.inflate(R.layout.contactlistcontact, null);
- // }
- // Contact c = mListContact.get(position);
- // if (mRoster != null) {
- // try {
- // c = mRoster.getContact(c.getJID());
- // } catch (RemoteException e) {
- // e.printStackTrace();
- // }
- // }
- // bindView(v, c);
- // return v;
- // }
+ // ImageView img = (ImageView) view.findViewById(R.id.avatar);
+ // String avatarId = curContact.getAvatarId();
+ // int contactStatus = curContact.getStatus();
+ // Drawable avatar = getAvatarStatusDrawable(avatarId);
+ // img.setImageDrawable(avatar);
+ // img.setImageLevel(contactStatus);
+ }
// @Override
// public Filter getFilter() {
// return mFilter;
// }
- // /**
- // * Adapte curContact to the view.
- // * @param view the row view.
- // * @param curContact the current contact.
- // */
- // private void bindView(View view, Contact curContact) {
- // if (curContact != null) {
- // TextView v = (TextView) view.findViewById(R.id.contactlistpseudo);
- // v.setText(curContact.getName());
- // v = (TextView) view.findViewById(R.id.contactlistmsgperso);
- // v.setText(curContact.getMsgState());
- // ImageView img = (ImageView) view.findViewById(R.id.avatar);
- // String avatarId = curContact.getAvatarId();
- // int contactStatus = curContact.getStatus();
- // Drawable avatar = getAvatarStatusDrawable(avatarId);
- // img.setImageDrawable(avatar);
- // img.setImageLevel(contactStatus);
- // }
- // }
-
/**
* Get a LayerDrawable containing the avatar and the status icon. The status icon will change with the level of
* the drawable.
@@ -768,7 +447,7 @@
}
/**
- * Adapter banner list.
+ * Adapter banner group list.
*/
private static class BeemBanner extends SimpleCursorAdapter {
@@ -783,18 +462,8 @@
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
- Cursor c = getCursor();
-
final LayoutInflater inflater = LayoutInflater.from(mContext);
- View v = inflater.inflate(mLayout, parent, false);
- String name = c.getString(c.getColumnIndex(ContactsContract.Groups.TITLE));
-
- TextView nameText = (TextView) v.findViewById(R.id.GroupListText);
- if (nameText != null) {
- nameText.setText(name);
- }
-
- return v;
+ return inflater.inflate(mLayout, parent, false);
}
@Override
@@ -808,112 +477,6 @@
}
/**
- * The service connection used to connect to the Beem service.
- */
- private class BeemServiceConnection implements ServiceConnection {
-
- /**
- * Constructor.
- */
- public BeemServiceConnection() {
- }
-
- @Override
- public void onServiceConnected(ComponentName name, IBinder service) {
- mXmppFacade = IXmppFacade.Stub.asInterface(service);
- try {
- mRoster = mXmppFacade.getRoster();
- //if (mRoster != null) {
- //
- // List tmpGroupList = mRoster.getGroupsNames();
- // for (String string : tmpGroupList) {
- // Log.e(TAG, string);
- // }
- // Collections.sort(tmpGroupList);
- // mListGroup.clear();
- // mListGroup.add(getString(R.string.contact_list_all_contact));
- // mListGroup.addAll(tmpGroupList);
- // mListGroup.add(getString(R.string.contact_list_no_group));
- // assignContactToGroups(mRoster.getContactList(), tmpGroupList);
- // makeSortedList(mContactOnGroup);
- // if (!mSettings.getBoolean("settings_key_hide_groups", false))
- showGroups();
- // else
- // hideGroups();
- // String group = getString(R.string.contact_list_all_contact);
- // buildContactList(group);
- // mRoster.addRosterListener(mBeemRosterListener);
- // Log.d(TAG, "add roster listener");
- // mChatManager = mXmppFacade.getChatManager();
- //}
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- }
-
- @Override
- public void onServiceDisconnected(ComponentName name) {
- Log.e(TAG, "SERVICE DISCO");
- try {
- mRoster.removeRosterListener(mBeemRosterListener);
- } catch (RemoteException e) {
- e.printStackTrace();
- }
- mXmppFacade = null;
- mChatManager = null;
- mRoster = null;
- mListContact.clear();
- mListGroup.clear();
- mContactOnGroup.clear();
- mBinded = false;
- }
-
- /**
- * Assign the differents contact to their groups. This methods will fill the mContactOnGroup map.
- * @param contacts list of contacts
- * @param groupNames list of existing groups
- */
- private void assignContactToGroups(List contacts, List groupNames) {
- boolean hideDisconnected = mSettings.getBoolean(SETTINGS_HIDDEN_CONTACT, false);
- mContactOnGroup.clear();
- List all = new LinkedList();
- List noGroups = new LinkedList();
- for (String group : groupNames) {
- mContactOnGroup.put(group, new LinkedList());
- }
- for (Contact c : contacts) {
- if (hideDisconnected && !Status.statusOnline(c.getStatus())) {
- continue;
- }
- all.add(c);
- List groups = c.getGroups();
- if (groups.isEmpty())
- noGroups.add(c);
- else {
- for (String currentGroup : groups) {
- List contactsByGroups = mContactOnGroup.get(currentGroup);
- contactsByGroups.add(c);
- }
- }
- }
- mContactOnGroup.put(getString(R.string.contact_list_no_group), noGroups);
- mContactOnGroup.put(getString(R.string.contact_list_all_contact), all);
- }
-
- /**
- * Make the List of the map became Insertion sorted list.
- * @param map the map to convert.
- */
- private void makeSortedList(Map> map) {
- for (Map.Entry> entry : map.entrySet()) {
- List l = entry.getValue();
- Log.e(TAG, "SORTED LIST" + entry.getValue());
- entry.setValue(new SortedList(l, mComparator));
- }
- }
- }
-
- /**
* Comparator Contact by status and name.
*/
private static class ComparatorContactListByStatusAndName implements Comparator {
@@ -957,7 +520,7 @@
}
/**
- * Event simple click on middle groupe name.
+ * Event simple click on middle group name.
*/
private class OnItemClickGroupName implements OnItemClickListener {
diff -r e43d5abca8b0 -r c2c6ee3d3c71 src/com/beem/project/beem/ui/Login.java
--- a/src/com/beem/project/beem/ui/Login.java Fri Jun 10 21:04:07 2011 +0200
+++ b/src/com/beem/project/beem/ui/Login.java Mon Jun 13 15:00:23 2011 +0200
@@ -50,12 +50,15 @@
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.AlertDialog;
-import android.app.Application;
+import android.content.ComponentName;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.ServiceConnection;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
+import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.IBinder;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.Menu;
@@ -63,15 +66,19 @@
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
+import android.view.animation.Animation;
+import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
+import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.TextView;
-import android.widget.Toast;
import android.widget.AdapterView.OnItemClickListener;
import com.beem.project.beem.BeemApplication;
import com.beem.project.beem.R;
+import com.beem.project.beem.service.LoginAsyncTask;
+import com.beem.project.beem.service.aidl.IXmppFacade;
/**
* This class is the main Activity for the Beem project.
@@ -79,10 +86,18 @@
*/
public class Login extends Activity {
+ private static final Intent SERVICE_INTENT = new Intent();
+ static {
+ SERVICE_INTENT.setComponent(new ComponentName("com.beem.project.beem", "com.beem.project.beem.BeemService"));
+ }
private static final int LOGIN_REQUEST_CODE = 1;
private TextView mTextView;
private BeemApplication mBeemApplication;
private String mAccountName;
+ private final ServiceConnection mServConn = new LoginServiceConnection();
+ private IXmppFacade mXmppFacade;
+ private AsyncTask mTask;
+ private Animation mAnimationLogo;
List mListAccount = new ArrayList();
private BeemAccountList mAdapterAccountList;
@@ -97,23 +112,17 @@
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
-// Application app = getApplication();
-// if (app instanceof BeemApplication) {
-// mBeemApplication = (BeemApplication) app;
-// if (mBeemApplication.isConnected()) {
-// startActivity(new Intent(this, ContactList.class));
-// finish();
-// } else if (!mBeemApplication.isAccountConfigured()) {
-// startActivity(new Intent(this, Account.class));
-// finish();
-// }
-// }
+
setContentView(R.layout.login);
mTextView = (TextView) findViewById(R.id.log_as_msg);
ListView listView = (ListView) findViewById(R.id.accountlist);
mAdapterAccountList = new BeemAccountList(getLayoutInflater());
+ listView.setClickable(true);
listView.setOnItemClickListener(mOnAccountClick);
listView.setAdapter(mAdapterAccountList);
+ mAnimationLogo = AnimationUtils.loadAnimation(Login.this, R.anim.rotate_and_scale);
+ Intent i = new Intent(Login.SERVICE_INTENT);
+ startService(i);
}
@Override
@@ -123,31 +132,18 @@
}
@Override
- protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == LOGIN_REQUEST_CODE) {
- if (resultCode == Activity.RESULT_OK) {
- Intent i = new Intent(this, ContactList.class);
- Log.e("LOGIN", "ACCOUNT NAME : " + mAccountName);
- i.putExtra("account_name", mAccountName);
- startActivity(i);
- finish();
- } else if (resultCode == Activity.RESULT_CANCELED) {
- if (data != null) {
- String tmp = data.getExtras().getString("message");
- Toast.makeText(Login.this, tmp, Toast.LENGTH_SHORT).show();
- mTextView.setText(tmp);
- }
- }
- }
- }
-
- @Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.login, menu);
return true;
}
+
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
+ unbindService(mServConn);
+ }
@Override
public final boolean onOptionsItemSelected(MenuItem item) {
@@ -163,10 +159,6 @@
result = true;
break;
case R.id.login_menu_login:
- if (mBeemApplication.isAccountConfigured()) {
- Intent i = new Intent(this, LoginAnim.class);
- startActivityForResult(i, LOGIN_REQUEST_CODE);
- }
result = true;
break;
default:
@@ -235,10 +227,33 @@
if (convertView == null) {
v = mInflater.inflate(R.layout.login_row_account, null);
}
- TextView tv = (TextView) v.findViewById(R.id.accountname);
- tv.setText(mListAccount.get(position));
+ ImageButton logo = (ImageButton) v.findViewById(R.id.loginanim_logo_anim);
+ logo.setFocusable(false);
+ logo.setOnClickListener(new BeemConnectionOnClick());
+ TextView name = (TextView) v.findViewById(R.id.accountname);
+ name.setText(mListAccount.get(position));
return v;
}
+
+ }
+
+ private class BeemConnectionOnClick implements android.view.View.OnClickListener {
+
+ @Override
+ public void onClick(View v) {
+ //TODO: Check if already connected -> disconnect
+ TextView accountStatus = (TextView) findViewById(R.id.accountstatus);
+ accountStatus.setText(R.string.login_pending);
+ ImageButton logo = (ImageButton) findViewById(R.id.loginanim_logo_anim);
+ logo.startAnimation(mAnimationLogo);
+ TextView accountName = (TextView) findViewById(R.id.accountname);
+ Intent i = new Intent(Login.SERVICE_INTENT);
+ i.putExtra("account_name", accountName.getText());
+ bindService(i, mServConn, BIND_AUTO_CREATE);
+ mTask = new LoginTask(v.getRootView());
+
+ }
+
}
/**
@@ -256,10 +271,74 @@
*/
@Override
public void onItemClick(AdapterView> arg0, View v, int pos, long lpos) {
- Intent i = new Intent(Login.this, LoginAnim.class);
- mAccountName = mListAccount.get(pos);
- i.putExtra("account_name", mAccountName);
- startActivityForResult(i, LOGIN_REQUEST_CODE);
+ Intent i = new Intent(Login.this, ContactList.class);
+ startActivity(i);
}
}
+
+ /**
+ * Asynchronous class for connection.
+ */
+ private class LoginTask extends LoginAsyncTask {
+
+ private View mView;
+
+ /**
+ * Constructor.
+ */
+ LoginTask(View v) {
+ mView = v;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean result) {
+ ImageButton logo = (ImageButton) mView.findViewById(R.id.loginanim_logo_anim);
+ if (result == null || !result) { // Task cancelled or exception
+ unbindService(mServConn);
+ logo.setBackgroundResource(R.drawable.beem_launcher_icon_silver);
+ } else { // Connection OK
+ logo.setBackgroundResource(R.drawable.beem_icon_launcher_color);
+ }
+ logo.clearAnimation();
+ }
+
+ @Override
+ protected void onProgressUpdate(Integer... values) {
+ TextView status = (TextView) mView.findViewById(R.id.accountstatus);
+ status.setText(getResources().getStringArray(R.array.loganim_state)[values[0]]);
+ }
+
+ @Override
+ protected void onCancelled() {
+ super.onCancelled();
+ Login.this.stopService(Login.SERVICE_INTENT);
+ }
+
+ }
+
+ /**
+ * The service connection used to connect to the Beem service.
+ */
+ private class LoginServiceConnection implements ServiceConnection {
+
+ /**
+ * Constructor.
+ */
+ public LoginServiceConnection() {
+ }
+
+ @Override
+ public void onServiceConnected(ComponentName name, IBinder service) {
+ Log.e("BEEMSERVICECONNECTION", "CONNECTED");
+ mXmppFacade = IXmppFacade.Stub.asInterface(service);
+ mTask.execute(mXmppFacade);
+ }
+
+ @Override
+ public void onServiceDisconnected(ComponentName name) {
+ Log.e("BEEMSERVICECONNECTION", "DISCONNECTED");
+ mXmppFacade = null;
+ }
+ }
+
}