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="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>

View file

@ -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);
}
}

View file

@ -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());
}

View file

@ -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,14 +137,29 @@ public class StartConversation extends XmppActivity {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1,
int position, long arg3) {
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
@ -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;
}
}
}

View file

@ -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>() {