always allow access to contact details. provide add button in contact details
This commit is contained in:
		
							parent
							
								
									764ef3c8cd
								
							
						
					
					
						commit
						be9af442ef
					
				| 
						 | 
				
			
			@ -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() + " ("
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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();
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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"
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue