diff --git a/app/src/main/java/net/named_data/nfd/DrawerFragment.java b/app/src/main/java/net/named_data/nfd/DrawerFragment.java
index 60144a0..79dfce9 100644
--- a/app/src/main/java/net/named_data/nfd/DrawerFragment.java
+++ b/app/src/main/java/net/named_data/nfd/DrawerFragment.java
@@ -1,18 +1,18 @@
 /* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2015-2017 Regents of the University of California
- *
+ * <p/>
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
- *
+ * <p/>
  * NFD Android is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
- *
+ * <p/>
  * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * <p/>
  * You should have received a copy of the GNU General Public License along with
  * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -23,13 +23,14 @@
 import android.content.Context;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
-import android.content.res.Resources;
 import android.os.Bundle;
 import android.os.Parcel;
 import android.os.Parcelable;
 import android.preference.PreferenceManager;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
+import android.support.v4.content.ContextCompat;
 import android.support.v4.widget.DrawerLayout;
 import android.support.v4.widget.ViewDragHelper;
 import android.support.v7.app.ActionBar;
@@ -64,6 +65,7 @@
     return fragment;
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public void onAttach(Activity activity) {
     super.onAttach(activity);
@@ -167,7 +169,7 @@
         // Allow update calls to onCreateOptionsMenu() and
         // onPrepareOptionsMenu() to update Menu UI.
         m_shouldHideOptionsMenu = false;
-        getActivity().supportInvalidateOptionsMenu();
+        getActivity().invalidateOptionsMenu();
       }
 
       @Override
@@ -188,7 +190,7 @@
         // Allow update calls to onCreateOptionsMenu() and
         // onPrepareOptionsMenu() to update Menu UI
         m_shouldHideOptionsMenu = true;
-        getActivity().supportInvalidateOptionsMenu();
+        getActivity().invalidateOptionsMenu();
       }
 
       @Override
@@ -197,12 +199,12 @@
         if (newState != ViewDragHelper.STATE_IDLE) {
           // opened/closed is handled by onDrawerOpened and onDrawerClosed callbacks
           m_shouldHideOptionsMenu = true;
-          getActivity().supportInvalidateOptionsMenu();
-        } else if (newState == ViewDragHelper.STATE_IDLE && !isDrawerOpen()) {
+          getActivity().invalidateOptionsMenu();
+        } else if (!isDrawerOpen()) {
           // This condition takes care of the case of displaying the option menu
           // items when the drawer is retracted prematurely.
           m_shouldHideOptionsMenu = false;
-          getActivity().supportInvalidateOptionsMenu();
+          getActivity().invalidateOptionsMenu();
         }
       }
     };
@@ -221,7 +223,7 @@
       }
     });
 
-    m_drawerLayout.setDrawerListener(m_drawerToggle);
+    m_drawerLayout.addDrawerListener(m_drawerToggle);
   }
 
   @Override
@@ -370,24 +372,23 @@
       }
     };
 
-    public
     DrawerItem(int itemNameId, int resIconId, int itemCode) {
       m_itemNameId = itemNameId;
       m_iconResId = resIconId;
       m_itemCode = itemCode;
     }
 
-    public int
+    int
     getItemName() {
       return m_itemNameId;
     }
 
-    public int
+    int
     getIconResId() {
       return m_iconResId;
     }
 
-    public int
+    int
     getItemCode() {
       return m_itemCode;
     }
@@ -411,35 +412,37 @@
    */
   private static class DrawerListAdapter extends ArrayAdapter<DrawerItem> {
 
-    public DrawerListAdapter(Context context, ArrayList<DrawerItem> drawerItems) {
+    DrawerListAdapter(Context context, ArrayList<DrawerItem> drawerItems) {
       super(context, 0, drawerItems);
       m_layoutInflater =
           (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
-      m_resources = context.getResources();
+      m_context = context;
     }
 
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
+    @Override @NonNull
+    public View getView(int position, View convertView, @NonNull ViewGroup  parent) {
       DrawerItemHolder holder;
 
       if (convertView == null) {
         holder = new DrawerItemHolder();
 
-        convertView = m_layoutInflater.inflate(R.layout.list_item_drawer_item, null);
+        convertView = m_layoutInflater.inflate(R.layout.list_item_drawer_item, parent, false);
         convertView.setTag(holder);
 
-        holder.m_icon = (ImageView) convertView.findViewById(R.id.drawer_item_icon);
-        holder.m_text = (TextView) convertView.findViewById(R.id.drawer_item_text);
+        holder.m_icon = convertView.findViewById(R.id.drawer_item_icon);
+        holder.m_text = convertView.findViewById(R.id.drawer_item_text);
       } else {
         holder = (DrawerItemHolder)convertView.getTag();
       }
 
       // Update items in holder
       DrawerItem item = getItem(position);
-      if (item.getIconResId() != 0) {
-        holder.m_icon.setImageDrawable(m_resources.getDrawable(item.getIconResId()));
+      if (item != null) {
+        if (item.getIconResId() != 0) {
+          holder.m_icon.setImageDrawable(ContextCompat.getDrawable(m_context, item.getIconResId()));
+        }
+        holder.m_text.setText(item.getItemName());
       }
-      holder.m_text.setText(item.getItemName());
 
       return convertView;
     }
@@ -453,13 +456,13 @@
     private final LayoutInflater m_layoutInflater;
 
     /** Reference to get context's resources */
-    private final Resources m_resources;
+    private final Context m_context;
   }
 
   //////////////////////////////////////////////////////////////////////////////
 
   /** Callback that host activity must implement */
-  public static interface DrawerCallbacks {
+  public interface DrawerCallbacks {
     /** Callback to host activity when a drawer item is selected */
     void onDrawerItemSelected(int itemCode, int itemNameId);
   }
diff --git a/app/src/main/java/net/named_data/nfd/FaceListFragment.java b/app/src/main/java/net/named_data/nfd/FaceListFragment.java
index 022ec32..a8faa90 100644
--- a/app/src/main/java/net/named_data/nfd/FaceListFragment.java
+++ b/app/src/main/java/net/named_data/nfd/FaceListFragment.java
@@ -1,18 +1,18 @@
 /* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2015-2017 Regents of the University of California
- *
+ * <p/>
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
- *
+ * <p/>
  * NFD Android is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
- *
+ * <p/>
  * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * <p/>
  * You should have received a copy of the GNU General Public License along with
  * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -27,6 +27,7 @@
 import android.os.Handler;
 import android.support.annotation.Nullable;
 import android.support.v4.app.ListFragment;
+import android.support.v4.content.ContextCompat;
 import android.util.Pair;
 import android.util.SparseArray;
 import android.view.ActionMode;
@@ -75,17 +76,15 @@
   {
     super.onViewCreated(view, savedInstanceState);
 
-    @SuppressLint("InflateParams")
-    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_face_list_list_header, null);
+    View v = getLayoutInflater().inflate(R.layout.fragment_face_list_list_header, getListView(), false);
     getListView().addHeaderView(v, null, false);
-    getListView().setDivider(getResources().getDrawable(R.drawable.list_item_divider));
+    getListView().setDivider(ContextCompat.getDrawable(getContext(), R.drawable.list_item_divider));
 
     // Get info unavailable view
     m_faceListInfoUnavailableView = v.findViewById(R.id.face_list_info_unavailable);
 
     // Get progress bar spinner view
-    m_reloadingListProgressBar
-      = (ProgressBar)v.findViewById(R.id.face_list_reloading_list_progress_bar);
+    m_reloadingListProgressBar = v.findViewById(R.id.face_list_reloading_list_progress_bar);
 
     // Setup list view for deletion
     ListView listView = getListView();
@@ -209,6 +208,7 @@
     }
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public void onAttach(Activity activity) {
     super.onAttach(activity);
diff --git a/app/src/main/java/net/named_data/nfd/FaceStatusFragment.java b/app/src/main/java/net/named_data/nfd/FaceStatusFragment.java
index f37a455..143ed58 100644
--- a/app/src/main/java/net/named_data/nfd/FaceStatusFragment.java
+++ b/app/src/main/java/net/named_data/nfd/FaceStatusFragment.java
@@ -1,30 +1,31 @@
 /* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2015 Regents of the University of California
- *
+/*
+ * Copyright (c) 2015-2017 Regents of the University of California
+ * <p/>
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
- *
+ * <p/>
  * NFD Android is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
- *
+ * <p/>
  * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * <p/>
  * You should have received a copy of the GNU General Public License along with
  * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.named_data.nfd;
 
-import android.annotation.SuppressLint;
 import android.content.Context;
 import android.content.res.Resources;
 import android.os.Bundle;
+import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 import android.support.v4.app.ListFragment;
+import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
@@ -80,9 +81,9 @@
   {
     super.onViewCreated(view, savedInstanceState);
 
-    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_face_detail_list_header, null);
+    View v = getLayoutInflater().inflate(R.layout.fragment_face_detail_list_header, getListView(), false);
     getListView().addHeaderView(v, null, false);
-    getListView().setDivider(getResources().getDrawable(R.drawable.list_item_divider));
+    getListView().setDivider(ContextCompat.getDrawable(getContext(), R.drawable.list_item_divider));
   }
 
   @Override
@@ -91,7 +92,9 @@
     super.onActivityCreated(savedInstanceState);
 
     if (m_faceStatusAdapter == null) {
-      m_listItems = new ArrayList<>();
+      // List items to be displayed; Used when creating
+      // {@link net.named_data.nfd.FaceStatusFragment.FaceStatusAdapter}
+      ArrayList<ListItem> listItems = new ArrayList<>();
 
       Resources res = getResources();
       m_scopes = res.getStringArray(R.array.face_scopes);
@@ -102,31 +105,34 @@
       FaceStatus faceStatus = new FaceStatus();
       try {
         byte[] args = getArguments().getByteArray(EXTRA_FACE_INFORMATION);
+        if (args == null) {
+          throw new EncodingException("Not extra face in formation available");
+        }
         faceStatus.wireDecode(new Blob(args).buf());
       } catch (EncodingException e) {
         G.Log("EXTRA_FACE_INFORMATION: EncodingException: " + e);
       }
 
       // Creating list of items to be displayed
-      m_listItems.add(new ListItem(R.string.face_id, String.valueOf(faceStatus.getFaceId())));
-      m_listItems.add(new ListItem(R.string.local_face_uri, faceStatus.getLocalUri()));
-      m_listItems.add(new ListItem(R.string.remote_face_uri, faceStatus.getRemoteUri()));
-      m_listItems.add(new ListItem(R.string.expires_in, faceStatus.getExpirationPeriod() < 0 ?
+      listItems.add(new ListItem(R.string.face_id, String.valueOf(faceStatus.getFaceId())));
+      listItems.add(new ListItem(R.string.local_face_uri, faceStatus.getLocalUri()));
+      listItems.add(new ListItem(R.string.remote_face_uri, faceStatus.getRemoteUri()));
+      listItems.add(new ListItem(R.string.expires_in, faceStatus.getExpirationPeriod() < 0 ?
         getString(R.string.expire_never) :
         PeriodFormat.getDefault().print(new Period(faceStatus.getExpirationPeriod()))));
-      m_listItems.add(new ListItem(R.string.face_scope, getScope(faceStatus.getFaceScope())));
-      m_listItems.add(new ListItem(R.string.face_persistency, getPersistency(faceStatus.getFacePersistency())));
-      m_listItems.add(new ListItem(R.string.link_type, getLinkType(faceStatus.getLinkType())));
-      m_listItems.add(new ListItem(R.string.in_interests, String.valueOf(
+      listItems.add(new ListItem(R.string.face_scope, getScope(faceStatus.getFaceScope())));
+      listItems.add(new ListItem(R.string.face_persistency, getPersistency(faceStatus.getFacePersistency())));
+      listItems.add(new ListItem(R.string.link_type, getLinkType(faceStatus.getLinkType())));
+      listItems.add(new ListItem(R.string.in_interests, String.valueOf(
         faceStatus.getNInInterests())));
-      m_listItems.add(new ListItem(R.string.in_data, String.valueOf(faceStatus.getNInDatas())));
-      m_listItems.add(new ListItem(R.string.out_interests, String.valueOf(
+      listItems.add(new ListItem(R.string.in_data, String.valueOf(faceStatus.getNInDatas())));
+      listItems.add(new ListItem(R.string.out_interests, String.valueOf(
         faceStatus.getNOutInterests())));
-      m_listItems.add(new ListItem(R.string.out_data, String.valueOf(faceStatus.getNOutDatas())));
-      m_listItems.add(new ListItem(R.string.in_bytes, String.valueOf(faceStatus.getNInBytes())));
-      m_listItems.add(new ListItem(R.string.out_bytes, String.valueOf(faceStatus.getNOutBytes())));
+      listItems.add(new ListItem(R.string.out_data, String.valueOf(faceStatus.getNOutDatas())));
+      listItems.add(new ListItem(R.string.in_bytes, String.valueOf(faceStatus.getNInBytes())));
+      listItems.add(new ListItem(R.string.out_bytes, String.valueOf(faceStatus.getNOutBytes())));
 
-      m_faceStatusAdapter = new FaceStatusAdapter(getActivity(), m_listItems);
+      m_faceStatusAdapter = new FaceStatusAdapter(getActivity(), listItems);
     }
     // setListAdapter must be called after addHeaderView.  Otherwise, there is an exception on some platforms.
     // http://stackoverflow.com/a/8141537/2150331
@@ -164,7 +170,7 @@
    * {@link net.named_data.nfd.FaceStatusFragment.FaceStatusAdapter}.
    */
   private static class ListItem {
-    public ListItem(int title, String value) {
+    ListItem(int title, String value) {
       m_title = title;
       m_value = value;
     }
@@ -198,25 +204,26 @@
       m_layoutInflater = LayoutInflater.from(context);
     }
 
-    @SuppressLint("InflateParams")
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
+    @Override @NonNull
+    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
       ListItemHolder holder;
       if (convertView == null) {
         holder = new ListItemHolder();
 
-        convertView = m_layoutInflater.inflate(R.layout.list_item_face_generic_item, null);
+        convertView = m_layoutInflater.inflate(R.layout.list_item_face_generic_item, parent, false);
         convertView.setTag(holder);
 
-        holder.m_title = (TextView)convertView.findViewById(R.id.list_item_generic_title);
-        holder.m_value = (TextView)convertView.findViewById(R.id.list_item_generic_value);
+        holder.m_title = convertView.findViewById(R.id.list_item_generic_title);
+        holder.m_value = convertView.findViewById(R.id.list_item_generic_value);
       } else {
         holder = (ListItemHolder)convertView.getTag();
       }
 
       ListItem info = getItem(position);
-      holder.m_title.setText(info.getTitle());
-      holder.m_value.setText(info.getValue());
+      if (info != null) {
+        holder.m_title.setText(info.getTitle());
+        holder.m_value.setText(info.getValue());
+      }
 
       return convertView;
     }
@@ -235,12 +242,6 @@
   private static final String EXTRA_FACE_INFORMATION
       = "net.named_data.nfd.face_detail_fragment_face_id";
 
-  /**
-   * List items to be displayed; Used when creating
-   * {@link net.named_data.nfd.FaceStatusFragment.FaceStatusAdapter}
-   */
-  private ArrayList<ListItem> m_listItems;
-
   /** Reference to custom {@link net.named_data.nfd.FaceStatusFragment.FaceStatusAdapter} */
   private FaceStatusAdapter m_faceStatusAdapter;
 
diff --git a/app/src/main/java/net/named_data/nfd/LogcatSettingsFragment.java b/app/src/main/java/net/named_data/nfd/LogcatSettingsFragment.java
index 7368c3a..1cb1b82 100644
--- a/app/src/main/java/net/named_data/nfd/LogcatSettingsFragment.java
+++ b/app/src/main/java/net/named_data/nfd/LogcatSettingsFragment.java
@@ -1,25 +1,24 @@
 /* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
- * Copyright (c) 2015 Regents of the University of California
- *
+/*
+ * Copyright (c) 2015-2017 Regents of the University of California
+ * <p/>
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
- *
+ * <p/>
  * NFD Android is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
- *
+ * <p/>
  * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- *
+ * <p/>
  * You should have received a copy of the GNU General Public License along with
  * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
 
 package net.named_data.nfd;
 
-import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.AlertDialog;
 import android.app.Dialog;
@@ -32,6 +31,7 @@
 import android.support.v4.app.DialogFragment;
 import android.support.v4.app.FragmentManager;
 import android.support.v4.app.ListFragment;
+import android.support.v4.content.ContextCompat;
 import android.view.LayoutInflater;
 import android.view.Menu;
 import android.view.MenuInflater;
@@ -62,9 +62,9 @@
   {
     super.onViewCreated(view, savedInstanceState);
 
-    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_logcat_tags_list_header, null);
+    View v = getLayoutInflater().inflate(R.layout.fragment_logcat_tags_list_header, getListView(), false);
     getListView().addHeaderView(v, null, false);
-    getListView().setDivider(getResources().getDrawable(R.drawable.list_item_divider));
+    getListView().setDivider(ContextCompat.getDrawable(getContext(), R.drawable.list_item_divider));
 
     // @TODO implement log item removal
     //    ListView listView = (ListView) v.findViewById(android.R.id.list);
@@ -222,31 +222,32 @@
    */
   private static class LogcatSettingsAdapter extends ArrayAdapter<LogcatSettingItem> {
 
-    public LogcatSettingsAdapter(Context context, ArrayList<LogcatSettingItem> objects) {
+    LogcatSettingsAdapter(Context context, ArrayList<LogcatSettingItem> objects) {
       super(context, 0, objects);
       m_layoutInflater = LayoutInflater.from(context);
     }
 
-    @SuppressLint("InflateParams")
-    @Override
-    public View getView(int position, View convertView, ViewGroup parent) {
+    @Override @NonNull
+    public View getView(int position, View convertView, @NonNull ViewGroup parent) {
       SettingItemHolder holder;
 
       if (convertView == null) {
         holder = new SettingItemHolder();
 
-        convertView = m_layoutInflater.inflate(R.layout.list_item_setting_item, null);
+        convertView = m_layoutInflater.inflate(R.layout.list_item_setting_item, parent, false);
         convertView.setTag(holder);
 
-        holder.m_logTag = (TextView) convertView.findViewById(R.id.list_item_log_tag);
-        holder.m_logLevel = (TextView) convertView.findViewById(R.id.list_item_setting_log_level);
+        holder.m_logTag = convertView.findViewById(R.id.list_item_log_tag);
+        holder.m_logLevel = convertView.findViewById(R.id.list_item_setting_log_level);
       } else {
         holder = (SettingItemHolder) convertView.getTag();
       }
 
       LogcatSettingItem item = getItem(position);
-      holder.m_logTag.setText(item.getLogTag());
-      holder.m_logLevel.setText(item.getLogLevel());
+      if (item != null) {
+        holder.m_logTag.setText(item.getLogTag());
+        holder.m_logLevel.setText(item.getLogLevel());
+      }
 
       return convertView;
     }
diff --git a/app/src/main/java/net/named_data/nfd/MainFragment.java b/app/src/main/java/net/named_data/nfd/MainFragment.java
index f7a6f2e..276c6e1 100644
--- a/app/src/main/java/net/named_data/nfd/MainFragment.java
+++ b/app/src/main/java/net/named_data/nfd/MainFragment.java
@@ -202,7 +202,8 @@
 
   private void
   startNfdService() {
-    assert m_isNfdServiceConnected;
+    if (BuildConfig.DEBUG && !m_isNfdServiceConnected)
+      throw new RuntimeException("Service must be connected at this point");
 
     m_nfdStartStopSwitch.setText(R.string.starting_nfd);
     sendNfdServiceMessage(NfdService.START_NFD_SERVICE);
@@ -210,7 +211,8 @@
 
   private void
   stopNfdService() {
-    assert m_isNfdServiceConnected;
+    if (BuildConfig.DEBUG && !m_isNfdServiceConnected)
+      throw new RuntimeException("Service must be connected at this point");
 
     m_nfdStartStopSwitch.setText(R.string.stopping_nfd);
     sendNfdServiceMessage(NfdService.STOP_NFD_SERVICE);
diff --git a/app/src/main/java/net/named_data/nfd/RouteInfoFragment.java b/app/src/main/java/net/named_data/nfd/RouteInfoFragment.java
index 4e77718..435ee88 100644
--- a/app/src/main/java/net/named_data/nfd/RouteInfoFragment.java
+++ b/app/src/main/java/net/named_data/nfd/RouteInfoFragment.java
@@ -1,3 +1,22 @@
+/* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2015-2017 Regents of the University of California
+ * <p/>
+ * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
+ * See AUTHORS.md for complete list of NFD Android authors and contributors.
+ * <p/>
+ * NFD Android is free software: you can redistribute it and/or modify it under the terms
+ * of the GNU General Public License as published by the Free Software Foundation,
+ * either version 3 of the License, or (at your option) any later version.
+ * <p/>
+ * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
+ * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+ * PURPOSE.  See the GNU General Public License for more details.
+ * <p/>
+ * You should have received a copy of the GNU General Public License along with
+ * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
 package net.named_data.nfd;
 
 import android.app.Activity;
@@ -7,6 +26,7 @@
 import android.support.annotation.Nullable;
 import android.support.v4.app.Fragment;
 import android.support.v4.app.ListFragment;
+import android.support.v4.content.ContextCompat;
 import android.util.Pair;
 import android.view.ActionMode;
 import android.view.LayoutInflater;
@@ -32,7 +52,6 @@
 import net.named_data.jndn.Name;
 import net.named_data.jndn.encoding.EncodingException;
 import net.named_data.jndn.util.Blob;
-import net.named_data.jndn_xx.util.FaceUri;
 import net.named_data.nfd.utils.G;
 import net.named_data.nfd.utils.NfdcHelper;
 
@@ -54,6 +73,7 @@
     return fragment;
   }
 
+  @SuppressWarnings("deprecation")
   @Override
   public void onAttach(Activity activity)
   {
@@ -72,7 +92,13 @@
 
     m_ribEntry = new RibEntry();
     try {
-      m_ribEntry.wireDecode(new Blob(getArguments().getByteArray(ROUTE_INFORMATION)).buf());
+      byte[] data = getArguments().getByteArray(ROUTE_INFORMATION);
+      if (data != null) {
+        m_ribEntry.wireDecode(new Blob(data).buf());
+      }
+      else {
+        throw new EncodingException("No route information data");
+      }
     }
     catch (EncodingException e) {
       G.Log("ROUTE_INFORMATION: EncodingException: " + e);
@@ -83,15 +109,15 @@
   public void onViewCreated(View view, Bundle savedInstanceState)
   {
     super.onViewCreated(view, savedInstanceState);
-    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_route_detail_list_header, null);
+    View v = getLayoutInflater().inflate(R.layout.fragment_route_detail_list_header, getListView(), false);
     getListView().addHeaderView(v, null, false);
-    getListView().setDivider(getResources().getDrawable(R.drawable.list_item_divider));
+    getListView().setDivider(ContextCompat.getDrawable(getContext(), R.drawable.list_item_divider));
 
-    TextView prefix = (TextView)v.findViewById(R.id.route_detail_prefix);
+    TextView prefix = v.findViewById(R.id.route_detail_prefix);
     prefix.setText(m_ribEntry.getName().toUri());
 
     // Get progress bar spinner view
-    m_reloadingListProgressBar = (ProgressBar)v.findViewById(R.id.route_detail_list_reloading_list_progress_bar);
+    m_reloadingListProgressBar = v.findViewById(R.id.route_detail_list_reloading_list_progress_bar);
 
     ListView listView = getListView();
     listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE_MODAL);
diff --git a/app/src/main/java/net/named_data/nfd/RouteListFragment.java b/app/src/main/java/net/named_data/nfd/RouteListFragment.java
index 275dcde..f461dce 100644
--- a/app/src/main/java/net/named_data/nfd/RouteListFragment.java
+++ b/app/src/main/java/net/named_data/nfd/RouteListFragment.java
@@ -1,18 +1,18 @@
 /* -*- Mode:jde; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
-/**
+/*
  * Copyright (c) 2015-2017 Regents of the University of California
- * <p>
+ * <p/>
  * This file is part of NFD (Named Data Networking Forwarding Daemon) Android.
  * See AUTHORS.md for complete list of NFD Android authors and contributors.
- * <p>
+ * <p/>
  * NFD Android is free software: you can redistribute it and/or modify it under the terms
  * of the GNU General Public License as published by the Free Software Foundation,
  * either version 3 of the License, or (at your option) any later version.
- * <p>
+ * <p/>
  * NFD Android is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
  * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
  * PURPOSE.  See the GNU General Public License for more details.
- * <p>
+ * <p/>
  * You should have received a copy of the GNU General Public License along with
  * NFD Android, e.g., in COPYING.md file.  If not, see <http://www.gnu.org/licenses/>.
  */
@@ -26,6 +26,7 @@
 import android.os.Bundle;
 import android.support.annotation.Nullable;
 import android.support.v4.app.ListFragment;
+import android.support.v4.content.ContextCompat;
 import android.text.TextUtils;
 import android.util.Pair;
 import android.util.SparseArray;
@@ -95,20 +96,19 @@
   @Override
   public void onViewCreated(View view, Bundle savedInstanceState) {
     super.onViewCreated(view, savedInstanceState);
-    View v = getLayoutInflater(savedInstanceState).inflate(R.layout.fragment_route_list_list_header, null);
+    View v = getLayoutInflater().inflate(R.layout.fragment_route_list_list_header, getListView(), false);
     getListView().addHeaderView(v, null, false);
-    getListView().setDivider(getResources().getDrawable(R.drawable.list_item_divider));
+    getListView().setDivider(ContextCompat.getDrawable(getContext(), R.drawable.list_item_divider));
 
     m_routeListInfoUnavailableView = v.findViewById(R.id.route_list_info_unavailable);
 
     // Get progress bar spinner view
-    m_reloadingListProgressBar = (ProgressBar) v.findViewById(R.id.route_list_reloading_list_progress_bar);
+    m_reloadingListProgressBar = v.findViewById(R.id.route_list_reloading_list_progress_bar);
 
     getListView().setLongClickable(true);
     getListView().setOnItemLongClickListener(new OnItemLongClickListener() {
       public boolean onItemLongClick(AdapterView<?> parent, View v, int position, long id) {
         final RibEntry entry = (RibEntry) parent.getItemAtPosition(position);
-        ;
         new AlertDialog.Builder(v.getContext())
           .setIcon(android.R.drawable.ic_dialog_alert)
           .setTitle("Deleting route")
@@ -126,7 +126,6 @@
           .setNegativeButton("No", null)
           .show();
 
-
         return true;
       }
     });
@@ -357,11 +356,11 @@
       if (convertView == null) {
         holder = new RouteItemHolder();
 
-        convertView = m_layoutInflater.inflate(R.layout.list_item_route_item, null);
+        convertView = m_layoutInflater.inflate(R.layout.list_item_route_item, parent, false);
         convertView.setTag(holder);
 
-        holder.m_uri = (TextView) convertView.findViewById(R.id.list_item_route_uri);
-        holder.m_faceList = (TextView) convertView.findViewById(R.id.list_item_face_list);
+        holder.m_uri = convertView.findViewById(R.id.list_item_route_uri);
+        holder.m_faceList = convertView.findViewById(R.id.list_item_face_list);
       } else {
         holder = (RouteItemHolder) convertView.getTag();
       }
@@ -459,9 +458,7 @@
         }
         nfdcHelper.shutdown();
         return "OK";
-      } catch (FaceUri.CanonizeError e) {
-        return "Error creating face (" + e.getMessage() + ")";
-      } catch (FaceUri.Error e) {
+      } catch (FaceUri.CanonizeError|FaceUri.Error e) {
         return "Error creating face (" + e.getMessage() + ")";
       } catch (Exception e) {
         return "Error communicating with NFD (" + e.getMessage() + ")";
@@ -503,7 +500,7 @@
 
 
   private class RouteRemoveAsyncTask extends AsyncTask<Void, Void, String> {
-    public RouteRemoveAsyncTask(Name prefix, List<Integer> faceIds) {
+    RouteRemoveAsyncTask(Name prefix, List<Integer> faceIds) {
       m_prefix = prefix;
       m_faceList = faceIds;
     }
@@ -514,9 +511,7 @@
       try {
         removeRouteSyncs(getActivity().getApplicationContext(), m_prefix, m_faceList);
         return "OK";
-      } catch (FaceUri.CanonizeError e) {
-        return "Error destroying face (" + e.getMessage() + ")";
-      } catch (FaceUri.Error e) {
+      } catch (FaceUri.CanonizeError|FaceUri.Error e) {
         return "Error destroying face (" + e.getMessage() + ")";
       } catch (Exception e) {
         return "Error communicating with NFD (" + e.getMessage() + ")";
diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml
index b0d48f1..2fc1654 100644
--- a/app/src/main/res/layout/fragment_main.xml
+++ b/app/src/main/res/layout/fragment_main.xml
@@ -7,7 +7,7 @@
   <LinearLayout
       style="@style/default_linear_layout_padding"
       android:layout_width="match_parent"
-      android:layout_height="match_parent"
+      android:layout_height="wrap_content"
       android:orientation="vertical"
       >
 
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 0c82fa3..b9519a1 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -1,6 +1,5 @@
 <?xml version="1.0" encoding="utf-8"?>
 <resources>
     <item name="ndn_color_fire_bush" type="color">#DB9710</item>
-    <item name="ndn_color_grenadier" type="color">#C04818</item>
     <item name="android_color_gray" type="color">#C6C6C6</item>
-</resources>
\ No newline at end of file
+</resources>
