use data binder for contact details activity

Daniel Gultsch created

Change summary

build.gradle                                                        |   4 
src/main/java/eu/siacs/conversations/ui/ContactDetailsActivity.java | 153 
src/main/res/layout/activity_contact_details.xml                    | 251 
3 files changed, 196 insertions(+), 212 deletions(-)

Detailed changes

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

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);
-
-		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);
+		this.binding = DataBindingUtil.setContentView(this, R.layout.activity_contact_details);
+
 		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<String> 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<ListItem.Tag> 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);
 			}
 		}
 	}

src/main/res/layout/activity_contact_details.xml 🔗

@@ -1,150 +1,155 @@
 <?xml version="1.0" encoding="utf-8"?>
-<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
-            android:layout_width="fill_parent"
-            android:layout_height="fill_parent"
-            android:background="?attr/color_background_secondary">
+<layout xmlns:android="http://schemas.android.com/apk/res/android"
+        xmlns:app="http://schemas.android.com/apk/res-auto"
+        xmlns:tools="http://schemas.android.com/tools">
 
-    <LinearLayout
-        android:id="@+id/details_main_layout"
+    <ScrollView
         android:layout_width="fill_parent"
-        android:layout_height="wrap_content"
-        android:orientation="vertical">
+        android:layout_height="fill_parent"
+        android:background="?attr/color_background_secondary">
 
-        <android.support.v7.widget.CardView
-            android:layout_width="match_parent"
+        <LinearLayout
+            android:id="@+id/details_main_layout"
+            android:layout_width="fill_parent"
             android:layout_height="wrap_content"
-            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">
+            android:orientation="vertical">
 
-            <RelativeLayout
+            <android.support.v7.widget.CardView
                 android:layout_width="match_parent"
                 android:layout_height="wrap_content"
-                android:padding="@dimen/infocard_padding">
-
-                <QuickContactBadge
-                    android:id="@+id/details_contact_badge"
-                    android:layout_width="72dp"
-                    android:layout_height="72dp"
-                    android:layout_alignParentTop="true"
-                    android:scaleType="centerCrop"/>
+                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">
 
-                <LinearLayout
-                    android:id="@+id/details_jidbox"
-                    android:layout_width="wrap_content"
+                <RelativeLayout
+                    android:layout_width="match_parent"
                     android:layout_height="wrap_content"
-                    android:layout_marginLeft="16dp"
-                    android:layout_toRightOf="@+id/details_contact_badge"
-                    android:orientation="vertical">
+                    android:padding="@dimen/infocard_padding">
 
-                    <TextView
-                        android:id="@+id/details_contactjid"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:text="@string/account_settings_example_jabber_id"
-                        android:textColor="?attr/color_text_primary"
-                        android:textSize="?attr/TextSizeHeadline"
-                        android:textStyle="bold"/>
-
-                    <com.wefika.flowlayout.FlowLayout
-                        android:id="@+id/tags"
-                        android:layout_width="wrap_content"
-                        android:layout_height="wrap_content"
-                        android:layout_marginBottom="4dp"
-                        android:layout_marginLeft="-2dp"
-                        android:layout_marginTop="4dp"
-                        android:orientation="horizontal">
-                    </com.wefika.flowlayout.FlowLayout>
+                    <QuickContactBadge
+                        android:id="@+id/details_contact_badge"
+                        android:layout_width="72dp"
+                        android:layout_height="72dp"
+                        android:layout_alignParentTop="true"
+                        android:scaleType="centerCrop"/>
 
-                    <TextView
-                        android:id="@+id/details_lastseen"
+                    <LinearLayout
+                        android:id="@+id/details_jidbox"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:layout_marginTop="4dp"
-                        android:textColor="?attr/color_text_primary"
-                        android:textSize="?attr/TextSizeBody"/>
+                        android:layout_marginLeft="16dp"
+                        android:layout_toRightOf="@+id/details_contact_badge"
+                        android:orientation="vertical">
+
+                        <TextView
+                            android:id="@+id/details_contactjid"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="@string/account_settings_example_jabber_id"
+                            android:textColor="?attr/color_text_primary"
+                            android:textSize="?attr/TextSizeHeadline"
+                            android:textStyle="bold"/>
+
+                        <com.wefika.flowlayout.FlowLayout
+                            android:id="@+id/tags"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginBottom="4dp"
+                            android:layout_marginLeft="-2dp"
+                            android:layout_marginTop="4dp"
+                            android:orientation="horizontal">
+                        </com.wefika.flowlayout.FlowLayout>
+
+                        <TextView
+                            android:id="@+id/details_lastseen"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="4dp"
+                            android:textColor="?attr/color_text_primary"
+                            android:textSize="?attr/TextSizeBody"/>
+
+                        <TextView
+                            android:id="@+id/status_message"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="8dp"
+                            android:textColor="?attr/color_text_secondary"
+                            android:textSize="?attr/TextSizeBody"
+                            android:textStyle="italic"/>
+
+                        <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"
+                            android:layout_height="wrap_content"
+                            android:layout_marginTop="8dp"
+                            android:text="@string/send_presence_updates"
+                            android:textColor="?attr/color_text_primary"
+                            android:textSize="?attr/TextSizeBody"/>
+
+                        <CheckBox
+                            android:id="@+id/details_receive_presence"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="@string/receive_presence_updates"
+                            android:textColor="?attr/color_text_primary"
+                            android:textSize="?attr/TextSizeBody"/>
+                    </LinearLayout>
 
                     <TextView
-                        android:id="@+id/status_message"
+                        android:id="@+id/details_account"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:layout_marginTop="8dp"
+                        android:layout_alignParentRight="true"
+                        android:layout_below="@+id/details_jidbox"
+                        android:layout_marginTop="32dp"
+                        android:text="@string/using_account"
                         android:textColor="?attr/color_text_secondary"
-                        android:textSize="?attr/TextSizeBody"
-                        android:textStyle="italic"/>
+                        android:textSize="?attr/TextSizeInfo"/>
+                </RelativeLayout>
+            </android.support.v7.widget.CardView>
 
-                    <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"/>
+            <android.support.v7.widget.CardView
+                android:id="@+id/keys_wrapper"
+                android:layout_width="fill_parent"
+                android:layout_height="wrap_content"
+                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">
 
-                    <CheckBox
-                        android:id="@+id/details_send_presence"
-                        android:layout_width="wrap_content"
+                <LinearLayout
+                    android:layout_width="match_parent"
+                    android:layout_height="wrap_content"
+                    android:orientation="vertical"
+                    android:padding="@dimen/infocard_padding">
+
+                    <LinearLayout
+                        android:id="@+id/details_contact_keys"
+                        android:layout_width="fill_parent"
                         android:layout_height="wrap_content"
-                        android:layout_marginTop="8dp"
-                        android:text="@string/send_presence_updates"
-                        android:textColor="?attr/color_text_primary"
-                        android:textSize="?attr/TextSizeBody"/>
+                        android:orientation="vertical">
+                    </LinearLayout>
 
-                    <CheckBox
-                        android:id="@+id/details_receive_presence"
+                    <Button
+                        android:id="@+id/show_inactive_devices"
+                        style="?android:attr/borderlessButtonStyle"
                         android:layout_width="wrap_content"
                         android:layout_height="wrap_content"
-                        android:text="@string/receive_presence_updates"
-                        android:textColor="?attr/color_text_primary"
-                        android:textSize="?attr/TextSizeBody"/>
-                </LinearLayout>
-
-                <TextView
-                    android:id="@+id/details_account"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_alignParentRight="true"
-                    android:layout_below="@+id/details_jidbox"
-                    android:layout_marginTop="32dp"
-                    android:text="@string/using_account"
-                    android:textColor="?attr/color_text_secondary"
-                    android:textSize="?attr/TextSizeInfo"/>
-            </RelativeLayout>
-        </android.support.v7.widget.CardView>
-
-        <android.support.v7.widget.CardView
-            android:id="@+id/keys_wrapper"
-            android:layout_width="fill_parent"
-            android:layout_height="wrap_content"
-            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">
-
-            <LinearLayout
-                android:layout_width="match_parent"
-                android:layout_height="wrap_content"
-                android:orientation="vertical"
-                android:padding="@dimen/infocard_padding">
-
-                <LinearLayout
-                    android:id="@+id/details_contact_keys"
-                    android:layout_width="fill_parent"
-                    android:layout_height="wrap_content"
-                    android:orientation="vertical">
+                        android:layout_gravity="center_horizontal"
+                        android:layout_marginTop="8dp"
+                        android:text="@string/show_inactive_devices"
+                        android:textColor="@color/accent"/>
                 </LinearLayout>
+            </android.support.v7.widget.CardView>
+        </LinearLayout>
 
-                <Button
-                    android:id="@+id/show_inactive_devices"
-                    style="?android:attr/borderlessButtonStyle"
-                    android:layout_width="wrap_content"
-                    android:layout_height="wrap_content"
-                    android:layout_gravity="center_horizontal"
-                    android:layout_marginTop="8dp"
-                    android:text="@string/show_inactive_devices"
-                    android:textColor="@color/accent"/>
-            </LinearLayout>
-        </android.support.v7.widget.CardView>
-    </LinearLayout>
-
-</ScrollView>
+    </ScrollView>
+</layout>