added contextual menu for contacts
This commit is contained in:
parent
2684ecda1e
commit
f8763015eb
|
@ -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="create_contact">Create Contact</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>
|
|
@ -1282,6 +1282,7 @@ public class XmppConnectionService extends Service {
|
|||
|
||||
public void deleteContactOnServer(Contact contact) {
|
||||
contact.resetOption(Contact.Options.DIRTY_PUSH);
|
||||
contact.setOption(Contact.Options.DIRTY_DELETE);
|
||||
Account account = contact.getAccount();
|
||||
if (account.getStatus() == Account.STATUS_ONLINE) {
|
||||
IqPacket iq = new IqPacket(IqPacket.TYPE_SET);
|
||||
|
@ -1290,8 +1291,6 @@ public class XmppConnectionService extends Service {
|
|||
item.setAttribute("subscription", "remove");
|
||||
account.getXmppConnection().sendIqPacket(iq, null);
|
||||
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:
|
||||
Contact contact = this.getSelectedConversation().getContact();
|
||||
if (contact.showInRoster()) {
|
||||
Intent intent = new Intent(this, ContactDetailsActivity.class);
|
||||
intent.setAction(ContactDetailsActivity.ACTION_VIEW_CONTACT);
|
||||
intent.putExtra("account", this.getSelectedConversation()
|
||||
.getAccount().getJid());
|
||||
intent.putExtra("contact", contact.getJid());
|
||||
startActivity(intent);
|
||||
switchToContactDetails(contact);
|
||||
} else {
|
||||
showAddToRosterDialog(getSelectedConversation());
|
||||
}
|
||||
|
|
|
@ -15,12 +15,15 @@ import android.graphics.Color;
|
|||
import android.os.Bundle;
|
||||
import android.support.v13.app.FragmentPagerAdapter;
|
||||
import android.support.v4.view.ViewPager;
|
||||
import android.view.ContextMenu;
|
||||
import android.view.ContextMenu.ContextMenuInfo;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.Menu;
|
||||
import android.view.MenuItem;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import android.widget.AdapterView;
|
||||
import android.widget.AdapterView.AdapterContextMenuInfo;
|
||||
import android.widget.AdapterView.OnItemClickListener;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.ImageView;
|
||||
|
@ -134,16 +137,31 @@ public class StartConversation extends XmppActivity {
|
|||
@Override
|
||||
public void onItemClick(AdapterView<?> arg0, View arg1,
|
||||
int position, long arg3) {
|
||||
Contact contact = (Contact) contacts.get(position);
|
||||
Conversation conversation = xmppConnectionService
|
||||
.findOrCreateConversation(contact.getAccount(),
|
||||
contact.getJid(), false);
|
||||
switchToConversation(conversation, null, false);
|
||||
openConversationForContact(position);
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
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
|
||||
public boolean onCreateOptionsMenu(Menu menu) {
|
||||
getMenuInflater().inflate(R.menu.start_conversation, menu);
|
||||
|
@ -158,7 +176,8 @@ public class StartConversation extends XmppActivity {
|
|||
menuCreateContact.setVisible(false);
|
||||
}
|
||||
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.setTextColor(Color.WHITE);
|
||||
mSearchView.setOnQueryTextListener(this.mOnQueryTextListener);
|
||||
|
@ -228,6 +247,7 @@ public class StartConversation extends XmppActivity {
|
|||
|
||||
public static class MyListFragment extends ListFragment {
|
||||
private AdapterView.OnItemClickListener mOnItemClickListener;
|
||||
private int mContextPosition = -1;
|
||||
|
||||
@Override
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
|
||||
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) {
|
||||
xmppConnectionService.getPgpEngine().generateSignature(account,
|
||||
"online", new UiCallback<Account>() {
|
||||
|
|
Loading…
Reference in New Issue