added contextual menu for contacts
This commit is contained in:
parent
2684ecda1e
commit
f8763015eb
14
res/menu/contact_context.xml
Normal file
14
res/menu/contact_context.xml
Normal 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>
|
|
@ -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>
|
|
@ -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);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -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());
|
||||||
}
|
}
|
||||||
|
|
|
@ -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,16 +137,31 @@ 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) {
|
||||||
Contact contact = (Contact) contacts.get(position);
|
openConversationForContact(position);
|
||||||
Conversation conversation = xmppConnectionService
|
|
||||||
.findOrCreateConversation(contact.getAccount(),
|
|
||||||
contact.getJid(), false);
|
|
||||||
switchToConversation(conversation, null, false);
|
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void openConversationForContact(int position) {
|
||||||
|
Contact contact = (Contact) contacts.get(position);
|
||||||
|
Conversation conversation = xmppConnectionService
|
||||||
|
.findOrCreateConversation(contact.getAccount(),
|
||||||
|
contact.getJid(), 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
|
||||||
public boolean onCreateOptionsMenu(Menu menu) {
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
getMenuInflater().inflate(R.menu.start_conversation, menu);
|
getMenuInflater().inflate(R.menu.start_conversation, menu);
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -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>() {
|
||||||
|
|
Loading…
Reference in a new issue