refactored options menu handling a bit
This commit is contained in:
parent
a399c0c3df
commit
248a1693ea
|
@ -154,10 +154,12 @@ public class ConversationActivity extends XmppActivity implements
|
||||||
if (ab != null) {
|
if (ab != null) {
|
||||||
ab.setDisplayHomeAsUpEnabled(true);
|
ab.setDisplayHomeAsUpEnabled(true);
|
||||||
ab.setHomeButtonEnabled(true);
|
ab.setHomeButtonEnabled(true);
|
||||||
if (getSelectedConversation().getMode() == Conversation.MODE_SINGLE || activity.useSubjectToIdentifyConference()) {
|
if (getSelectedConversation().getMode() == Conversation.MODE_SINGLE
|
||||||
|
|| activity.useSubjectToIdentifyConference()) {
|
||||||
ab.setTitle(getSelectedConversation().getName());
|
ab.setTitle(getSelectedConversation().getName());
|
||||||
} else {
|
} else {
|
||||||
ab.setTitle(getSelectedConversation().getContactJid().split("/")[0]);
|
ab.setTitle(getSelectedConversation()
|
||||||
|
.getContactJid().split("/")[0]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
invalidateOptionsMenu();
|
invalidateOptionsMenu();
|
||||||
|
@ -312,152 +314,54 @@ public class ConversationActivity extends XmppActivity implements
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean onOptionsItemSelected(MenuItem item) {
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
switch (item.getItemId()) {
|
if (item.getItemId() == android.R.id.home) {
|
||||||
case android.R.id.home:
|
|
||||||
spl.openPane();
|
spl.openPane();
|
||||||
return true;
|
return true;
|
||||||
case R.id.action_attach_file:
|
} else if (item.getItemId() == R.id.action_add) {
|
||||||
View menuAttachFile = findViewById(R.id.action_attach_file);
|
|
||||||
if (menuAttachFile == null) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
PopupMenu attachFilePopup = new PopupMenu(this, menuAttachFile);
|
|
||||||
attachFilePopup.inflate(R.menu.attachment_choices);
|
|
||||||
attachFilePopup
|
|
||||||
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case R.id.attach_choose_picture:
|
|
||||||
attachFile(ATTACHMENT_CHOICE_CHOOSE_IMAGE);
|
|
||||||
break;
|
|
||||||
case R.id.attach_take_picture:
|
|
||||||
attachFile(ATTACHMENT_CHOICE_TAKE_PHOTO);
|
|
||||||
break;
|
|
||||||
case R.id.attach_record_voice:
|
|
||||||
attachFile(ATTACHMENT_CHOICE_RECORD_VOICE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
attachFilePopup.show();
|
|
||||||
break;
|
|
||||||
case R.id.action_add:
|
|
||||||
startActivity(new Intent(this, StartConversationActivity.class));
|
startActivity(new Intent(this, StartConversationActivity.class));
|
||||||
break;
|
return true;
|
||||||
case R.id.action_archive:
|
} else if (getSelectedConversation() != null) {
|
||||||
this.endConversation(getSelectedConversation());
|
switch (item.getItemId()) {
|
||||||
break;
|
case R.id.action_attach_file:
|
||||||
case R.id.action_contact_details:
|
attachFileDialog();
|
||||||
Contact contact = this.getSelectedConversation().getContact();
|
break;
|
||||||
if (contact.showInRoster()) {
|
case R.id.action_archive:
|
||||||
switchToContactDetails(contact);
|
this.endConversation(getSelectedConversation());
|
||||||
} else {
|
break;
|
||||||
showAddToRosterDialog(getSelectedConversation());
|
case R.id.action_contact_details:
|
||||||
}
|
Contact contact = this.getSelectedConversation().getContact();
|
||||||
break;
|
if (contact.showInRoster()) {
|
||||||
case R.id.action_muc_details:
|
switchToContactDetails(contact);
|
||||||
Intent intent = new Intent(this, ConferenceDetailsActivity.class);
|
} else {
|
||||||
intent.setAction(ConferenceDetailsActivity.ACTION_VIEW_MUC);
|
showAddToRosterDialog(getSelectedConversation());
|
||||||
intent.putExtra("uuid", getSelectedConversation().getUuid());
|
}
|
||||||
startActivity(intent);
|
break;
|
||||||
break;
|
case R.id.action_muc_details:
|
||||||
case R.id.action_invite:
|
Intent intent = new Intent(this,
|
||||||
inviteToConversation(getSelectedConversation());
|
ConferenceDetailsActivity.class);
|
||||||
break;
|
intent.setAction(ConferenceDetailsActivity.ACTION_VIEW_MUC);
|
||||||
case R.id.action_security:
|
intent.putExtra("uuid", getSelectedConversation().getUuid());
|
||||||
final Conversation conversation = getSelectedConversation();
|
startActivity(intent);
|
||||||
View menuItemView = findViewById(R.id.action_security);
|
break;
|
||||||
if (menuItemView == null) {
|
case R.id.action_invite:
|
||||||
|
inviteToConversation(getSelectedConversation());
|
||||||
|
break;
|
||||||
|
case R.id.action_security:
|
||||||
|
selectEncryptionDialog(getSelectedConversation());
|
||||||
|
break;
|
||||||
|
case R.id.action_clear_history:
|
||||||
|
clearHistoryDialog(getSelectedConversation());
|
||||||
|
break;
|
||||||
|
case R.id.action_mute:
|
||||||
|
muteConversationDialog(getSelectedConversation());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
PopupMenu popup = new PopupMenu(this, menuItemView);
|
return super.onOptionsItemSelected(item);
|
||||||
final ConversationFragment fragment = (ConversationFragment) getFragmentManager()
|
} else {
|
||||||
.findFragmentByTag("conversation");
|
return super.onOptionsItemSelected(item);
|
||||||
if (fragment != null) {
|
|
||||||
popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public boolean onMenuItemClick(MenuItem item) {
|
|
||||||
switch (item.getItemId()) {
|
|
||||||
case R.id.encryption_choice_none:
|
|
||||||
conversation
|
|
||||||
.setNextEncryption(Message.ENCRYPTION_NONE);
|
|
||||||
item.setChecked(true);
|
|
||||||
break;
|
|
||||||
case R.id.encryption_choice_otr:
|
|
||||||
conversation
|
|
||||||
.setNextEncryption(Message.ENCRYPTION_OTR);
|
|
||||||
item.setChecked(true);
|
|
||||||
break;
|
|
||||||
case R.id.encryption_choice_pgp:
|
|
||||||
if (hasPgp()) {
|
|
||||||
if (conversation.getAccount().getKeys()
|
|
||||||
.has("pgp_signature")) {
|
|
||||||
conversation
|
|
||||||
.setNextEncryption(Message.ENCRYPTION_PGP);
|
|
||||||
item.setChecked(true);
|
|
||||||
} else {
|
|
||||||
announcePgp(conversation.getAccount(),
|
|
||||||
conversation);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
showInstallPgpDialog();
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
conversation
|
|
||||||
.setNextEncryption(Message.ENCRYPTION_NONE);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
fragment.updateChatMsgHint();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
popup.inflate(R.menu.encryption_choices);
|
|
||||||
MenuItem otr = popup.getMenu().findItem(
|
|
||||||
R.id.encryption_choice_otr);
|
|
||||||
MenuItem none = popup.getMenu().findItem(
|
|
||||||
R.id.encryption_choice_none);
|
|
||||||
if (conversation.getMode() == Conversation.MODE_MULTI) {
|
|
||||||
otr.setEnabled(false);
|
|
||||||
} else {
|
|
||||||
if (forceEncryption()) {
|
|
||||||
none.setVisible(false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
switch (conversation.getNextEncryption(forceEncryption())) {
|
|
||||||
case Message.ENCRYPTION_NONE:
|
|
||||||
none.setChecked(true);
|
|
||||||
break;
|
|
||||||
case Message.ENCRYPTION_OTR:
|
|
||||||
otr.setChecked(true);
|
|
||||||
break;
|
|
||||||
case Message.ENCRYPTION_PGP:
|
|
||||||
popup.getMenu().findItem(R.id.encryption_choice_pgp)
|
|
||||||
.setChecked(true);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
popup.getMenu().findItem(R.id.encryption_choice_none)
|
|
||||||
.setChecked(true);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
popup.show();
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
case R.id.action_clear_history:
|
|
||||||
clearHistoryDialog(getSelectedConversation());
|
|
||||||
break;
|
|
||||||
case R.id.action_mute:
|
|
||||||
muteConversationDialog(getSelectedConversation());
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
return super.onOptionsItemSelected(item);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void endConversation(Conversation conversation) {
|
public void endConversation(Conversation conversation) {
|
||||||
|
@ -495,6 +399,111 @@ public class ConversationActivity extends XmppActivity implements
|
||||||
});
|
});
|
||||||
builder.create().show();
|
builder.create().show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected void attachFileDialog() {
|
||||||
|
View menuAttachFile = findViewById(R.id.action_attach_file);
|
||||||
|
if (menuAttachFile == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PopupMenu attachFilePopup = new PopupMenu(this, menuAttachFile);
|
||||||
|
attachFilePopup.inflate(R.menu.attachment_choices);
|
||||||
|
attachFilePopup
|
||||||
|
.setOnMenuItemClickListener(new OnMenuItemClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.attach_choose_picture:
|
||||||
|
attachFile(ATTACHMENT_CHOICE_CHOOSE_IMAGE);
|
||||||
|
break;
|
||||||
|
case R.id.attach_take_picture:
|
||||||
|
attachFile(ATTACHMENT_CHOICE_TAKE_PHOTO);
|
||||||
|
break;
|
||||||
|
case R.id.attach_record_voice:
|
||||||
|
attachFile(ATTACHMENT_CHOICE_RECORD_VOICE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
attachFilePopup.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void selectEncryptionDialog(final Conversation conversation) {
|
||||||
|
View menuItemView = findViewById(R.id.action_security);
|
||||||
|
if (menuItemView == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
PopupMenu popup = new PopupMenu(this, menuItemView);
|
||||||
|
final ConversationFragment fragment = (ConversationFragment) getFragmentManager()
|
||||||
|
.findFragmentByTag("conversation");
|
||||||
|
if (fragment != null) {
|
||||||
|
popup.setOnMenuItemClickListener(new OnMenuItemClickListener() {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onMenuItemClick(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case R.id.encryption_choice_none:
|
||||||
|
conversation.setNextEncryption(Message.ENCRYPTION_NONE);
|
||||||
|
item.setChecked(true);
|
||||||
|
break;
|
||||||
|
case R.id.encryption_choice_otr:
|
||||||
|
conversation.setNextEncryption(Message.ENCRYPTION_OTR);
|
||||||
|
item.setChecked(true);
|
||||||
|
break;
|
||||||
|
case R.id.encryption_choice_pgp:
|
||||||
|
if (hasPgp()) {
|
||||||
|
if (conversation.getAccount().getKeys()
|
||||||
|
.has("pgp_signature")) {
|
||||||
|
conversation
|
||||||
|
.setNextEncryption(Message.ENCRYPTION_PGP);
|
||||||
|
item.setChecked(true);
|
||||||
|
} else {
|
||||||
|
announcePgp(conversation.getAccount(),
|
||||||
|
conversation);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
showInstallPgpDialog();
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
conversation.setNextEncryption(Message.ENCRYPTION_NONE);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
fragment.updateChatMsgHint();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
popup.inflate(R.menu.encryption_choices);
|
||||||
|
MenuItem otr = popup.getMenu().findItem(R.id.encryption_choice_otr);
|
||||||
|
MenuItem none = popup.getMenu().findItem(
|
||||||
|
R.id.encryption_choice_none);
|
||||||
|
if (conversation.getMode() == Conversation.MODE_MULTI) {
|
||||||
|
otr.setEnabled(false);
|
||||||
|
} else {
|
||||||
|
if (forceEncryption()) {
|
||||||
|
none.setVisible(false);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
switch (conversation.getNextEncryption(forceEncryption())) {
|
||||||
|
case Message.ENCRYPTION_NONE:
|
||||||
|
none.setChecked(true);
|
||||||
|
break;
|
||||||
|
case Message.ENCRYPTION_OTR:
|
||||||
|
otr.setChecked(true);
|
||||||
|
break;
|
||||||
|
case Message.ENCRYPTION_PGP:
|
||||||
|
popup.getMenu().findItem(R.id.encryption_choice_pgp)
|
||||||
|
.setChecked(true);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
popup.getMenu().findItem(R.id.encryption_choice_none)
|
||||||
|
.setChecked(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
popup.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
protected void muteConversationDialog(final Conversation conversation) {
|
protected void muteConversationDialog(final Conversation conversation) {
|
||||||
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
AlertDialog.Builder builder = new AlertDialog.Builder(this);
|
||||||
|
|
Loading…
Reference in New Issue