added contextual menu for contacts

This commit is contained in:
iNPUTmice 2014-07-10 01:55:19 +02:00
parent 2684ecda1e
commit f8763015eb
6 changed files with 85 additions and 15 deletions

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:id="@+id/context_start_conversation"
android:title="@string/start_conversation"/>
<item
android:id="@+id/context_contact_details"
android:title="@string/view_contact_details"/>
<item
android:id="@+id/context_delete_contact"
android:title="@string/delete_contact"/>
</menu>

View File

@ -259,4 +259,6 @@
<string name="search">Search</string> <string name="search">Search</string>
<string name="create_contact">Create Contact</string> <string name="create_contact">Create Contact</string>
<string name="create_conference">Create Conference</string> <string name="create_conference">Create Conference</string>
<string name="delete_contact">Delete Contact</string>
<string name="view_contact_details">View contact details</string>
</resources> </resources>

View File

@ -1282,6 +1282,7 @@ public class XmppConnectionService extends Service {
public void deleteContactOnServer(Contact contact) { public void deleteContactOnServer(Contact contact) {
contact.resetOption(Contact.Options.DIRTY_PUSH); contact.resetOption(Contact.Options.DIRTY_PUSH);
contact.setOption(Contact.Options.DIRTY_DELETE);
Account account = contact.getAccount(); Account account = contact.getAccount();
if (account.getStatus() == Account.STATUS_ONLINE) { if (account.getStatus() == Account.STATUS_ONLINE) {
IqPacket iq = new IqPacket(IqPacket.TYPE_SET); IqPacket iq = new IqPacket(IqPacket.TYPE_SET);
@ -1290,8 +1291,6 @@ public class XmppConnectionService extends Service {
item.setAttribute("subscription", "remove"); item.setAttribute("subscription", "remove");
account.getXmppConnection().sendIqPacket(iq, null); account.getXmppConnection().sendIqPacket(iq, null);
contact.resetOption(Contact.Options.DIRTY_DELETE); contact.resetOption(Contact.Options.DIRTY_DELETE);
} else {
contact.setOption(Contact.Options.DIRTY_DELETE);
} }
} }

View File

@ -496,12 +496,7 @@ public class ConversationActivity extends XmppActivity {
case R.id.action_contact_details: case R.id.action_contact_details:
Contact contact = this.getSelectedConversation().getContact(); Contact contact = this.getSelectedConversation().getContact();
if (contact.showInRoster()) { if (contact.showInRoster()) {
Intent intent = new Intent(this, ContactDetailsActivity.class); switchToContactDetails(contact);
intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT);
intent.putExtra("account", this.getSelectedConversation()
.getAccount().getJid());
intent.putExtra("contact", contact.getJid());
startActivity(intent);
} else { } else {
showAddToRosterDialog(getSelectedConversation()); showAddToRosterDialog(getSelectedConversation());
} }

View File

@ -15,12 +15,15 @@ import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.support.v13.app.FragmentPagerAdapter; import android.support.v13.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager; import android.support.v4.view.ViewPager;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.AdapterView; import android.widget.AdapterView;
import android.widget.AdapterView.AdapterContextMenuInfo;
import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter; import android.widget.ArrayAdapter;
import android.widget.ImageView; import android.widget.ImageView;
@ -134,14 +137,29 @@ public class StartConversation extends XmppActivity {
@Override @Override
public void onItemClick(AdapterView<?> arg0, View arg1, public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) { int position, long arg3) {
openConversationForContact(position);
}
});
}
protected void openConversationForContact(int position) {
Contact contact = (Contact) contacts.get(position); Contact contact = (Contact) contacts.get(position);
Conversation conversation = xmppConnectionService Conversation conversation = xmppConnectionService
.findOrCreateConversation(contact.getAccount(), .findOrCreateConversation(contact.getAccount(),
contact.getJid(), false); contact.getJid(), false);
switchToConversation(conversation, null, false); switchToConversation(conversation, null, false);
} }
});
protected void openDetailsForContact(int position) {
Contact contact = (Contact) contacts.get(position);
switchToContactDetails(contact);
}
protected void deleteContact(int position) {
Contact contact = (Contact) contacts.get(position);
xmppConnectionService.deleteContactOnServer(contact);
filterContacts(null);
} }
@Override @Override
@ -158,7 +176,8 @@ public class StartConversation extends XmppActivity {
menuCreateContact.setVisible(false); menuCreateContact.setVisible(false);
} }
mSearchView = (SearchView) menuSearch.getActionView(); mSearchView = (SearchView) menuSearch.getActionView();
int id = mSearchView.getContext().getResources().getIdentifier("android:id/search_src_text", null, null); int id = mSearchView.getContext().getResources()
.getIdentifier("android:id/search_src_text", null, null);
TextView textView = (TextView) mSearchView.findViewById(id); TextView textView = (TextView) mSearchView.findViewById(id);
textView.setTextColor(Color.WHITE); textView.setTextColor(Color.WHITE);
mSearchView.setOnQueryTextListener(this.mOnQueryTextListener); mSearchView.setOnQueryTextListener(this.mOnQueryTextListener);
@ -228,6 +247,7 @@ public class StartConversation extends XmppActivity {
public static class MyListFragment extends ListFragment { public static class MyListFragment extends ListFragment {
private AdapterView.OnItemClickListener mOnItemClickListener; private AdapterView.OnItemClickListener mOnItemClickListener;
private int mContextPosition = -1;
@Override @Override
public void onListItemClick(ListView l, View v, int position, long id) { public void onListItemClick(ListView l, View v, int position, long id) {
@ -239,6 +259,38 @@ public class StartConversation extends XmppActivity {
public void setOnListItemClickListener(AdapterView.OnItemClickListener l) { public void setOnListItemClickListener(AdapterView.OnItemClickListener l) {
this.mOnItemClickListener = l; this.mOnItemClickListener = l;
} }
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
registerForContextMenu(getListView());
} }
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
super.onCreateContextMenu(menu, v, menuInfo);
getActivity().getMenuInflater().inflate(R.menu.contact_context,
menu);
AdapterView.AdapterContextMenuInfo acmi = (AdapterContextMenuInfo) menuInfo;
this.mContextPosition = acmi.position;
}
@Override
public boolean onContextItemSelected(MenuItem item) {
StartConversation activity = (StartConversation) getActivity();
switch(item.getItemId()) {
case R.id.context_start_conversation:
activity.openConversationForContact(mContextPosition);
break;
case R.id.context_contact_details:
activity.openDetailsForContact(mContextPosition);
break;
case R.id.context_delete_contact:
activity.deleteContact(mContextPosition);
break;
}
return true;
}
}
} }

View File

@ -171,6 +171,14 @@ public abstract class XmppActivity extends Activity {
startActivity(viewConversationIntent); startActivity(viewConversationIntent);
} }
public void switchToContactDetails(Contact contact) {
Intent intent = new Intent(this, ContactDetailsActivity.class);
intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT);
intent.putExtra("account", contact.getAccount().getJid());
intent.putExtra("contact", contact.getJid());
startActivity(intent);
}
protected void announcePgp(Account account, final Conversation conversation) { protected void announcePgp(Account account, final Conversation conversation) {
xmppConnectionService.getPgpEngine().generateSignature(account, xmppConnectionService.getPgpEngine().generateSignature(account,
"online", new UiCallback<Account>() { "online", new UiCallback<Account>() {