From cda1c2c3a12b4c18f13771dd4b58aab6e465176b Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Fri, 7 Feb 2014 02:57:36 +0100 Subject: refresh contact list --- src/de/gultsch/chat/entities/Contact.java | 10 ++-- .../gultsch/chat/persistance/DatabaseBackend.java | 7 ++- .../chat/services/XmppConnectionService.java | 19 +++++- src/de/gultsch/chat/ui/ConversationActivity.java | 35 ++++++----- src/de/gultsch/chat/ui/ConversationFragment.java | 4 +- .../gultsch/chat/ui/NewConversationActivity.java | 67 ++++++++++++++++++---- 6 files changed, 102 insertions(+), 40 deletions(-) (limited to 'src') diff --git a/src/de/gultsch/chat/entities/Contact.java b/src/de/gultsch/chat/entities/Contact.java index 47549b22..3478eac7 100644 --- a/src/de/gultsch/chat/entities/Contact.java +++ b/src/de/gultsch/chat/entities/Contact.java @@ -17,7 +17,7 @@ public class Contact extends AbstractEntity implements Serializable { public static final String SYSTEMACCOUNT = "systemaccount"; public static final String PHOTOURI = "photouri"; public static final String OPENPGPKEY = "pgpkey"; - public static final String LASTONLINEPRESENCE = "presence"; + public static final String LASTPRESENCE = "presence"; public static final String ACCOUNT = "accountUuid"; protected String accountUuid; @@ -27,7 +27,7 @@ public class Contact extends AbstractEntity implements Serializable { protected int systemAccount; protected String photoUri; protected String openPGPKey; - protected long lastOnlinePresence; + protected long lastPresence; protected Account account; @@ -52,7 +52,7 @@ public class Contact extends AbstractEntity implements Serializable { this.photoUri = photoUri; this.systemAccount = systemAccount; this.openPGPKey = pgpKey; - this.lastOnlinePresence = lastseen; + this.lastPresence = lastseen; } public String getDisplayName() { @@ -82,7 +82,7 @@ public class Contact extends AbstractEntity implements Serializable { values.put(SYSTEMACCOUNT, systemAccount); values.put(PHOTOURI,photoUri); values.put(OPENPGPKEY,openPGPKey); - values.put(LASTONLINEPRESENCE,lastOnlinePresence); + values.put(LASTPRESENCE,lastPresence); return values; } @@ -95,7 +95,7 @@ public class Contact extends AbstractEntity implements Serializable { cursor.getString(cursor.getColumnIndex(PHOTOURI)), cursor.getInt(cursor.getColumnIndex(SYSTEMACCOUNT)), cursor.getString(cursor.getColumnIndex(OPENPGPKEY)), - cursor.getLong(cursor.getColumnIndex(LASTONLINEPRESENCE)) + cursor.getLong(cursor.getColumnIndex(LASTPRESENCE)) ); } diff --git a/src/de/gultsch/chat/persistance/DatabaseBackend.java b/src/de/gultsch/chat/persistance/DatabaseBackend.java index f28ad760..ecf7152b 100644 --- a/src/de/gultsch/chat/persistance/DatabaseBackend.java +++ b/src/de/gultsch/chat/persistance/DatabaseBackend.java @@ -53,7 +53,7 @@ public class DatabaseBackend extends SQLiteOpenHelper { db.execSQL("create table " + Contact.TABLENAME + "(" + Contact.UUID + " TEXT PRIMARY KEY, " + Contact.ACCOUNT + " TEXT, " + Contact.DISPLAYNAME + " TEXT," + Contact.JID + " TEXT," - + Contact.LASTONLINEPRESENCE + " NUMBER, " + Contact.OPENPGPKEY + + Contact.LASTPRESENCE + " NUMBER, " + Contact.OPENPGPKEY + " TEXT," + Contact.PHOTOURI + " TEXT," + Contact.SUBSCRIPTION + " TEXT," + Contact.SYSTEMACCOUNT + " NUMBER, " + "FOREIGN KEY(" + Contact.ACCOUNT + ") REFERENCES " @@ -217,10 +217,11 @@ public class DatabaseBackend extends SQLiteOpenHelper { } } - public List getContacts() { + public List getContacts(Account account) { List list = new ArrayList(); SQLiteDatabase db = this.getReadableDatabase(); - Cursor cursor = db.query(Contact.TABLENAME, null, null, null, null, + String args[] = {account.getUuid()}; + Cursor cursor = db.query(Contact.TABLENAME, null, Contact.ACCOUNT+"=?", args, null, null, null); while (cursor.moveToNext()) { list.add(Contact.fromCursor(cursor)); diff --git a/src/de/gultsch/chat/services/XmppConnectionService.java b/src/de/gultsch/chat/services/XmppConnectionService.java index c5477ae0..457c06b6 100644 --- a/src/de/gultsch/chat/services/XmppConnectionService.java +++ b/src/de/gultsch/chat/services/XmppConnectionService.java @@ -18,6 +18,7 @@ import de.gultsch.chat.xmpp.IqPacket; import de.gultsch.chat.xmpp.MessagePacket; import de.gultsch.chat.xmpp.OnIqPacketReceived; import de.gultsch.chat.xmpp.OnMessagePacketReceived; +import de.gultsch.chat.xmpp.OnPresencePacketReceived; import de.gultsch.chat.xmpp.OnStatusChanged; import de.gultsch.chat.xmpp.PresencePacket; import de.gultsch.chat.xmpp.XmppConnection; @@ -123,6 +124,18 @@ public class XmppConnectionService extends Service { } } }; + + private OnPresencePacketReceived presenceListener = new OnPresencePacketReceived() { + + @Override + public void onPresencePacketReceived(Account account, PresencePacket packet) { + String jid = packet.getAttribute("from"); + String type = packet.getAttribute("type"); + if (type==null) { + Log.d(LOGTAG,"online presence from "+jid); + } + } + }; public class XmppConnectionBinder extends Binder { public XmppConnectionService getService() { @@ -157,6 +170,7 @@ public class XmppConnectionService extends Service { XmppConnection connection = new XmppConnection(account, pm); connection.setOnMessagePacketReceivedListener(this.messageListener); connection.setOnStatusChangedListener(this.statusListener); + connection.setOnPresencePacketReceivedListener(this.presenceListener); Thread thread = new Thread(connection); thread.start(); return connection; @@ -185,8 +199,8 @@ public class XmppConnectionService extends Service { databaseBackend.updateMessage(message); } - public void getRoster(final OnRosterFetchedListener listener) { - List contacts = databaseBackend.getContacts(); + public void getRoster(Account account, final OnRosterFetchedListener listener) { + List contacts = databaseBackend.getContacts(account); if (listener != null) { listener.onRosterFetched(contacts); } @@ -249,7 +263,6 @@ public class XmppConnectionService extends Service { if (roster != null) { for (Element item : roster.getChildren()) { Contact contact; - Log.d(LOGTAG, item.toString()); String name = item.getAttribute("name"); String jid = item.getAttribute("jid"); if (phoneContacts.containsKey(jid)) { diff --git a/src/de/gultsch/chat/ui/ConversationActivity.java b/src/de/gultsch/chat/ui/ConversationActivity.java index d9c497f8..7e4cd34d 100644 --- a/src/de/gultsch/chat/ui/ConversationActivity.java +++ b/src/de/gultsch/chat/ui/ConversationActivity.java @@ -40,7 +40,7 @@ public class ConversationActivity extends XmppActivity { protected SlidingPaneLayout spl; private List conversationList = new ArrayList(); - private int selectedConversation = 0; + private Conversation selectedConversation = null; private ListView listView; private boolean paneShouldBeOpen = true; @@ -50,7 +50,7 @@ public class ConversationActivity extends XmppActivity { @Override public void onConversationListChanged() { - final Conversation currentConv = conversationList.get(selectedConversation); + final Conversation currentConv = getSelectedConversation(); conversationList.clear(); conversationList.addAll(xmppConnectionService .getConversations()); @@ -59,14 +59,14 @@ public class ConversationActivity extends XmppActivity { @Override public void run() { updateConversationList(); - for(int i = 0; i < conversationList.size(); ++i) { - if (currentConv.equals(conversationList.get(i))) { - selectedConversation = i; + /*for(int i = 0; i < conversationList.size(); ++i) { + if (currentConv == conversationList.get(i)) { + selectedConversation = conversationList.get(i); break; } - } + }*/ if(paneShouldBeOpen) { - selectedConversation = 0; + selectedConversation = conversationList.get(0); if (conversationList.size() >= 1) { swapConversationFragment(); } else { @@ -88,7 +88,7 @@ public class ConversationActivity extends XmppActivity { return this.conversationList; } - public int getSelectedConversation() { + public Conversation getSelectedConversation() { return this.selectedConversation; } @@ -164,8 +164,8 @@ public class ConversationActivity extends XmppActivity { public void onItemClick(AdapterView arg0, View clickedView, int position, long arg3) { paneShouldBeOpen = false; - if (selectedConversation != position) { - selectedConversation = position; + if (selectedConversation != conversationList.get(position)) { + selectedConversation = conversationList.get(position); swapConversationFragment(); //.onBackendConnected(conversationList.get(position)); } else { spl.closePane(); @@ -202,7 +202,7 @@ public class ConversationActivity extends XmppActivity { paneShouldBeOpen = false; if (conversationList.size() > 0) { getActionBar().setDisplayHomeAsUpEnabled(true); - getActionBar().setTitle(conversationList.get(selectedConversation).getName()); + getActionBar().setTitle(getSelectedConversation().getName()); invalidateOptionsMenu(); } } @@ -225,6 +225,11 @@ public class ConversationActivity extends XmppActivity { ((MenuItem) menu.findItem(R.id.action_security)).setVisible(false); } else { ((MenuItem) menu.findItem(R.id.action_add)).setVisible(false); + if (this.getSelectedConversation()!=null) { + if (this.getSelectedConversation().getMode() == Conversation.MODE_MULTI) { + ((MenuItem) menu.findItem(R.id.action_security)).setVisible(false); + } + } } return true; } @@ -245,12 +250,12 @@ public class ConversationActivity extends XmppActivity { startActivity(new Intent(this, NewConversationActivity.class)); break; case R.id.action_archive: - Conversation conv = getConversationList().get(selectedConversation); + Conversation conv = getSelectedConversation(); conv.setStatus(Conversation.STATUS_ARCHIVED); paneShouldBeOpen = true; spl.openPane(); xmppConnectionService.archiveConversation(conv); - selectedConversation = 0; + selectedConversation = conversationList.get(0); break; default: break; @@ -333,7 +338,7 @@ public class ConversationActivity extends XmppActivity { for(int i = 0; i < conversationList.size(); ++i) { if (conversationList.get(i).getUuid().equals(convToView)) { - selectedConversation = i; + selectedConversation = conversationList.get(i); } } paneShouldBeOpen = false; @@ -356,7 +361,7 @@ public class ConversationActivity extends XmppActivity { selectedFragment.onBackendConnected(); } else { Log.d("gultsch","conversationactivity. no old fragment found. creating new one"); - selectedConversation = 0; + selectedConversation = conversationList.get(0); Log.d("gultsch","selected conversation is #"+selectedConversation); swapConversationFragment(); } diff --git a/src/de/gultsch/chat/ui/ConversationFragment.java b/src/de/gultsch/chat/ui/ConversationFragment.java index f2726945..319c3a31 100644 --- a/src/de/gultsch/chat/ui/ConversationFragment.java +++ b/src/de/gultsch/chat/ui/ConversationFragment.java @@ -161,7 +161,7 @@ public class ConversationFragment extends Fragment { final ConversationActivity activity = (ConversationActivity) getActivity(); if (activity.xmppConnectionServiceBound) { - this.conversation = activity.getConversationList().get(activity.getSelectedConversation()); + this.conversation = activity.getSelectedConversation(); updateMessages(); // rendering complete. now go tell activity to close pane if (!activity.shouldPaneBeOpen()) { @@ -176,7 +176,7 @@ public class ConversationFragment extends Fragment { public void onBackendConnected() { Log.d("gultsch","calling on backend connected in conversation fragment"); final ConversationActivity activity = (ConversationActivity) getActivity(); - this.conversation = activity.getConversationList().get(activity.getSelectedConversation()); + this.conversation = activity.getSelectedConversation(); updateMessages(); // rendering complete. now go tell activity to close pane if (!activity.shouldPaneBeOpen()) { diff --git a/src/de/gultsch/chat/ui/NewConversationActivity.java b/src/de/gultsch/chat/ui/NewConversationActivity.java index cbd68def..ec445e6c 100644 --- a/src/de/gultsch/chat/ui/NewConversationActivity.java +++ b/src/de/gultsch/chat/ui/NewConversationActivity.java @@ -27,6 +27,7 @@ import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; +import android.widget.ProgressBar; import android.widget.TextView; import android.widget.ImageView; import android.annotation.SuppressLint; @@ -210,21 +211,25 @@ public class NewConversationActivity extends XmppActivity { } this.accounts = xmppConnectionService.getAccounts(); this.rosterContacts.clear(); - xmppConnectionService.getRoster(new OnRosterFetchedListener() { - - @Override - public void onRosterFetched(List roster) { - rosterContacts.addAll(roster); - runOnUiThread(new Runnable() { - + for(int i = 0; i < accounts.size(); ++i) { + if (accounts.get(i).getStatus()==Account.STATUS_ONLINE) { + xmppConnectionService.getRoster(accounts.get(i),new OnRosterFetchedListener() { + @Override - public void run() { - updateAggregatedContacts(); + public void onRosterFetched(List roster) { + rosterContacts.addAll(roster); + runOnUiThread(new Runnable() { + + @Override + public void run() { + updateAggregatedContacts(); + } + }); + } }); - - } - }); + } + } } @Override @@ -243,10 +248,48 @@ public class NewConversationActivity extends XmppActivity { case R.id.action_accounts: startActivity(new Intent(this, ManageAccountActivity.class)); break; + case R.id.action_refresh_contacts: + refreshContacts(); + break; default: break; } return super.onOptionsItemSelected(item); } + private void refreshContacts() { + final ProgressBar progress = (ProgressBar) findViewById(R.id.progressBar1); + final EditText searchBar = (EditText) findViewById(R.id.new_conversation_search); + final TextView contactsHeader = (TextView) findViewById(R.id.contacts_header); + final ListView contactList = (ListView) findViewById(R.id.contactList); + searchBar.setVisibility(View.GONE); + contactsHeader.setVisibility(View.GONE); + contactList.setVisibility(View.GONE); + progress.setVisibility(View.VISIBLE); + this.accounts = xmppConnectionService.getAccounts(); + this.rosterContacts.clear(); + for (int i = 0; i < accounts.size(); ++i) { + if (accounts.get(i).getStatus()==Account.STATUS_ONLINE) { + xmppConnectionService.updateRoster(accounts.get(i), + new OnRosterFetchedListener() { + + @Override + public void onRosterFetched(final List roster) { + runOnUiThread(new Runnable() { + + @Override + public void run() { + rosterContacts.addAll(roster); + progress.setVisibility(View.GONE); + searchBar.setVisibility(View.VISIBLE); + contactList.setVisibility(View.VISIBLE); + contactList.setVisibility(View.VISIBLE); + updateAggregatedContacts(); + } + }); + } + }); + } + } + } } -- cgit v1.2.3