always allow access to contact details. provide add button in contact details

This commit is contained in:
iNPUTmice 2015-01-21 15:31:40 +01:00
parent 764ef3c8cd
commit be9af442ef
6 changed files with 89 additions and 84 deletions

View file

@ -18,6 +18,7 @@ import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
@ -40,6 +41,7 @@ import eu.siacs.conversations.services.XmppConnectionService.OnRosterUpdate;
import eu.siacs.conversations.utils.CryptoHelper;
import eu.siacs.conversations.utils.UIHelper;
import eu.siacs.conversations.xmpp.OnUpdateBlocklist;
import eu.siacs.conversations.xmpp.XmppConnection;
import eu.siacs.conversations.xmpp.jid.InvalidJidException;
import eu.siacs.conversations.xmpp.jid.Jid;
@ -51,9 +53,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
@Override
public void onClick(DialogInterface dialog, int which) {
ContactDetailsActivity.this.xmppConnectionService
.deleteContactOnServer(contact);
ContactDetailsActivity.this.finish();
xmppConnectionService.deleteContactOnServer(contact);
}
};
private OnCheckedChangeListener mOnSendCheckedChange = new OnCheckedChangeListener() {
@ -102,6 +102,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
private TextView lastseen;
private CheckBox send;
private CheckBox receive;
private Button addContactButton;
private QuickContactBadge badge;
private LinearLayout keys;
private LinearLayout tags;
@ -142,6 +143,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
@Override
public void run() {
invalidateOptionsMenu();
populateView();
}
});
@ -153,6 +155,7 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
@Override
public void run() {
invalidateOptionsMenu();
populateView();
}
});
@ -188,6 +191,13 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
send = (CheckBox) findViewById(R.id.details_send_presence);
receive = (CheckBox) findViewById(R.id.details_receive_presence);
badge = (QuickContactBadge) findViewById(R.id.details_contact_badge);
addContactButton = (Button) findViewById(R.id.add_contact_button);
addContactButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
showAddToRosterDialog(contact);
}
});
keys = (LinearLayout) findViewById(R.id.details_contact_keys);
tags = (LinearLayout) findViewById(R.id.tags);
if (getActionBar() != null) {
@ -250,58 +260,83 @@ public class ContactDetailsActivity extends XmppActivity implements OnAccountUpd
@Override
public boolean onCreateOptionsMenu(final Menu menu) {
getMenuInflater().inflate(R.menu.contact_details, menu);
if (this.contact.isBlocked()) {
menu.findItem(R.id.action_block).setVisible(false);
MenuItem block = menu.findItem(R.id.action_block);
MenuItem unblock = menu.findItem(R.id.action_unblock);
MenuItem edit = menu.findItem(R.id.action_edit_contact);
MenuItem delete = menu.findItem(R.id.action_delete_contact);
final XmppConnection connection = contact.getAccount().getXmppConnection();
if (connection != null && connection.getFeatures().blocking()) {
if (this.contact.isBlocked()) {
menu.findItem(R.id.action_block).setVisible(false);
} else {
menu.findItem(R.id.action_unblock).setVisible(false);
}
} else {
menu.findItem(R.id.action_unblock).setVisible(false);
menu.findItem(R.id.action_block).setVisible(false);
}
if (!contact.showInRoster()) {
edit.setVisible(false);
delete.setVisible(false);
}
return true;
}
private void populateView() {
send.setOnCheckedChangeListener(null);
receive.setOnCheckedChangeListener(null);
setTitle(contact.getDisplayName());
if (contact.getOption(Contact.Options.FROM)) {
send.setText(R.string.send_presence_updates);
send.setChecked(true);
} else if (contact
.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
send.setChecked(false);
send.setText(R.string.send_presence_updates);
} else {
send.setText(R.string.preemptively_grant);
if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
if (contact.showInRoster()) {
send.setVisibility(View.VISIBLE);
receive.setVisibility(View.VISIBLE);
addContactButton.setVisibility(View.GONE);
send.setOnCheckedChangeListener(null);
receive.setOnCheckedChangeListener(null);
if (contact.getOption(Contact.Options.FROM)) {
send.setText(R.string.send_presence_updates);
send.setChecked(true);
} else {
} else if (contact.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) {
send.setChecked(false);
send.setText(R.string.send_presence_updates);
} else {
send.setText(R.string.preemptively_grant);
if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) {
send.setChecked(true);
} else {
send.setChecked(false);
}
}
}
if (contact.getOption(Contact.Options.TO)) {
receive.setText(R.string.receive_presence_updates);
receive.setChecked(true);
} else {
receive.setText(R.string.ask_for_presence_updates);
if (contact.getOption(Contact.Options.ASKING)) {
if (contact.getOption(Contact.Options.TO)) {
receive.setText(R.string.receive_presence_updates);
receive.setChecked(true);
} else {
receive.setChecked(false);
receive.setText(R.string.ask_for_presence_updates);
if (contact.getOption(Contact.Options.ASKING)) {
receive.setChecked(true);
} else {
receive.setChecked(false);
}
}
}
if (contact.getAccount().getStatus() == Account.State.ONLINE) {
receive.setEnabled(true);
send.setEnabled(true);
if (contact.getAccount().isOnlineAndConnected()) {
receive.setEnabled(true);
send.setEnabled(true);
} else {
receive.setEnabled(false);
send.setEnabled(false);
}
send.setOnCheckedChangeListener(this.mOnSendCheckedChange);
receive.setOnCheckedChangeListener(this.mOnReceiveCheckedChange);
} else {
receive.setEnabled(false);
send.setEnabled(false);
addContactButton.setVisibility(View.VISIBLE);
send.setVisibility(View.GONE);
receive.setVisibility(View.GONE);
}
send.setOnCheckedChangeListener(this.mOnSendCheckedChange);
receive.setOnCheckedChangeListener(this.mOnReceiveCheckedChange);
lastseen.setText(UIHelper.lastseen(getApplicationContext(),
contact.lastseen.time));
if (contact.isBlocked() && !this.showDynamicTags) {
lastseen.setText(R.string.contact_blocked);
} else {
lastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.lastseen.time));
}
if (contact.getPresences().size() > 1) {
contactJidTv.setText(contact.getJid() + " ("

View file

@ -280,8 +280,6 @@ public class ConversationActivity extends XmppActivity
final MenuItem menuInviteContact = menu.findItem(R.id.action_invite);
final MenuItem menuMute = menu.findItem(R.id.action_mute);
final MenuItem menuUnmute = menu.findItem(R.id.action_unmute);
final MenuItem menuBlock = menu.findItem(R.id.action_block);
final MenuItem menuUnblock = menu.findItem(R.id.action_unblock);
if (isConversationsOverviewVisable() && isConversationsOverviewHideable()) {
menuArchive.setVisible(false);
@ -293,8 +291,6 @@ public class ConversationActivity extends XmppActivity
menuClearHistory.setVisible(false);
menuMute.setVisible(false);
menuUnmute.setVisible(false);
menuBlock.setVisible(false);
menuUnblock.setVisible(false);
} else {
menuAdd.setVisible(!isConversationsOverviewHideable());
if (this.getSelectedConversation() != null) {
@ -305,21 +301,10 @@ public class ConversationActivity extends XmppActivity
if (this.getSelectedConversation().getMode() == Conversation.MODE_MULTI) {
menuContactDetails.setVisible(false);
menuAttach.setVisible(false);
menuBlock.setVisible(false);
menuUnblock.setVisible(false);
menuInviteContact.setVisible(getSelectedConversation().getMucOptions().canInvite());
} else {
menuMucDetails.setVisible(false);
if (this.getSelectedConversation().isBlocked()) {
menuBlock.setVisible(false);
} else {
menuUnblock.setVisible(false);
}
final Account account = this.getSelectedConversation().getAccount();
if (!(account.isOnlineAndConnected() && account.getXmppConnection().getFeatures().blocking())) {
menuBlock.setVisible(false);
menuUnblock.setVisible(false);
}
}
if (this.getSelectedConversation().isMuted()) {
menuMute.setVisible(false);
@ -445,12 +430,7 @@ public class ConversationActivity extends XmppActivity
this.endConversation(getSelectedConversation());
break;
case R.id.action_contact_details:
Contact contact = this.getSelectedConversation().getContact();
if (contact.showInRoster()) {
switchToContactDetails(contact);
} else {
showAddToRosterDialog(getSelectedConversation());
}
switchToContactDetails(getSelectedConversation().getContact());
break;
case R.id.action_muc_details:
Intent intent = new Intent(this,

View file

@ -362,14 +362,7 @@ public class ConversationFragment extends Fragment {
}
}
} else {
Contact contact = message.getConversation()
.getContact();
if (contact.showInRoster()) {
activity.switchToContactDetails(contact);
} else {
activity.showAddToRosterDialog(message
.getConversation());
}
activity.switchToContactDetails(message.getContact());
}
} else {
Account account = message.getConversation().getAccount();

View file

@ -438,9 +438,12 @@ public abstract class XmppActivity extends Activity {
}
protected void showAddToRosterDialog(final Conversation conversation) {
final Jid jid = conversation.getJid();
showAddToRosterDialog(conversation.getContact());
}
protected void showAddToRosterDialog(final Contact contact) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle(jid.toString());
builder.setTitle(contact.getJid().toString());
builder.setMessage(getString(R.string.not_in_roster));
builder.setNegativeButton(getString(R.string.cancel), null);
builder.setPositiveButton(getString(R.string.add_contact),
@ -448,11 +451,10 @@ public abstract class XmppActivity extends Activity {
@Override
public void onClick(DialogInterface dialog, int which) {
final Jid jid = conversation.getJid();
Account account = conversation.getAccount();
final Jid jid = contact.getJid();
Account account = contact.getAccount();
Contact contact = account.getRoster().getContact(jid);
xmppConnectionService.createContact(contact);
switchToContactDetails(contact);
}
});
builder.create().show();

View file

@ -65,6 +65,13 @@
android:textSize="?attr/TextSizeBody" />
</LinearLayout>
<Button
android:id="@+id/add_contact_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="8dp"
android:text="@string/add_contact"/>
<CheckBox
android:id="@+id/details_send_presence"
android:layout_width="wrap_content"

View file

@ -56,18 +56,6 @@
android:showAsAction="never"
android:title="@string/enable_notifications"/>
<item
android:id="@+id/action_block"
android:orderInCategory="72"
android:showAsAction="never"
android:title="@string/action_block_contact"/>
<item
android:id="@+id/action_unblock"
android:orderInCategory="73"
android:showAsAction="never"
android:title="@string/action_unblock_contact"/>
<item
android:id="@+id/action_accounts"
android:orderInCategory="90"