From 58ec5ced8a41b7720f74b801e413d16880eaca2c Mon Sep 17 00:00:00 2001 From: Daniel Gultsch Date: Sat, 17 Feb 2018 18:58:56 +0100 Subject: [PATCH] use data binder for contact details activity --- build.gradle | 4 + .../ui/ContactDetailsActivity.java | 151 +++++----- .../res/layout/activity_contact_details.xml | 263 +++++++++--------- 3 files changed, 201 insertions(+), 217 deletions(-) diff --git a/build.gradle b/build.gradle index 2242a5a74..14bf60867 100644 --- a/build.gradle +++ b/build.gradle @@ -75,6 +75,10 @@ android { applicationId "eu.siacs.conversations" } + dataBinding { + enabled true + } + dexOptions { // Skip pre-dexing when running on Travis CI or when disabled via -Dpre-dex=false. preDexLibraries = preDexEnabled && !travisBuild diff --git a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java index eb1435626..5867356e7 100644 --- a/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java +++ b/src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java @@ -1,5 +1,6 @@ package eu.siacs.conversations.ui; +import android.databinding.DataBindingUtil; import android.support.v7.app.AlertDialog; import android.content.Context; import android.content.DialogInterface; @@ -12,19 +13,14 @@ import android.provider.ContactsContract.CommonDataKinds; import android.provider.ContactsContract.Contacts; import android.provider.ContactsContract.Intents; import android.support.v4.content.ContextCompat; -import android.support.v7.widget.CardView; import android.view.LayoutInflater; 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; import android.widget.ImageButton; -import android.widget.LinearLayout; -import android.widget.QuickContactBadge; import android.widget.TextView; import android.widget.Toast; @@ -39,6 +35,7 @@ import eu.siacs.conversations.R; import eu.siacs.conversations.crypto.axolotl.AxolotlService; import eu.siacs.conversations.crypto.axolotl.FingerprintStatus; import eu.siacs.conversations.crypto.axolotl.XmppAxolotlSession; +import eu.siacs.conversations.databinding.ActivityContactDetailsBinding; import eu.siacs.conversations.entities.Account; import eu.siacs.conversations.entities.Contact; import eu.siacs.conversations.entities.ListItem; @@ -104,20 +101,11 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp } } }; + + ActivityContactDetailsBinding binding; + private Jid accountJid; - private TextView lastseen; private Jid contactJid; - private TextView contactJidTv; - private TextView accountJidTv; - private TextView statusMessage; - private CheckBox send; - private CheckBox receive; - private Button addContactButton; - private Button mShowInactiveDevicesButton; - private QuickContactBadge badge; - private LinearLayout keys; - private CardView keysWrapper; - private FlowLayout tags; private boolean showDynamicTags = false; private boolean showLastSeen = false; private boolean showInactiveOmemo = false; @@ -205,26 +193,13 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp } } this.messageFingerprint = getIntent().getStringExtra("fingerprint"); - setContentView(R.layout.activity_contact_details); + this.binding = DataBindingUtil.setContentView(this, R.layout.activity_contact_details); - contactJidTv = findViewById(R.id.details_contactjid); - accountJidTv = findViewById(R.id.details_account); - lastseen = findViewById(R.id.details_lastseen); - statusMessage = findViewById(R.id.status_message); - send = findViewById(R.id.details_send_presence); - receive = findViewById(R.id.details_receive_presence); - badge = findViewById(R.id.details_contact_badge); - addContactButton = findViewById(R.id.add_contact_button); - addContactButton.setOnClickListener(view -> showAddToRosterDialog(contact)); - keys = findViewById(R.id.details_contact_keys); - keysWrapper = findViewById(R.id.keys_wrapper); - tags = findViewById(R.id.tags); - mShowInactiveDevicesButton = findViewById(R.id.show_inactive_devices); if (getSupportActionBar() != null) { getSupportActionBar().setHomeButtonEnabled(true); getSupportActionBar().setDisplayHomeAsUpEnabled(true); } - mShowInactiveDevicesButton.setOnClickListener(v -> { + binding.showInactiveDevices.setOnClickListener(v -> { showInactiveOmemo = !showInactiveOmemo; populateView(); }); @@ -336,18 +311,18 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp invalidateOptionsMenu(); setTitle(contact.getDisplayName()); if (contact.showInRoster()) { - send.setVisibility(View.VISIBLE); - receive.setVisibility(View.VISIBLE); - addContactButton.setVisibility(View.GONE); - send.setOnCheckedChangeListener(null); - receive.setOnCheckedChangeListener(null); + binding.detailsSendPresence.setVisibility(View.VISIBLE); + binding.detailsReceivePresence.setVisibility(View.VISIBLE); + binding.addContactButton.setVisibility(View.GONE); + binding.detailsSendPresence.setOnCheckedChangeListener(null); + binding.detailsReceivePresence.setOnCheckedChangeListener(null); List statusMessages = contact.getPresences().getStatusMessages(); if (statusMessages.size() == 0) { - statusMessage.setVisibility(View.GONE); + binding.statusMessage.setVisibility(View.GONE); } else { StringBuilder builder = new StringBuilder(); - statusMessage.setVisibility(View.VISIBLE); + binding.statusMessage.setVisibility(View.VISIBLE); int s = statusMessages.size(); for(int i = 0; i < s; ++i) { if (s > 1) { @@ -358,69 +333,69 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp builder.append("\n"); } } - statusMessage.setText(builder); + binding.statusMessage.setText(builder); } if (contact.getOption(Contact.Options.FROM)) { - send.setText(R.string.send_presence_updates); - send.setChecked(true); + binding.detailsSendPresence.setText(R.string.send_presence_updates); + binding.detailsSendPresence.setChecked(true); } else if (contact.getOption(Contact.Options.PENDING_SUBSCRIPTION_REQUEST)) { - send.setChecked(false); - send.setText(R.string.send_presence_updates); + binding.detailsSendPresence.setChecked(false); + binding.detailsSendPresence.setText(R.string.send_presence_updates); } else { - send.setText(R.string.preemptively_grant); + binding.detailsSendPresence.setText(R.string.preemptively_grant); if (contact.getOption(Contact.Options.PREEMPTIVE_GRANT)) { - send.setChecked(true); + binding.detailsSendPresence.setChecked(true); } else { - send.setChecked(false); + binding.detailsSendPresence.setChecked(false); } } if (contact.getOption(Contact.Options.TO)) { - receive.setText(R.string.receive_presence_updates); - receive.setChecked(true); + binding.detailsReceivePresence.setText(R.string.receive_presence_updates); + binding.detailsReceivePresence.setChecked(true); } else { - receive.setText(R.string.ask_for_presence_updates); + binding.detailsReceivePresence.setText(R.string.ask_for_presence_updates); if (contact.getOption(Contact.Options.ASKING)) { - receive.setChecked(true); + binding.detailsReceivePresence.setChecked(true); } else { - receive.setChecked(false); + binding.detailsReceivePresence.setChecked(false); } } if (contact.getAccount().isOnlineAndConnected()) { - receive.setEnabled(true); - send.setEnabled(true); + binding.detailsReceivePresence.setEnabled(true); + binding.detailsSendPresence.setEnabled(true); } else { - receive.setEnabled(false); - send.setEnabled(false); + binding.detailsReceivePresence.setEnabled(false); + binding.detailsSendPresence.setEnabled(false); } - send.setOnCheckedChangeListener(this.mOnSendCheckedChange); - receive.setOnCheckedChangeListener(this.mOnReceiveCheckedChange); + binding.detailsSendPresence.setOnCheckedChangeListener(this.mOnSendCheckedChange); + binding.detailsReceivePresence.setOnCheckedChangeListener(this.mOnReceiveCheckedChange); } else { - addContactButton.setVisibility(View.VISIBLE); - send.setVisibility(View.GONE); - receive.setVisibility(View.GONE); - statusMessage.setVisibility(View.GONE); + binding.addContactButton.setVisibility(View.VISIBLE); + binding.detailsSendPresence.setVisibility(View.GONE); + binding.detailsReceivePresence.setVisibility(View.GONE); + binding.statusMessage.setVisibility(View.GONE); } if (contact.isBlocked() && !this.showDynamicTags) { - lastseen.setVisibility(View.VISIBLE); - lastseen.setText(R.string.contact_blocked); + binding.detailsLastseen.setVisibility(View.VISIBLE); + binding.detailsLastseen.setText(R.string.contact_blocked); } else { if (showLastSeen && contact.getLastseen() > 0 && contact.getPresences().allOrNonSupport(Namespace.IDLE)) { - lastseen.setVisibility(View.VISIBLE); - lastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen())); + binding.detailsLastseen.setVisibility(View.VISIBLE); + binding.detailsLastseen.setText(UIHelper.lastseen(getApplicationContext(), contact.isActive(), contact.getLastseen())); } else { - lastseen.setVisibility(View.GONE); + binding.detailsLastseen.setVisibility(View.GONE); } } if (contact.getPresences().size() > 1) { - contactJidTv.setText(contact.getDisplayJid() + " (" + binding.detailsContactjid.setText(contact.getDisplayJid() + " (" + contact.getPresences().size() + ")"); } else { - contactJidTv.setText(contact.getDisplayJid()); + binding.detailsContactjid.setText(contact.getDisplayJid()); } String account; if (Config.DOMAIN_LOCK != null) { @@ -428,17 +403,17 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp } else { account = contact.getAccount().getJid().toBareJid().toString(); } - accountJidTv.setText(getString(R.string.using_account, account)); - badge.setImageBitmap(avatarService().get(contact, getPixel(72))); - badge.setOnClickListener(this.onBadgeClick); + binding.detailsAccount.setText(getString(R.string.using_account, account)); + binding.detailsContactBadge.setImageBitmap(avatarService().get(contact, getPixel(72))); + binding.detailsContactBadge.setOnClickListener(this.onBadgeClick); - keys.removeAllViews(); + binding.detailsContactKeys.removeAllViews(); boolean hasKeys = false; LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); if (Config.supportOtr()) { for (final String otrFingerprint : contact.getOtrFingerprints()) { hasKeys = true; - View view = inflater.inflate(R.layout.contact_key, keys, false); + View view = inflater.inflate(R.layout.contact_key, binding.detailsContactKeys, false); TextView key = (TextView) view.findViewById(R.id.key); TextView keyType = (TextView) view.findViewById(R.id.key_type); ImageButton removeButton = (ImageButton) view @@ -451,7 +426,7 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp } else { keyType.setText(R.string.otr_fingerprint); } - keys.addView(view); + binding.detailsContactKeys.addView(view); removeButton.setOnClickListener(new OnClickListener() { @Override @@ -478,21 +453,21 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp } if (!trust.isCompromised()) { boolean highlight = session.getFingerprint().equals(messageFingerprint); - addFingerprintRow(keys, session, highlight); + addFingerprintRow(binding.detailsContactKeys, session, highlight); } } if (showsInactive || skippedInactive) { - mShowInactiveDevicesButton.setText(showsInactive ? R.string.hide_inactive_devices : R.string.show_inactive_devices); - mShowInactiveDevicesButton.setVisibility(View.VISIBLE); + binding.showInactiveDevices.setText(showsInactive ? R.string.hide_inactive_devices : R.string.show_inactive_devices); + binding.showInactiveDevices.setVisibility(View.VISIBLE); } else { - mShowInactiveDevicesButton.setVisibility(View.GONE); + binding.showInactiveDevices.setVisibility(View.GONE); } } else { - mShowInactiveDevicesButton.setVisibility(View.GONE); + binding.showInactiveDevices.setVisibility(View.GONE); } if (Config.supportOpenPgp() && contact.getPgpKeyId() != 0) { hasKeys = true; - View view = inflater.inflate(R.layout.contact_key, keys, false); + View view = inflater.inflate(R.layout.contact_key, binding.detailsContactKeys, false); TextView key = (TextView) view.findViewById(R.id.key); TextView keyType = (TextView) view.findViewById(R.id.key_type); keyType.setText(R.string.openpgp_key_id); @@ -510,21 +485,21 @@ public class ContactDetailsActivity extends OmemoActivity implements OnAccountUp view.setOnClickListener(openKey); key.setOnClickListener(openKey); keyType.setOnClickListener(openKey); - keys.addView(view); + binding.detailsContactKeys.addView(view); } - keysWrapper.setVisibility(hasKeys ? View.VISIBLE : View.GONE); + binding.keysWrapper.setVisibility(hasKeys ? View.VISIBLE : View.GONE); List tagList = contact.getTags(this); if (tagList.size() == 0 || !this.showDynamicTags) { - tags.setVisibility(View.GONE); + binding.tags.setVisibility(View.GONE); } else { - tags.setVisibility(View.VISIBLE); - tags.removeAllViewsInLayout(); + binding.tags.setVisibility(View.VISIBLE); + binding.tags.removeAllViewsInLayout(); for(final ListItem.Tag tag : tagList) { - final TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag,tags,false); + final TextView tv = (TextView) inflater.inflate(R.layout.list_item_tag,binding.tags,false); tv.setText(tag.getName()); tv.setBackgroundColor(tag.getColor()); - tags.addView(tv); + binding.tags.addView(tv); } } } diff --git a/src/main/res/layout/activity_contact_details.xml b/src/main/res/layout/activity_contact_details.xml index d6fea88d8..f0cc0251d 100644 --- a/src/main/res/layout/activity_contact_details.xml +++ b/src/main/res/layout/activity_contact_details.xml @@ -1,150 +1,155 @@ - + - + android:layout_height="fill_parent" + android:background="?attr/color_background_secondary"> - + android:orientation="vertical"> - + android:layout_marginBottom="@dimen/activity_vertical_margin" + android:layout_marginLeft="@dimen/activity_horizontal_margin" + android:layout_marginRight="@dimen/activity_horizontal_margin" + android:layout_marginTop="@dimen/activity_vertical_margin"> - + + + + + + + + + + + + + + + +