Merge pull request #167 from therajanmaurya/NoInternet

Feat: show Error UI and No Internet connection logic
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index d2ad324..b3a7b2e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -2,6 +2,7 @@
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
           package="org.apache.fineract">
 
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.CAMERA"/>
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
diff --git a/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java b/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java
new file mode 100644
index 0000000..8c297f3
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/data/remote/ConnectivityInterceptor.java
@@ -0,0 +1,36 @@
+package org.apache.fineract.data.remote;
+
+import android.content.Context;
+import android.support.annotation.NonNull;
+
+import org.apache.fineract.exceptions.NoConnectivityException;
+import org.apache.fineract.utils.NetworkUtil;
+
+import java.io.IOException;
+
+import okhttp3.Interceptor;
+import okhttp3.Request;
+import okhttp3.Response;
+
+/**
+ * @author Rajan Maurya
+ *         On 23/09/17.
+ */
+public class ConnectivityInterceptor implements Interceptor {
+
+    private Context context;
+
+    public ConnectivityInterceptor(Context context) {
+        this.context = context;
+    }
+
+    @Override
+    public Response intercept(@NonNull Chain chain) throws IOException {
+        if (!NetworkUtil.isConnected(context)) {
+            throw new NoConnectivityException();
+        }
+
+        Request.Builder builder = chain.request().newBuilder();
+        return chain.proceed(builder.build());
+    }
+}
diff --git a/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java b/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
index 2740539..a97741f 100644
--- a/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
+++ b/app/src/main/java/org/apache/fineract/data/remote/FineractOkHttpClient.java
@@ -99,6 +99,7 @@
 
         //Interceptor :> Full Body Logger and ApiRequest Header
         builder.addInterceptor(logger);
+        builder.addInterceptor(new ConnectivityInterceptor(context));
         builder.addInterceptor(new FineractInterceptor(context));
         builder.addInterceptor(new ReceivedCookiesInterceptor(context));
 
diff --git a/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java b/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java
new file mode 100644
index 0000000..aa9ffab
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/exceptions/NoConnectivityException.java
@@ -0,0 +1,15 @@
+package org.apache.fineract.exceptions;
+
+import java.io.IOException;
+
+/**
+ * @author Rajan Maurya
+ *         On 23/09/17.
+ */
+public class NoConnectivityException extends IOException {
+
+    @Override
+    public String getMessage() {
+        return "No connectivity exception";
+    }
+}
diff --git a/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java b/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
index a19a275..772f313 100644
--- a/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
+++ b/app/src/main/java/org/apache/fineract/ui/adapters/CustomerAdapter.java
@@ -51,7 +51,8 @@
     @Override
     public void onBindViewHolder(ViewHolder holder, int position) {
         Customer customer = customers.get(position);
-        holder.tvCustomerName.setText(customer.getGivenName() + " " + customer.getSurname());
+        holder.tvCustomerName.setText(context.getString(R.string.customer_name,
+                customer.getGivenName(), customer.getSurname() ));
 
         if (customer.getAssignedEmployee() != null) {
             holder.tvAssignedEmployee.setText(context.getString(R.string.assigned_employee_list,
diff --git a/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java b/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
index 1e005c7..7773559 100644
--- a/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/base/BasePresenter.java
@@ -2,6 +2,9 @@
 
 import android.content.Context;
 
+import org.apache.fineract.exceptions.NoConnectivityException;
+import org.apache.fineract.utils.MifosErrorUtils;
+
 /**
  * Base class that implements the Presenter interface and provides a base implementation for
  * attachView() and detachView(). It also handles keeping a reference to the mvpView that
@@ -26,6 +29,14 @@
         mvpView = null;
     }
 
+    public void showExceptionError(Throwable throwable, String errorMessage) {
+        if (throwable instanceof NoConnectivityException) {
+            getMvpView().showNoInternetConnection();
+        } else {
+            getMvpView().showError(MifosErrorUtils.getFineractError(throwable, errorMessage));
+        }
+    }
+
     public boolean isViewAttached() {
         return mvpView != null;
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/base/MvpView.java b/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
index 344e11e..7ba9b0c 100644
--- a/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
+++ b/app/src/main/java/org/apache/fineract/ui/base/MvpView.java
@@ -8,4 +8,7 @@
  */
 public interface MvpView {
 
+    void showNoInternetConnection();
+
+    void showError(String message);
 }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
index 54cce3a..500cd8e 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerActivity.java
@@ -187,6 +187,13 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        stepperLayout.setNextButtonEnabled(true);
+        Toaster.show(findViewById(android.R.id.content),
+                getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         stepperLayout.setNextButtonEnabled(true);
         Toaster.show(findViewById(android.R.id.content), message);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
index df12c6e..7b33045 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/customeractivity/CreateCustomerPresenter.java
@@ -50,9 +50,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(context.getString(R.string.error_creating_customer));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_creating_customer));
                     }
                 })
 
@@ -74,9 +75,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(context.getString(R.string.error_updating_customer));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_updating_customer));
                     }
                 })
         );
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
index 97a7440..0a88e94 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressFragment.java
@@ -249,6 +249,11 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        Toaster.show(rootView, getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         Toaster.show(rootView, message);
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
index 7c274e9..0ef358a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/createcustomer/formcustomeraddress/FormCustomerAddressPresenter.java
@@ -72,8 +72,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
-                        getMvpView().showError(context.getString(R.string.error_loading_countries));
+                    public void onError(Throwable throwable) {
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_loading_countries));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
index da611d3..caf71e8 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesContract.java
@@ -24,8 +24,6 @@
         void showProgressbar();
 
         void hideProgressbar();
-
-        void showError(String message);
     }
 
     interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
index 796d013..052d8f0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesFragment.java
@@ -2,16 +2,12 @@
 
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.models.customer.Command;
@@ -41,14 +37,8 @@
     @BindView(R.id.swipe_container)
     SwipeRefreshLayout swipeRefreshLayout;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.iv_retry)
-    ImageView ivRetry;
-
-    @BindView(R.id.tv_error)
-    TextView tvStatus;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @Inject
     CustomerActivitiesPresenter customerActivitiesPresenter;
@@ -84,6 +74,7 @@
             @Nullable Bundle savedInstanceState) {
         rootView = inflater.inflate(R.layout.fragment_customer_activities, container, false);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getContext(), rootView);
         customerActivitiesPresenter.attachView(this);
 
         showUserInterface();
@@ -102,10 +93,10 @@
         customerActivitiesPresenter.fetchCustomerCommands(customerIdentifier);
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
         rvCustomerActivities.setVisibility(View.GONE);
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         customerActivitiesPresenter.fetchCustomerCommands(customerIdentifier);
     }
 
@@ -130,20 +121,18 @@
     @Override
     public void showEmptyCommands(String message) {
         showRecyclerView(false);
-        tvStatus.setText(message);
-        ivRetry.setImageDrawable(ContextCompat.getDrawable(getActivity(),
-                R.drawable.ic_assignment_turned_in_black_24dp));
-        ivRetry.setEnabled(false);
+        showFineractEmptyUI(getString(R.string.activities), getString(R.string.activities),
+                R.drawable.ic_event_black_24dp);
     }
 
     @Override
     public void showRecyclerView(boolean status) {
         if (status) {
             rvCustomerActivities.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvCustomerActivities.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
@@ -158,9 +147,15 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        showRecyclerView(false);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
         showRecyclerView(false);
-        tvStatus.setText(message);
+        showFineractErrorUI(getString(R.string.activities));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
index 8f5f86f..9a0513a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customeractivities/CustomerActivitiesPresenter.java
@@ -68,9 +68,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_fetching_customer_activities));
                     }
 
@@ -81,4 +81,5 @@
                 })
         );
     }
+
 }
\ No newline at end of file
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
index 8708cb3..fcf3d2a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsFragment.java
@@ -21,7 +21,6 @@
 import org.apache.fineract.data.models.customer.Customer;
 import org.apache.fineract.ui.base.FineractBaseActivity;
 import org.apache.fineract.ui.base.FineractBaseFragment;
-import org.apache.fineract.ui.base.Toaster;
 import org.apache.fineract.ui.online.customers.createcustomer.CustomerAction;
 import org.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
 import org.apache.fineract.ui.online.customers.customeractivities.CustomerActivitiesActivity;
@@ -89,11 +88,8 @@
     @BindView(R.id.cl_customer_details)
     CoordinatorLayout clCustomerDetails;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @BindView(R.id.rl_email)
     RelativeLayout rlEmail;
@@ -140,6 +136,7 @@
         rootView = inflater.inflate(R.layout.fragment_customer_details, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         customerDetailsPresenter.attachView(this);
 
         showUserInterface();
@@ -155,10 +152,10 @@
         customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
         clCustomerDetails.setVisibility(View.GONE);
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         customerDetailsPresenter.loanCustomerDetails(customerIdentifier);
     }
 
@@ -230,6 +227,7 @@
     public void showCustomerDetails(Customer customer) {
         this.customer = customer;
         clCustomerDetails.setVisibility(View.VISIBLE);
+        layoutError.setVisibility(View.GONE);
 
         loadCustomerPortrait();
 
@@ -321,10 +319,17 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        clCustomerDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String errorMessage) {
-        rlError.setVisibility(View.VISIBLE);
-        tvError.setText(errorMessage);
-        Toaster.show(rootView, errorMessage);
+        clCustomerDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractErrorUI(getString(R.string.customer_details));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
index 76bbefa..1f1b052 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerdetails/CustomerDetailsPresenter.java
@@ -2,6 +2,7 @@
 
 import android.content.Context;
 
+import org.apache.fineract.R;
 import org.apache.fineract.data.datamanager.DataManagerCustomer;
 import org.apache.fineract.data.models.customer.Customer;
 import org.apache.fineract.injection.ApplicationContext;
@@ -60,9 +61,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError("Failed to fetch customer details");
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_fetching_customer_details));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
index 57b24eb..f4464d9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersContract.java
@@ -28,8 +28,6 @@
         void hideProgressbar();
 
         void showMessage(String message);
-
-        void showError();
     }
 
     interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
index 58ea269..6fb9592 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersFragment.java
@@ -11,9 +11,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.models.customer.Customer;
@@ -24,8 +21,7 @@
 import org.apache.fineract.ui.base.OnItemClickListener;
 import org.apache.fineract.ui.base.Toaster;
 import org.apache.fineract.ui.online.customers.createcustomer.CustomerAction;
-import org.apache.fineract.ui.online.customers.createcustomer.customeractivity
-        .CreateCustomerActivity;
+import org.apache.fineract.ui.online.customers.createcustomer.customeractivity.CreateCustomerActivity;
 import org.apache.fineract.ui.online.customers.customerdetails.CustomerDetailsActivity;
 import org.apache.fineract.utils.ConstantKeys;
 
@@ -53,14 +49,8 @@
     @BindView(R.id.swipe_container)
     SwipeRefreshLayout swipeRefreshLayout;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.iv_retry)
-    ImageView ivRetry;
-
-    @BindView(R.id.tv_error)
-    TextView tvStatus;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     View rootView;
 
@@ -93,6 +83,7 @@
         rootView = inflater.inflate(R.layout.fragment_customer_list, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         customerPresenter.attachView(this);
         setToolbarTitle(getString(R.string.customers));
 
@@ -117,7 +108,7 @@
         customerPresenter.fetchCustomers(0, false);
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
         customerPresenter.fetchCustomers(0, false);
     }
@@ -167,18 +158,18 @@
     @Override
     public void showEmptyCustomers(String message) {
         showRecyclerView(false);
-        tvStatus.setText(getString(R.string.empty_customer_list));
-        showMessage(getString(R.string.empty_customer_list));
+        showFineractEmptyUI(getString(R.string.customers), getString(R.string.customer),
+                R.drawable.ic_customer_black_24dp);
     }
 
     @Override
     public void showRecyclerView(boolean status) {
         if (status) {
             rvCustomers.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvCustomers.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
@@ -198,10 +189,19 @@
     }
 
     @Override
-    public void showError() {
+    public void showNoInternetConnection() {
         showRecyclerView(false);
-        tvStatus.setText(getString(R.string.error_loading_customers));
-        showMessage(getString(R.string.error_loading_customers));
+        showFineractNoInternetUI();
+    }
+
+    @Override
+    public void showError(String message) {
+        if (customerAdapter.getItemCount() != 0) {
+            showMessage(getString(R.string.error_failed_to_refresh_customers));
+        } else {
+            showRecyclerView(false);
+            showFineractErrorUI(getString(R.string.customers));
+        }
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
index 0b2deb7..720660e 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerlist/CustomersPresenter.java
@@ -88,7 +88,8 @@
                             getMvpView().showMessage(
                                     context.getString(R.string.error_loading_customers));
                         } else {
-                            getMvpView().showError();
+                            showExceptionError(throwable,
+                                    context.getString(R.string.error_loading_customers));
                         }
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
index 5eaffaa..bed1d69 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/CustomerProfileActivity.java
@@ -164,4 +164,12 @@
     public void refreshUI() {
         loadCustomerPortrait();
     }
+
+    @Override
+    public void showNoInternetConnection() {
+    }
+
+    @Override
+    public void showError(String message) {
+    }
 }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
index f015460..0cca5f3 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfileBottomSheet.java
@@ -378,4 +378,14 @@
     public void onDismiss(DialogInterface dialog) {
         super.onDismiss(dialog);
     }
+
+    @Override
+    public void showNoInternetConnection() {
+        Toaster.show(rootView, getString(R.string.no_internet_connection));
+    }
+
+    @Override
+    public void showError(String message) {
+        Toaster.show(rootView, message);
+    }
 }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
index 4d53808..056b64f 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customerprofile/editcustomerprofilebottomsheet/EditCustomerProfilePresenter.java
@@ -72,10 +72,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressDialog();
-                        getMvpView().showMessage(context.getString(
-                                R.string.error_uploading_customer_portrait));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_uploading_customer_portrait));
                     }
                 })
         );
@@ -96,10 +96,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressDialog();
-                        getMvpView().showMessage(context.getString(
-                                R.string.error_deleting_customer_portrait));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_deleting_customer_portrait));
                     }
                 })
         );
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
index 438f0ee..9d52907 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetContract.java
@@ -17,8 +17,6 @@
         void showProgressbar();
 
         void hideProgressbar();
-
-        void showError();
     }
 
     interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
index f5f4715..efb6a10 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetFragment.java
@@ -222,7 +222,13 @@
     }
 
     @Override
-    public void showError() {
+    public void showNoInternetConnection() {
+        etComment.setEnabled(true);
+        Toaster.show(rootView, getString(R.string.no_internet_connection));
+    }
+
+    @Override
+    public void showError(String message) {
         etComment.setEnabled(true);
         Toaster.show(rootView, getString(R.string.error_updating_status));
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
index f6af1b7..526ecc9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/customers/customertasks/CustomerTasksBottomSheetPresenter.java
@@ -2,6 +2,7 @@
 
 import android.content.Context;
 
+import org.apache.fineract.R;
 import org.apache.fineract.data.datamanager.DataManagerCustomer;
 import org.apache.fineract.data.models.customer.Command;
 import org.apache.fineract.injection.ApplicationContext;
@@ -61,9 +62,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError();
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_updating_status));
                     }
                 })
         );
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
index c2d7ff6..91ed803 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositActivity.java
@@ -160,6 +160,14 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        stepperLayout.setNextButtonEnabled(true);
+        stepperLayout.setBackButtonEnabled(true);
+        Toaster.show(findViewById(android.R.id.content),
+                getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         stepperLayout.setNextButtonEnabled(true);
         stepperLayout.setBackButtonEnabled(true);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
index 2a5239b..95c796f 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/createdepositactivity/CreateDepositPresenter.java
@@ -61,9 +61,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_creating_deposit_account));
                     }
                 })
@@ -86,9 +86,9 @@
                             }
 
                             @Override
-                            public void onError(Throwable e) {
+                            public void onError(Throwable throwable) {
                                 getMvpView().hideProgressbar();
-                                getMvpView().showError(
+                                showExceptionError(throwable,
                                         context.getString(R.string.error_updating_deposit_account));
                             }
                         })
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
index ad965d4..e2e262d 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductFragment.java
@@ -5,8 +5,8 @@
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.TextInputLayout;
+import android.support.v4.widget.NestedScrollView;
 import android.support.v7.widget.RecyclerView;
 import android.support.v7.widget.StaggeredGridLayoutManager;
 import android.view.LayoutInflater;
@@ -29,8 +29,7 @@
 import org.apache.fineract.ui.base.FineractBaseActivity;
 import org.apache.fineract.ui.base.FineractBaseFragment;
 import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositAction;
-import org.apache.fineract.ui.online.depositaccounts.createdepositaccount
-        .DepositOnNavigationBarListener;
+import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositOnNavigationBarListener;
 import org.apache.fineract.ui.views.DelayAutoCompleteTextView;
 import org.apache.fineract.utils.ConstantKeys;
 
@@ -41,6 +40,7 @@
 
 import butterknife.BindView;
 import butterknife.ButterKnife;
+import butterknife.OnClick;
 
 /**
  * @author Rajan Maurya
@@ -67,8 +67,11 @@
     @BindView(R.id.rv_beneficiary)
     RecyclerView rvBeneficiary;
 
-    @BindView(R.id.cl_deposit_assign_product)
-    CoordinatorLayout clDepositAssignProduct;
+    @BindView(R.id.ncv_deposit_assign_product)
+    NestedScrollView ncvDepositAssignProduct;
+
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @BindView(R.id.pb_search_beneficiary)
     ProgressBar pbSearchBeneficiary;
@@ -121,6 +124,7 @@
         rootView = inflater.inflate(R.layout.fragment_form_deposit_assign_product,
                 container, false);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         formDepositAssignProductPresenter.attachView(this);
 
         showUserInterface();
@@ -137,6 +141,13 @@
         return rootView;
     }
 
+    @OnClick(R.id.btn_try_again)
+    void onRetry() {
+        ncvDepositAssignProduct.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
+        formDepositAssignProductPresenter.fetchProductDefinitions();
+    }
+
     @Override
     public VerificationError verifyStep() {
         if (productIdentifier == null) {
@@ -186,7 +197,7 @@
 
     @Override
     public void editDepositAccountDetails(DepositAccount depositAccount) {
-        clDepositAssignProduct.setVisibility(View.VISIBLE);
+        ncvDepositAssignProduct.setVisibility(View.VISIBLE);
         beneficiaryAdapter.setAllBeneficiary(depositAccount.getBeneficiaries());
         spProducts.setVisibility(View.GONE);
         tvSelectProductHeader.setVisibility(View.GONE);
@@ -195,7 +206,8 @@
 
     @Override
     public void showProductDefinitions(List<String> products) {
-        clDepositAssignProduct.setVisibility(View.VISIBLE);
+        ncvDepositAssignProduct.setVisibility(View.VISIBLE);
+        layoutError.setVisibility(View.GONE);
         this.products.addAll(products);
         productsAdapter.notifyDataSetChanged();
     }
@@ -211,8 +223,17 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        ncvDepositAssignProduct.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
-        clDepositAssignProduct.setVisibility(View.VISIBLE);
+        ncvDepositAssignProduct.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractErrorUI(getString(R.string.deposit_product));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
index 2d00a10..2890234 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/createdepositaccount/formdepositassignproduct/FormDepositAssignProductPresenter.java
@@ -2,6 +2,7 @@
 
 import android.content.Context;
 
+import org.apache.fineract.R;
 import org.apache.fineract.data.datamanager.DataManagerDeposit;
 import org.apache.fineract.data.models.deposit.ProductDefinition;
 import org.apache.fineract.injection.ApplicationContext;
@@ -66,9 +67,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError("");
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_fetching_deposit_product));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
index b9696b7..179e63b 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsFragment.java
@@ -9,7 +9,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageView;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import org.apache.fineract.R;
@@ -18,8 +17,7 @@
 import org.apache.fineract.ui.base.FineractBaseFragment;
 import org.apache.fineract.ui.base.Toaster;
 import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.DepositAction;
-import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.createdepositactivity
-        .CreateDepositActivity;
+import org.apache.fineract.ui.online.depositaccounts.createdepositaccount.createdepositactivity.CreateDepositActivity;
 import org.apache.fineract.utils.ConstantKeys;
 import org.apache.fineract.utils.StatusUtils;
 
@@ -54,11 +52,8 @@
     @BindView(R.id.tv_beneficiaries)
     TextView tvBeneficiaries;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @BindView(R.id.fab_edit_deposit_account)
     FloatingActionButton fabEditDepositAccount;
@@ -93,6 +88,7 @@
         rootView = inflater.inflate(R.layout.fragment_customer_deposit_details, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         customerDepositDetailsPresenter.attachView(this);
         setToolbarTitle(getString(R.string.deposit_account));
 
@@ -106,10 +102,10 @@
         customerDepositDetailsPresenter.fetchDepositAccountDetails(accountIdentifier);
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
         clCustomerDepositDetails.setVisibility(View.GONE);
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         customerDepositDetailsPresenter.fetchDepositAccountDetails(accountIdentifier);
     }
 
@@ -126,7 +122,7 @@
     public void showDepositDetails(DepositAccount depositAccount) {
         this.depositAccount = depositAccount;
         clCustomerDepositDetails.setVisibility(View.VISIBLE);
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
 
         StatusUtils.setDepositAccountStatusIcon(depositAccount.getState(),
                 ivDepositCurrentStatus, getActivity());
@@ -158,10 +154,17 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        clCustomerDepositDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
         clCustomerDepositDetails.setVisibility(View.GONE);
-        rlError.setVisibility(View.VISIBLE);
-        tvError.setText(message);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractErrorUI(getString(R.string.deposit_account));
         Toaster.show(rootView, message);
     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
index 2b11a20..d1025b9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountdetails/DepositAccountDetailsPresenter.java
@@ -63,9 +63,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_loading_deposit_details));
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
index fdaa38d..0a5e2f4 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsFragment.java
@@ -134,6 +134,12 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        showRecyclerView(false);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String errorMessage) {
         showRecyclerView(false);
         showFineractErrorUI(getString(R.string.deposit_accounts));
diff --git a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
index 1e28756..a117c5a 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/depositaccounts/depositaccountslist/DepositAccountsPresenter.java
@@ -67,9 +67,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_fetching_deposit_accounts));
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
index de6f496..ff2c2a5 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationActivity.java
@@ -167,6 +167,14 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        stepperLayout.setNextButtonEnabled(true);
+        stepperLayout.setBackButtonEnabled(true);
+        Toaster.show(findViewById(android.R.id.content),
+                getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         stepperLayout.setNextButtonEnabled(true);
         stepperLayout.setBackButtonEnabled(true);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
index 2a08bca..bcb86f5 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/createidentification/identificationactivity/CreateIdentificationPresenter.java
@@ -63,11 +63,10 @@
                             }
 
                             @Override
-                            public void onError(Throwable e) {
+                            public void onError(Throwable throwable) {
                                 getMvpView().hideProgressbar();
-                                getMvpView().showError(
-                                        context.getString(
-                                                R.string.error_creating_identification_card));
+                                showExceptionError(throwable, context.getString(
+                                        R.string.error_creating_identification_card));
                             }
                         })
         );
@@ -90,10 +89,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
-                                context.getString(R.string.error_editing_identification_card));
+                        showExceptionError(throwable, context.getString(
+                                R.string.error_updating_identification_card));
                     }
                 })
         );
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
index cb91b44..d564963 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsContract.java
@@ -13,6 +13,8 @@
 
     interface View extends MvpView {
 
+        void fetchIdentificationScanCard();
+
         void showUserInterface();
 
         void initializeRecyclerView();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
index db69744..8288492 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsFragment.java
@@ -13,7 +13,6 @@
 import android.view.MenuItem;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 import android.widget.Toast;
 
@@ -26,12 +25,9 @@
 import org.apache.fineract.ui.base.FineractBaseActivity;
 import org.apache.fineract.ui.base.FineractBaseFragment;
 import org.apache.fineract.ui.online.identification.createidentification.Action;
-import org.apache.fineract.ui.online.identification.createidentification.identificationactivity
-        .CreateIdentificationActivity;
-import org.apache.fineract.ui.online.identification.uploadidentificationscan
-        .AddScanIdentificationListener;
-import org.apache.fineract.ui.online.identification.uploadidentificationscan
-        .UploadIdentificationCardBottomSheet;
+import org.apache.fineract.ui.online.identification.createidentification.identificationactivity.CreateIdentificationActivity;
+import org.apache.fineract.ui.online.identification.uploadidentificationscan.AddScanIdentificationListener;
+import org.apache.fineract.ui.online.identification.uploadidentificationscan.UploadIdentificationCardBottomSheet;
 import org.apache.fineract.ui.online.identification.viewscancard.ViewScanCardActivity;
 import org.apache.fineract.utils.ConstantKeys;
 import org.apache.fineract.utils.DateUtils;
@@ -75,11 +71,8 @@
     @BindView(R.id.rv_scans_uploaded)
     RecyclerView rvScansUploaded;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @Inject
     IdentificationScanAdapter identificationScanAdapter;
@@ -120,6 +113,7 @@
         rootView = inflater.inflate(R.layout.fragment_identification_details, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         identificationDetailsPresenter.attachView(this);
 
         showUserInterface();
@@ -139,24 +133,27 @@
                 getString(R.string.upload_new_identification_card_scan));
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
-        identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
-                identificationCard.getNumber());
+        fetchIdentificationScanCard();
     }
 
     @Override
     public void onResume() {
         super.onResume();
-        identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
-                identificationCard.getNumber());
+        fetchIdentificationScanCard();
     }
 
     @Override
     public void updateScanUploadedIdentification() {
+        fetchIdentificationScanCard();
+    }
+
+    @Override
+    public void fetchIdentificationScanCard() {
         tvScansStatus.setVisibility(View.VISIBLE);
         rvScansUploaded.setVisibility(View.GONE);
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         identificationDetailsPresenter.fetchIdentificationScanCards(customerIdentifier,
                 identificationCard.getNumber());
     }
@@ -195,10 +192,10 @@
     public void showRecyclerView(boolean status) {
         if (status) {
             rvScansUploaded.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvScansUploaded.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
         tvScansStatus.setVisibility(View.GONE);
     }
@@ -206,8 +203,8 @@
     @Override
     public void showScansStatus(String message) {
         showRecyclerView(false);
-        rlError.getChildAt(0).setVisibility(View.GONE);
-        tvError.setText(message);
+        showFineractEmptyUI(getString(R.string.identification_card_scans),
+                getString(R.string.identification_card_scan), R.drawable.ic_description_black_24dp);
     }
 
     @Override
@@ -240,9 +237,15 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        showRecyclerView(false);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
         showRecyclerView(false);
-        tvError.setText(message);
+        showFineractErrorUI(getString(R.string.identification_card_scans));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
index e68813b..d8dacbe 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationdetails/IdentificationDetailsPresenter.java
@@ -70,8 +70,8 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
-                        getMvpView().showError(
+                    public void onError(Throwable throwable) {
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_fetching_scans));
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
index 5cff8db..c38030c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsContract.java
@@ -23,6 +23,8 @@
 
         void showRecyclerView(boolean status);
 
+        void showEmptyIdentifications();
+
         void showMessage(String message);
     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
index f8c862b..bca48e2 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsFragment.java
@@ -9,8 +9,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.models.customer.identification.Identification;
@@ -20,10 +18,8 @@
 import org.apache.fineract.ui.base.OnItemClickListener;
 import org.apache.fineract.ui.base.Toaster;
 import org.apache.fineract.ui.online.identification.createidentification.Action;
-import org.apache.fineract.ui.online.identification.createidentification.identificationactivity
-        .CreateIdentificationActivity;
-import org.apache.fineract.ui.online.identification.identificationdetails
-        .IdentificationDetailsFragment;
+import org.apache.fineract.ui.online.identification.createidentification.identificationactivity.CreateIdentificationActivity;
+import org.apache.fineract.ui.online.identification.identificationdetails.IdentificationDetailsFragment;
 import org.apache.fineract.utils.ConstantKeys;
 
 import java.util.ArrayList;
@@ -48,11 +44,8 @@
     @BindView(R.id.swipe_container)
     SwipeRefreshLayout swipeRefreshLayout;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @Inject
     IdentificationsPresenter identificationsPresenter;
@@ -90,6 +83,7 @@
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         identificationsPresenter.attachView(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
 
         showUserInterface();
 
@@ -151,21 +145,38 @@
     public void showRecyclerView(boolean status) {
         if (status) {
             rvIdentifications.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvIdentifications.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
     @Override
-    public void showMessage(String message) {
+    public void showEmptyIdentifications() {
         showRecyclerView(false);
-        tvError.setText(message);
+        showFineractEmptyUI(getString(R.string.identification_cards),
+                getString(R.string.identification_card), R.drawable.ic_person_outline_black_24dp);
+    }
+
+    @Override
+    public void showMessage(String message) {
         Toaster.show(rootView, message);
     }
 
     @Override
+    public void showNoInternetConnection() {
+        showRecyclerView(false);
+        showFineractNoInternetUI();
+    }
+
+    @Override
+    public void showError(String message) {
+        showRecyclerView(false);
+        showFineractErrorUI(getString(R.string.identification_cards));
+    }
+
+    @Override
     public void onItemClick(View childView, int position) {
         ((FineractBaseActivity) getActivity()).replaceFragment(
                 IdentificationDetailsFragment.newInstance(customerIdentifier,
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
index 74ba678..fa1b855 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/identificationlist/IdentificationsPresenter.java
@@ -61,17 +61,16 @@
                         getMvpView().hideProgressbar();
 
                         if (identifications.size() == 0) {
-                            getMvpView().showMessage(
-                                    context.getString(R.string.empty_identification_list));
+                            getMvpView().showEmptyIdentifications();
                         } else {
                             getMvpView().showIdentification(identifications);
                         }
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showMessage(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_fetching_identification_list));
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
index 45c44ce..86180fa 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardBottomSheet.java
@@ -215,6 +215,11 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        Toaster.show(rootView, getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         Toaster.show(rootView, message);
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
index 613ed4b..93b4157 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/identification/uploadidentificationscan/UploadIdentificationCardPresenter.java
@@ -74,9 +74,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressDialog();
-                        getMvpView().showError(context
+                        showExceptionError(throwable, context
                                 .getString(R.string.error_uploading_identification_scan_card));
                     }
                 })
diff --git a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
index 9e6ff2b..f36c304 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/launcher/LauncherActivity.java
@@ -96,4 +96,14 @@
         super.onDestroy();
         launcherPresenter.detachView();
     }
+
+    @Override
+    public void showNoInternetConnection() {
+
+    }
+
+    @Override
+    public void showError(String message) {
+
+    }
 }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
index 0c42588..3d55a5b 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsContract.java
@@ -25,8 +25,6 @@
 
         void showMessage(String message);
 
-        void showError();
-
         void showProgressbar();
 
         void hideProgressbar();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
index 252b449..f9aca09 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsFragment.java
@@ -9,8 +9,6 @@
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.models.loan.LoanAccount;
@@ -20,8 +18,7 @@
 import org.apache.fineract.ui.base.FineractBaseFragment;
 import org.apache.fineract.ui.base.OnItemClickListener;
 import org.apache.fineract.ui.base.Toaster;
-import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity
-        .LoanApplicationActivity;
+import org.apache.fineract.ui.online.loanaccounts.loanapplication.loanactivity.LoanApplicationActivity;
 import org.apache.fineract.ui.online.loanaccounts.loandetails.CustomerLoanDetailsFragment;
 import org.apache.fineract.utils.ConstantKeys;
 
@@ -47,11 +44,8 @@
     @BindView(R.id.swipe_container)
     SwipeRefreshLayout swipeRefreshLayout;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvErrorMessage;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @Inject
     LoanAccountsPresenter customerLoansPresenter;
@@ -87,6 +81,7 @@
         rootView = inflater.inflate(R.layout.fragment_customer_loans, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         customerLoansPresenter.attachView(this);
         setToolbarTitle(getString(R.string.loan_accounts));
 
@@ -106,8 +101,10 @@
         customerLoansPresenter.fetchCustomerLoanAccounts(customerIdentifier, 0, false);
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
+        rvCustomerLoans.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         customerLoansPresenter.fetchCustomerLoanAccounts(customerIdentifier, 0, false);
     }
 
@@ -155,18 +152,18 @@
     @Override
     public void showEmptyLoanAccounts(String message) {
         showRecyclerView(false);
-        tvErrorMessage.setText(getString(R.string.empty_customer_loans));
-        showMessage(getString(R.string.empty_customer_loans));
+        showFineractEmptyUI(getString(R.string.loan_accounts), getString(R.string.loan_account),
+                R.drawable.ic_payment_black_24dp);
     }
 
     @Override
     public void showRecyclerView(boolean status) {
         if (status) {
             rvCustomerLoans.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvCustomerLoans.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
@@ -176,10 +173,16 @@
     }
 
     @Override
-    public void showError() {
+    public void showNoInternetConnection() {
         showRecyclerView(false);
-        tvErrorMessage.setText(getString(R.string.error_loading_customer_loans));
-        showMessage(getString(R.string.error_loading_customer_loans));
+        showFineractNoInternetUI();
+    }
+
+    @Override
+    public void showError(String message) {
+        showRecyclerView(false);
+        showMessage(message);
+        showFineractErrorUI(getString(R.string.loan_accounts));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
index 5a942f2..64addd0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanaccountlist/LoanAccountsPresenter.java
@@ -6,6 +6,7 @@
 import org.apache.fineract.data.datamanager.DataManagerLoans;
 import org.apache.fineract.data.models.loan.LoanAccount;
 import org.apache.fineract.data.models.loan.LoanAccountPage;
+import org.apache.fineract.exceptions.NoConnectivityException;
 import org.apache.fineract.injection.ApplicationContext;
 import org.apache.fineract.injection.ConfigPersistent;
 import org.apache.fineract.ui.base.BasePresenter;
@@ -84,13 +85,17 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        if (loadmore) {
+                        if (loadmore && !(throwable instanceof NoConnectivityException)) {
                             getMvpView().showMessage(
                                     context.getString(R.string.error_loading_customer_loans));
+                        } else if (loadmore && (throwable instanceof NoConnectivityException)) {
+                            getMvpView().showMessage(
+                                    context.getString(R.string.no_internet_connection));
                         } else {
-                            getMvpView().showError();
+                            showExceptionError(throwable,
+                                    context.getString(R.string.error_loading_customer_loans));
                         }
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
index e8a75ce..5614ca6 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationActivity.java
@@ -74,7 +74,7 @@
         stepperLayout.setAdapter(stepAdapter, currentPosition);
         stepperLayout.setListener(this);
         stepperLayout.setOffscreenPageLimit(stepAdapter.getCount());
-        setToolbarTitle("Create new loan");
+        setToolbarTitle(getString(R.string.create_new_loan));
         showBackButton();
     }
 
@@ -129,6 +129,12 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        Toaster.show(findViewById(android.R.id.content),
+                getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         Toaster.show(findViewById(android.R.id.content), message);
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
index 7069853..b4e7bac 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loanactivity/LoanApplicationPresenter.java
@@ -61,9 +61,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_while_creating_loan));
                     }
                 })
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
index 7fae6ba..bebe21c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerFragment.java
@@ -119,6 +119,11 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        Toaster.show(rootView, getString(R.string.no_internet_connection));
+    }
+
+    @Override
     public void showError(String message) {
         Toaster.show(rootView, getString(R.string.error_loading_customers));
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
index 9196a3b..7d0ded2 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loancosigner/LoanCoSignerPresenter.java
@@ -69,9 +69,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(context.getString(R.string.error_loading_customers));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_loading_customers));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
index 354cade..384df72 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsFragment.java
@@ -5,8 +5,8 @@
 import android.os.Bundle;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
-import android.support.design.widget.CoordinatorLayout;
 import android.support.design.widget.TextInputLayout;
+import android.support.v4.widget.NestedScrollView;
 import android.support.v7.widget.AppCompatSpinner;
 import android.text.Editable;
 import android.text.TextWatcher;
@@ -54,8 +54,8 @@
 
     public static final String LOG_TAG = LoanDetailsFragment.class.getSimpleName();
 
-    @BindView(R.id.cl_loan_details)
-    CoordinatorLayout clLoanDetails;
+    @BindView(R.id.ncv_loan_details)
+    NestedScrollView ncvLoanDetails;
 
     @BindView(R.id.sp_products)
     AppCompatSpinner spProducts;
@@ -120,6 +120,9 @@
     @BindView(R.id.sp_repay_year_month)
     AppCompatSpinner spRepayYearMonth;
 
+    @BindView(R.id.layout_error)
+    View layoutError;
+
     View rootView;
 
     @Inject
@@ -170,6 +173,7 @@
             @Nullable Bundle savedInstanceState) {
         rootView = inflater.inflate(R.layout.fragment_loan_details, container, false);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         loanDetailsPresenter.attachView(this);
 
         showUserInterface();
@@ -179,6 +183,13 @@
         return rootView;
     }
 
+    @OnClick(R.id.btn_try_again)
+    void reloadProducts() {
+        layoutError.setVisibility(View.GONE);
+        ncvLoanDetails.setVisibility(View.GONE);
+        loanDetailsPresenter.fetchProducts();
+    }
+
     @Override
     public VerificationError verifyStep() {
         if (!validateShortName() || !validateTerm() || !validateRepay()
@@ -322,7 +333,8 @@
 
     @Override
     public void showProducts(List<String> products) {
-        clLoanDetails.setVisibility(View.VISIBLE);
+        ncvLoanDetails.setVisibility(View.VISIBLE);
+        layoutError.setVisibility(View.GONE);
         this.products.addAll(products);
         productsAdapter.notifyDataSetChanged();
     }
@@ -342,6 +354,8 @@
 
     @Override
     public void showEmptyProducts() {
+        ncvLoanDetails.setVisibility(View.VISIBLE);
+        layoutError.setVisibility(View.GONE);
         Toaster.show(rootView, getString(R.string.empty_create_loan_products), Toaster.INDEFINITE);
     }
 
@@ -356,8 +370,17 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        ncvLoanDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
-        clLoanDetails.setVisibility(View.VISIBLE);
+        ncvLoanDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractErrorUI(getString(R.string.products));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
index 44cfcc2..f293c20 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loanapplication/loandetails/LoanDetailsPresenter.java
@@ -79,9 +79,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(context.getString(R.string.error_loading_products));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_loading_products));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
index f31cf7a..bd4f291 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsFragment.java
@@ -248,6 +248,13 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        ncvCustomerLoanDetails.setVisibility(View.GONE);
+        layoutError.setVisibility(View.VISIBLE);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
         ncvCustomerLoanDetails.setVisibility(View.GONE);
         layoutError.setVisibility(View.VISIBLE);
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
index c4bfcab..a24d421 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/loandetails/CustomerLoanDetailsPresenter.java
@@ -62,9 +62,9 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(
+                        showExceptionError(throwable,
                                 context.getString(R.string.error_loading_customer_loan_details));
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
index 7645e0e..24e9318 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentContract.java
@@ -14,6 +14,8 @@
 
     interface View extends MvpView {
 
+        void fetchPlannedPayment();
+
         void showUserInterface();
 
         void showPlannedPayment(List<PlannedPayment> plannedPayments);
@@ -29,9 +31,6 @@
         void hideProgressbar();
 
         void showMessage(String message);
-
-        void showError();
-
     }
 
     interface Presenter {
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
index 5e75830..191df3c 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentFragment.java
@@ -12,7 +12,6 @@
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.CalendarView;
-import android.widget.RelativeLayout;
 import android.widget.TextView;
 
 import org.apache.fineract.R;
@@ -57,11 +56,8 @@
     @BindView(R.id.cv_planned_payment)
     CardView cvCalenderPlannedPayment;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     @BindView(R.id.tv_toolbar_date)
     TextView tvToolbarDate;
@@ -107,17 +103,25 @@
         rootView = inflater.inflate(R.layout.fragment_planned_payment, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         plannedPaymentPresenter.attachView(this);
 
         showUserInterface();
 
-        plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
-                initialDisbursalDate, false);
+        fetchPlannedPayment();
 
         return rootView;
     }
 
     @Override
+    public void fetchPlannedPayment() {
+        rvPlannedPayment.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
+        plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
+                initialDisbursalDate, false);
+    }
+
+    @Override
     public void showUserInterface() {
         //TODO fix null pointer exception in toolbar
         if (toolbar != null) {
@@ -159,10 +163,9 @@
         }
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void onRetry() {
-        plannedPaymentPresenter.fetchPlannedPayment(productIdentifier, caseIdentifier, 0,
-                initialDisbursalDate, false);
+        fetchPlannedPayment();
     }
 
     @Override
@@ -205,18 +208,18 @@
     @Override
     public void showEmptyPayments(String message) {
         showRecyclerView(false);
-        tvError.setText(getString(R.string.empty_planned_payments));
-        showMessage(getString(R.string.empty_planned_payments));
+        showFineractEmptyUI(getString(R.string.planned_payments),
+                getString(R.string.planned_payments), R.drawable.ic_payment_black_24dp);
     }
 
     @Override
     public void showRecyclerView(boolean visible) {
         if (visible) {
             rvPlannedPayment.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvPlannedPayment.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
@@ -236,10 +239,19 @@
     }
 
     @Override
-    public void showError() {
+    public void showNoInternetConnection() {
         showRecyclerView(false);
-        tvError.setText(getString(R.string.error_loading_planned_payment));
-        showMessage(getString(R.string.error_loading_planned_payment));
+        showFineractNoInternetUI();
+    }
+
+    @Override
+    public void showError(String message) {
+        if (plannedPaymentAdapter.getItemCount() != 0) {
+            showMessage(message);
+        } else {
+            showRecyclerView(false);
+            showFineractErrorUI(getString(R.string.planned_payments));
+        }
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
index 85357da..1e7c2e9 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/loanaccounts/plannedpayment/PlannedPaymentPresenter.java
@@ -6,6 +6,7 @@
 import org.apache.fineract.data.datamanager.DataManagerIndividualLending;
 import org.apache.fineract.data.models.payment.PlannedPayment;
 import org.apache.fineract.data.models.payment.PlannedPaymentPage;
+import org.apache.fineract.exceptions.NoConnectivityException;
 import org.apache.fineract.injection.ApplicationContext;
 import org.apache.fineract.injection.ConfigPersistent;
 import org.apache.fineract.ui.base.BasePresenter;
@@ -87,13 +88,17 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        if (loadmore) {
+                        if (loadmore && !(throwable instanceof NoConnectivityException)) {
                             getMvpView().showMessage(
                                     context.getString(R.string.error_loading_planned_payment));
+                        } else if (loadmore && (throwable instanceof NoConnectivityException)) {
+                            getMvpView().showMessage(
+                                    context.getString(R.string.no_internet_connection));
                         } else {
-                            getMvpView().showError();
+                            showExceptionError(throwable,
+                                    context.getString(R.string.error_loading_planned_payment));
                         }
                     }
 
diff --git a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
index 84b39fc..9956991 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginActivity.java
@@ -10,6 +10,7 @@
 import org.apache.fineract.data.local.PreferencesHelper;
 import org.apache.fineract.data.models.Authentication;
 import org.apache.fineract.ui.base.FineractBaseActivity;
+import org.apache.fineract.ui.base.Toaster;
 import org.apache.fineract.ui.online.DashboardActivity;
 
 import javax.inject.Inject;
@@ -88,6 +89,11 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        Toaster.show(findViewById(android.R.id.content), R.string.no_internet_connection);
+    }
+
+    @Override
     public void showError(String errorMessage) {
         Toast.makeText(this, errorMessage, Toast.LENGTH_LONG).show();
     }
diff --git a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
index e412876..5e5de54 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/login/LoginPresenter.java
@@ -9,6 +9,7 @@
 import org.apache.fineract.data.datamanager.DataManagerAuth;
 import org.apache.fineract.data.models.Authentication;
 import org.apache.fineract.data.models.error.MifosError;
+import org.apache.fineract.exceptions.NoConnectivityException;
 import org.apache.fineract.injection.ApplicationContext;
 import org.apache.fineract.injection.ConfigPersistent;
 import org.apache.fineract.ui.base.BasePresenter;
@@ -75,9 +76,8 @@
                     @Override
                     public void onError(Throwable throwable) {
                         getMvpView().hideProgressDialog();
-                        if (throwable instanceof IOException) {
-                            getMvpView().showError(
-                                    context.getString(R.string.no_internet_connection));
+                        if (throwable instanceof NoConnectivityException) {
+                            getMvpView().showNoInternetConnection();
                         }
 
                         MifosError mifosError = new MifosError();
diff --git a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
index 9bfa22e..247d453 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesFragment.java
@@ -2,16 +2,12 @@
 
 import android.os.Bundle;
 import android.support.annotation.Nullable;
-import android.support.v4.content.ContextCompat;
 import android.support.v4.widget.SwipeRefreshLayout;
 import android.support.v7.widget.LinearLayoutManager;
 import android.support.v7.widget.RecyclerView;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
-import android.widget.ImageView;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
 
 import org.apache.fineract.R;
 import org.apache.fineract.data.models.rolesandpermission.Role;
@@ -41,14 +37,8 @@
     @BindView(R.id.swipe_container)
     SwipeRefreshLayout swipeRefreshLayout;
 
-    @BindView(R.id.rl_error)
-    RelativeLayout rlError;
-
-    @BindView(R.id.iv_retry)
-    ImageView ivRetry;
-
-    @BindView(R.id.tv_error)
-    TextView tvError;
+    @BindView(R.id.layout_error)
+    View layoutError;
 
     View rootView;
 
@@ -72,6 +62,7 @@
         rootView = inflater.inflate(R.layout.fragment_roles_list, container, false);
         ((FineractBaseActivity) getActivity()).getActivityComponent().inject(this);
         ButterKnife.bind(this, rootView);
+        initializeFineractUIErrorHandler(getActivity(), rootView);
         rolesPresenter.attachView(this);
         setToolbarTitle(getString(R.string.manage_roles));
 
@@ -91,9 +82,9 @@
         rolesPresenter.fetchRoles();
     }
 
-    @OnClick(R.id.iv_retry)
+    @OnClick(R.id.btn_try_again)
     void reloadRoles() {
-        rlError.setVisibility(View.GONE);
+        layoutError.setVisibility(View.GONE);
         rvRoles.setVisibility(View.GONE);
         rolesPresenter.fetchRoles();
     }
@@ -120,19 +111,18 @@
     @Override
     public void showEmptyRoles() {
         showRecyclerView(false);
-        tvError.setText(R.string.empty_roles);
-        ivRetry.setImageDrawable(ContextCompat.getDrawable(getActivity(),
-                R.drawable.ic_assignment_turned_in_black_24dp));
+        showFineractEmptyUI(getString(R.string.roles_and_permissions), getString(R.string.role),
+                R.drawable.ic_lock_black_24dp);
     }
 
     @Override
     public void showRecyclerView(Boolean status) {
         if (status) {
             rvRoles.setVisibility(View.VISIBLE);
-            rlError.setVisibility(View.GONE);
+            layoutError.setVisibility(View.GONE);
         } else {
             rvRoles.setVisibility(View.GONE);
-            rlError.setVisibility(View.VISIBLE);
+            layoutError.setVisibility(View.VISIBLE);
         }
     }
 
@@ -147,9 +137,15 @@
     }
 
     @Override
+    public void showNoInternetConnection() {
+        showRecyclerView(false);
+        showFineractNoInternetUI();
+    }
+
+    @Override
     public void showError(String message) {
         showRecyclerView(false);
-        tvError.setText(message);
+        showFineractErrorUI(getString(R.string.roles_and_permissions));
     }
 
     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
index b24d86a..8afd1c0 100644
--- a/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
+++ b/app/src/main/java/org/apache/fineract/ui/online/roles/roleslist/RolesPresenter.java
@@ -56,9 +56,10 @@
                     }
 
                     @Override
-                    public void onError(Throwable e) {
+                    public void onError(Throwable throwable) {
                         getMvpView().hideProgressbar();
-                        getMvpView().showError(context.getString(R.string.error_fetching_roles));
+                        showExceptionError(throwable,
+                                context.getString(R.string.error_fetching_roles));
                     }
 
                     @Override
diff --git a/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java b/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
index 9f84055..0bf6eb6 100644
--- a/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
+++ b/app/src/main/java/org/apache/fineract/ui/uierrorhandler/FineractUIErrorHandler.java
@@ -19,6 +19,7 @@
 public class FineractUIErrorHandler {
 
     private ImageView ivEmptyFeatureImage;
+    private ImageView ivErrorNoInternet;
     private TextView tvFeatureName;
     private TextView tvSubFeatureName;
     private Button btnTryAgain;
@@ -55,6 +56,7 @@
                 llErrorToLoad.setVisibility(View.VISIBLE);
                 btnTryAgain.setText(context.getString(R.string.try_again));
                 tvErrorFeatureName.setText(featureName);
+                ivErrorNoInternet.setImageResource(R.drawable.ic_cloud_off_black_24dp);
                 break;
             case NO_INTERNET:
                 llEmptyUI.setVisibility(View.GONE);
@@ -62,6 +64,7 @@
                 llNoInternet.setVisibility(View.VISIBLE);
                 llErrorToLoad.setVisibility(View.VISIBLE);
                 btnTryAgain.setText(context.getString(R.string.retry));
+                ivErrorNoInternet.setImageResource(R.drawable.ic_portable_wifi_off_black_24dp);
                 break;
         }
     }
@@ -76,5 +79,6 @@
         llError = ButterKnife.findById(view, R.id.ll_error);
         btnTryAgain = ButterKnife.findById(view, R.id.btn_try_again);
         tvErrorFeatureName = ButterKnife.findById(view, R.id.tv_error_feature_name);
+        ivErrorNoInternet = ButterKnife.findById(view, R.id.iv_error_no_connection);
     }
 }
diff --git a/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java b/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
index f7343f6..fc50b06 100644
--- a/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
+++ b/app/src/main/java/org/apache/fineract/utils/MifosErrorUtils.java
@@ -32,6 +32,10 @@
         return gson.fromJson(serverResponse, MifosError.class);
     }
 
+    public static String getFineractError(Throwable throwable, String message) {
+        return message;
+    }
+
     public static String getErrorMessage(Context context, Throwable throwable) {
         MifosError mifosError = new MifosError();
         Converter<ResponseBody, MifosError> errorConverter =
diff --git a/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java b/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java
new file mode 100644
index 0000000..ae5386a
--- /dev/null
+++ b/app/src/main/java/org/apache/fineract/utils/NetworkUtil.java
@@ -0,0 +1,110 @@
+package org.apache.fineract.utils;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.telephony.TelephonyManager;
+
+/**
+ * Check device's network connectivity and speed
+ *
+ * @author emil http://stackoverflow.com/users/220710/emil
+ */
+public class NetworkUtil {
+
+    /**
+     * Get the network info
+     */
+    public static NetworkInfo getNetworkInfo(Context context) {
+        ConnectivityManager cm = (ConnectivityManager)
+                context.getSystemService(Context.CONNECTIVITY_SERVICE);
+        return cm.getActiveNetworkInfo();
+    }
+
+    /**
+     * Check if there is any connectivity
+     */
+    public static boolean isConnected(Context context) {
+        NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+        return (info != null && info.isConnected());
+    }
+
+    /**
+     * Check if there is any connectivity to a Wifi network
+     */
+    public static boolean isConnectedWifi(Context context) {
+        NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+        return (info != null && info.isConnected()
+                && info.getType() == ConnectivityManager.TYPE_WIFI);
+    }
+
+    /**
+     * Check if there is any connectivity to a mobile network
+     */
+    public static boolean isConnectedMobile(Context context) {
+        NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+        return (info != null && info.isConnected()
+                && info.getType() == ConnectivityManager.TYPE_MOBILE);
+    }
+
+    /**
+     * Check if there is fast connectivity
+     */
+    public static boolean isConnectedFast(Context context) {
+        NetworkInfo info = NetworkUtil.getNetworkInfo(context);
+        return (info != null && info.isConnected() &&
+                NetworkUtil.isConnectionFast(info.getType(), info.getSubtype()));
+    }
+
+    /**
+     * Check if the connection is fast
+     */
+    public static boolean isConnectionFast(int type, int subType) {
+        if (type == ConnectivityManager.TYPE_WIFI) {
+            return true;
+        } else if (type == ConnectivityManager.TYPE_MOBILE) {
+            switch (subType) {
+                case TelephonyManager.NETWORK_TYPE_1xRTT:
+                    return false; // ~ 50-100 kbps
+                case TelephonyManager.NETWORK_TYPE_CDMA:
+                    return false; // ~ 14-64 kbps
+                case TelephonyManager.NETWORK_TYPE_EDGE:
+                    return false; // ~ 50-100 kbps
+                case TelephonyManager.NETWORK_TYPE_EVDO_0:
+                    return true; // ~ 400-1000 kbps
+                case TelephonyManager.NETWORK_TYPE_EVDO_A:
+                    return true; // ~ 600-1400 kbps
+                case TelephonyManager.NETWORK_TYPE_GPRS:
+                    return false; // ~ 100 kbps
+                case TelephonyManager.NETWORK_TYPE_HSDPA:
+                    return true; // ~ 2-14 Mbps
+                case TelephonyManager.NETWORK_TYPE_HSPA:
+                    return true; // ~ 700-1700 kbps
+                case TelephonyManager.NETWORK_TYPE_HSUPA:
+                    return true; // ~ 1-23 Mbps
+                case TelephonyManager.NETWORK_TYPE_UMTS:
+                    return true; // ~ 400-7000 kbps
+                /*
+                 * Above API level 7, make sure to set android:targetSdkVersion
+                 * to appropriate level to use these
+                 */
+                case TelephonyManager.NETWORK_TYPE_EHRPD: // API level 11 
+                    return true; // ~ 1-2 Mbps
+                case TelephonyManager.NETWORK_TYPE_EVDO_B: // API level 9
+                    return true; // ~ 5 Mbps
+                case TelephonyManager.NETWORK_TYPE_HSPAP: // API level 13
+                    return true; // ~ 10-20 Mbps
+                case TelephonyManager.NETWORK_TYPE_IDEN: // API level 8
+                    return false; // ~25 kbps 
+                case TelephonyManager.NETWORK_TYPE_LTE: // API level 11
+                    return true; // ~ 10+ Mbps
+                // Unknown
+                case TelephonyManager.NETWORK_TYPE_UNKNOWN:
+                default:
+                    return false;
+            }
+        } else {
+            return false;
+        }
+    }
+}
diff --git a/app/src/main/res/layout/fragment_customer_activities.xml b/app/src/main/res/layout/fragment_customer_activities.xml
index bb3d494..3e328d8 100644
--- a/app/src/main/res/layout/fragment_customer_activities.xml
+++ b/app/src/main/res/layout/fragment_customer_activities.xml
@@ -19,8 +19,8 @@
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_customer_deposit_details.xml b/app/src/main/res/layout/fragment_customer_deposit_details.xml
index 9ed7459..c47a1b3 100644
--- a/app/src/main/res/layout/fragment_customer_deposit_details.xml
+++ b/app/src/main/res/layout/fragment_customer_deposit_details.xml
@@ -212,12 +212,13 @@
     </android.support.v7.widget.CardView>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_edit_deposit_account"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_customer_details.xml b/app/src/main/res/layout/fragment_customer_details.xml
index ceb7735..f86dc14 100644
--- a/app/src/main/res/layout/fragment_customer_details.xml
+++ b/app/src/main/res/layout/fragment_customer_details.xml
@@ -1,667 +1,673 @@
 <?xml version="1.0" encoding="utf-8"?>
 <android.support.design.widget.CoordinatorLayout
-    android:id="@+id/cl_customer_details"
     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"
-    android:fitsSystemWindows="true"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
     android:visibility="visible">
 
-    <android.support.design.widget.AppBarLayout
-        android:fitsSystemWindows="true"
-        android:id="@+id/app_bar_layout"
-        android:layout_height="@dimen/detail_backdrop_height"
-        android:layout_width="match_parent"
-        android:theme="@style/AppTheme.AppBarOverlay">
-
-        <android.support.design.widget.CollapsingToolbarLayout
-            android:clickable="true"
-            android:focusable="true"
-            android:fitsSystemWindows="true"
-            android:foreground="?android:attr/selectableItemBackground"
-            android:id="@+id/collapsing_toolbar"
-            android:layout_height="match_parent"
-            android:layout_width="match_parent"
-            app:contentScrim="?attr/colorPrimary"
-            app:layout_scrollFlags="scroll|exitUntilCollapsed">
-
-            <ImageView
-                android:contentDescription="@string/customer_image"
-                android:fitsSystemWindows="true"
-                android:id="@+id/iv_customer_profile"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent"
-                android:scaleType="fitCenter"
-                android:src="@drawable/mifos_logo_new"
-                app:layout_collapseMode="parallax"/>
-
-            <android.support.v7.widget.Toolbar
-                android:id="@+id/toolbar"
-                android:layout_height="?attr/actionBarSize"
-                android:layout_width="match_parent"
-                app:layout_collapseMode="pin">
-
-                <include
-                    layout="@layout/layout_collapsing_header_view"
-                    android:id="@+id/toolbar_header_view"
-                    android:layout_height="wrap_content"
-                    android:layout_marginEnd="@dimen/header_view_end_margin_right"
-                    android:layout_marginRight="@dimen/header_view_end_margin_right"
-                    android:layout_width="match_parent"
-                    android:visibility="gone"/>
-
-            </android.support.v7.widget.Toolbar>
-
-        </android.support.design.widget.CollapsingToolbarLayout>
-
-    </android.support.design.widget.AppBarLayout>
-
-    <android.support.v4.widget.NestedScrollView
-        xmlns:android="http://schemas.android.com/apk/res/android"
-        xmlns:app="http://schemas.android.com/apk/res-auto"
-        android:background="@color/gray_light"
-        android:id="@+id/ncv_customer_details"
+    <android.support.design.widget.CoordinatorLayout
+        android:id="@+id/cl_customer_details"
         android:layout_height="match_parent"
-        android:layout_width="match_parent"
-        app:layout_behavior="@string/appbar_scrolling_view_behavior">
+        android:layout_width="match_parent">
 
-        <LinearLayout
-            android:layout_height="match_parent"
+        <android.support.design.widget.AppBarLayout
+            android:fitsSystemWindows="true"
+            android:id="@+id/app_bar_layout"
+            android:layout_height="@dimen/detail_backdrop_height"
             android:layout_width="match_parent"
-            android:orientation="vertical">
+            android:theme="@style/AppTheme.AppBarOverlay">
 
-            <android.support.v7.widget.CardView
-                xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:background="@color/white"
+            <android.support.design.widget.CollapsingToolbarLayout
                 android:clickable="true"
+                android:fitsSystemWindows="true"
+                android:focusable="true"
                 android:foreground="?android:attr/selectableItemBackground"
-                android:id="@+id/cv_customer"
+                android:id="@+id/collapsing_toolbar"
                 android:layout_height="match_parent"
                 android:layout_width="match_parent"
-                android:visibility="visible">
+                app:contentScrim="?attr/colorPrimary"
+                app:layout_scrollFlags="scroll|exitUntilCollapsed">
 
-                <LinearLayout
+                <ImageView
+                    android:contentDescription="@string/customer_image"
+                    android:fitsSystemWindows="true"
+                    android:id="@+id/iv_customer_profile"
                     android:layout_height="match_parent"
                     android:layout_width="match_parent"
-                    android:orientation="vertical"
-                    android:padding="16dp">
+                    android:scaleType="fitCenter"
+                    android:src="@drawable/mifos_logo_new"
+                    app:layout_collapseMode="parallax"/>
+
+                <android.support.v7.widget.Toolbar
+                    android:id="@+id/toolbar"
+                    android:layout_height="?attr/actionBarSize"
+                    android:layout_width="match_parent"
+                    app:layout_collapseMode="pin">
+
+                    <include
+                        layout="@layout/layout_collapsing_header_view"
+                        android:id="@+id/toolbar_header_view"
+                        android:layout_height="wrap_content"
+                        android:layout_marginEnd="@dimen/header_view_end_margin_right"
+                        android:layout_marginRight="@dimen/header_view_end_margin_right"
+                        android:layout_width="match_parent"
+                        android:visibility="gone"/>
+
+                </android.support.v7.widget.Toolbar>
+
+            </android.support.design.widget.CollapsingToolbarLayout>
+
+        </android.support.design.widget.AppBarLayout>
+
+        <android.support.v4.widget.NestedScrollView
+            xmlns:android="http://schemas.android.com/apk/res/android"
+            xmlns:app="http://schemas.android.com/apk/res-auto"
+            android:background="@color/gray_light"
+            android:id="@+id/ncv_customer_details"
+            android:layout_height="match_parent"
+            android:layout_width="match_parent"
+            app:layout_behavior="@string/appbar_scrolling_view_behavior">
+
+            <LinearLayout
+                android:layout_height="match_parent"
+                android:layout_width="match_parent"
+                android:orientation="vertical">
+
+                <android.support.v7.widget.CardView
+                    xmlns:android="http://schemas.android.com/apk/res/android"
+                    xmlns:app="http://schemas.android.com/apk/res-auto"
+                    android:background="@color/white"
+                    android:clickable="true"
+                    android:foreground="?android:attr/selectableItemBackground"
+                    android:id="@+id/cv_customer"
+                    android:layout_height="match_parent"
+                    android:layout_width="match_parent"
+                    android:visibility="visible">
 
                     <LinearLayout
-                        android:id="@+id/ll_current_status"
+                        android:layout_height="match_parent"
+                        android:layout_width="match_parent"
+                        android:orientation="vertical"
+                        android:padding="16dp">
+
+                        <LinearLayout
+                            android:id="@+id/ll_current_status"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="vertical">
+
+                            <TextView
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/current_status"
+                                android:textColor="@color/colorSecondaryText"
+                                android:textSize="@dimen/text_size_12sp"/>
+
+                            <LinearLayout
+                                android:layout_height="match_parent"
+                                android:layout_width="wrap_content"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp">
+
+                                <LinearLayout
+                                    style="@style/circleLayout"
+                                    android:gravity="center"
+                                    android:id="@+id/ll_task1"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp">
+
+                                    <ImageView
+                                        android:id="@+id/iv_current_status"
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        app:srcCompat="@drawable/ic_check_circle_black_24dp"/>
+
+                                </LinearLayout>
+
+                                <TextView
+                                    android:id="@+id/tv_current_status"
+                                    android:layout_gravity="center"
+                                    android:layout_height="wrap_content"
+                                    android:layout_width="wrap_content"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="Active"/>
+
+                            </LinearLayout>
+
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:id="@+id/ll_address"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="vertical"
+                            android:paddingTop="@dimen/layout_padding_16dp">
+
+                            <TextView
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/address"
+                                android:textColor="@color/colorSecondaryText"
+                                android:textSize="@dimen/text_size_12sp"/>
+
+                            <RelativeLayout
+                                android:layout_height="match_parent"
+                                android:layout_width="match_parent"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:id="@+id/iv_address"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_place_black_24dp"/>
+
+                                <TextView
+                                    android:foregroundGravity="center"
+                                    android:id="@+id/tv_address"
+                                    android:isScrollContainer="false"
+                                    android:layout_centerInParent="true"
+                                    android:layout_height="match_parent"
+                                    android:layout_toEndOf="@+id/iv_address"
+                                    android:layout_toRightOf="@+id/iv_address"
+                                    android:layout_width="match_parent"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="Lärchen,Lärchenhof 7, Nickenich,"/>
+
+                            </RelativeLayout>
+
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:id="@+id/ll_contact_info"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="vertical"
+                            android:paddingTop="@dimen/layout_padding_16dp">
+
+                            <TextView
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/contact_information"
+                                android:textColor="@color/colorSecondaryText"
+                                android:textSize="@dimen/text_size_12sp"/>
+
+                            <TextView
+                                android:id="@+id/tv_no_contact_details_available"
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:paddingBottom="@dimen/layout_padding_4dp"
+                                android:paddingTop="@dimen/layout_padding_4dp"
+                                android:text="@string/no_contact_details_available"
+                                android:visibility="gone"/>
+
+                            <RelativeLayout
+                                android:id="@+id/rl_email"
+                                android:layout_height="match_parent"
+                                android:layout_width="match_parent"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp"
+                                android:visibility="gone">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:id="@+id/iv_email"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_email_black_24dp"/>
+
+                                <TextView
+                                    android:foregroundGravity="center"
+                                    android:id="@+id/tv_email"
+                                    android:isScrollContainer="false"
+                                    android:layout_centerInParent="true"
+                                    android:layout_height="match_parent"
+                                    android:layout_toEndOf="@+id/iv_email"
+                                    android:layout_toRightOf="@+id/iv_email"
+                                    android:layout_width="match_parent"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="example@gmail.com"/>
+
+                            </RelativeLayout>
+
+                            <RelativeLayout
+                                android:id="@+id/rl_phone_no"
+                                android:layout_height="match_parent"
+                                android:layout_width="match_parent"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp"
+                                android:visibility="gone">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:id="@+id/iv_phone_no"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_phone_black_24dp"/>
+
+                                <TextView
+                                    android:foregroundGravity="center"
+                                    android:id="@+id/tv_phone_no"
+                                    android:isScrollContainer="false"
+                                    android:layout_centerInParent="true"
+                                    android:layout_height="match_parent"
+                                    android:layout_toEndOf="@+id/iv_phone_no"
+                                    android:layout_toRightOf="@+id/iv_phone_no"
+                                    android:layout_width="match_parent"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="PrefixOperator - NoTelp"/>
+
+                            </RelativeLayout>
+
+                            <RelativeLayout
+                                android:id="@+id/rl_mobile_no"
+                                android:layout_height="match_parent"
+                                android:layout_width="match_parent"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp"
+                                android:visibility="gone">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:id="@+id/iv_mobile_no"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_smartphone_black_24dp"/>
+
+                                <TextView
+                                    android:foregroundGravity="center"
+                                    android:id="@+id/tv_mobile_no"
+                                    android:isScrollContainer="false"
+                                    android:layout_centerInParent="true"
+                                    android:layout_height="match_parent"
+                                    android:layout_toEndOf="@+id/iv_mobile_no"
+                                    android:layout_toRightOf="@+id/iv_mobile_no"
+                                    android:layout_width="match_parent"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="KodeArea - Notelp"/>
+
+                            </RelativeLayout>
+
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:id="@+id/ll_birthday"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="vertical"
+                            android:paddingTop="@dimen/layout_padding_16dp">
+
+                            <TextView
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:text="@string/birthday"
+                                android:textColor="@color/colorSecondaryText"
+                                android:textSize="@dimen/text_size_12sp"/>
+
+                            <RelativeLayout
+                                android:layout_height="match_parent"
+                                android:layout_width="match_parent"
+                                android:orientation="horizontal"
+                                android:paddingTop="@dimen/layout_padding_4dp">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:id="@+id/iv_birthday"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_cake_black_24dp"/>
+
+                                <TextView
+                                    android:foregroundGravity="center"
+                                    android:id="@+id/tv_birthday"
+                                    android:isScrollContainer="false"
+                                    android:layout_centerInParent="true"
+                                    android:layout_height="match_parent"
+                                    android:layout_toEndOf="@+id/iv_birthday"
+                                    android:layout_toRightOf="@+id/iv_birthday"
+                                    android:layout_width="match_parent"
+                                    android:paddingEnd="0dp"
+                                    android:paddingLeft="@dimen/layout_padding_8dp"
+                                    android:paddingRight="0dp"
+                                    android:paddingStart="@dimen/layout_padding_8dp"
+                                    tools:text="1974-7-18"/>
+
+                            </RelativeLayout>
+
+                        </LinearLayout>
+
+                    </LinearLayout>
+
+                </android.support.v7.widget.CardView>
+
+                <TextView
+                    android:layout_height="match_parent"
+                    android:layout_width="match_parent"
+                    android:paddingBottom="@dimen/layout_padding_8dp"
+                    android:paddingEnd="0dp"
+                    android:paddingLeft="@dimen/layout_padding_8dp"
+                    android:paddingRight="0dp"
+                    android:paddingStart="@dimen/layout_padding_8dp"
+                    android:paddingTop="@dimen/layout_padding_16dp"
+                    android:text="@string/financial_products"/>
+
+                <android.support.v7.widget.CardView
+                    xmlns:android="http://schemas.android.com/apk/res/android"
+                    xmlns:app="http://schemas.android.com/apk/res-auto"
+                    android:background="@color/white"
+                    android:id="@+id/cv_financial_products"
+                    android:layout_height="match_parent"
+                    android:layout_width="match_parent"
+                    android:visibility="visible">
+
+                    <LinearLayout
                         android:layout_height="match_parent"
                         android:layout_width="match_parent"
                         android:orientation="vertical">
 
-                        <TextView
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:text="@string/current_status"
-                            android:textColor="@color/colorSecondaryText"
-                            android:textSize="@dimen/text_size_12sp"/>
-
                         <LinearLayout
+                            android:clickable="true"
+                            android:foreground="?android:attr/selectableItemBackground"
+                            android:id="@+id/ll_loan_accounts"
                             android:layout_height="match_parent"
-                            android:layout_width="wrap_content"
+                            android:layout_width="match_parent"
                             android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp">
+                            android:padding="16dp">
 
                             <LinearLayout
-                                style="@style/circleLayout"
-                                android:gravity="center"
-                                android:id="@+id/ll_task1"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp">
+                                android:layout_height="wrap_content"
+                                android:layout_width="wrap_content"
+                                android:orientation="horizontal">
 
                                 <ImageView
-                                    android:id="@+id/iv_current_status"
+                                    style="@style/circleLayout"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_payment_black_24dp"/>
+
+                                <LinearLayout
                                     android:layout_height="wrap_content"
+                                    android:layout_marginLeft="@dimen/layout_padding_8dp"
+                                    android:layout_marginStart="@dimen/layout_padding_8dp"
                                     android:layout_width="wrap_content"
-                                    app:srcCompat="@drawable/ic_check_circle_black_24dp"/>
+                                    android:orientation="vertical">
+
+                                    <TextView
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/loan_accounts"/>
+
+                                    <TextView
+                                        android:layout_height="match_parent"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/manage_loan_accounts"
+                                        android:textSize="@dimen/text_size_12sp"/>
+
+                                </LinearLayout>
 
                             </LinearLayout>
 
-                            <TextView
-                                android:id="@+id/tv_current_status"
-                                android:layout_gravity="center"
+
+                        </LinearLayout>
+
+                        <LinearLayout
+                            android:clickable="true"
+                            android:foreground="?android:attr/selectableItemBackground"
+                            android:id="@+id/ll_deposit_accounts"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:padding="16dp">
+
+                            <LinearLayout
                                 android:layout_height="wrap_content"
                                 android:layout_width="wrap_content"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="Active"/>
+                                android:orientation="horizontal">
+
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_attach_money_black_24dp"/>
+
+                                <LinearLayout
+                                    android:layout_height="wrap_content"
+                                    android:layout_marginLeft="@dimen/layout_padding_8dp"
+                                    android:layout_marginStart="@dimen/layout_padding_8dp"
+                                    android:layout_width="match_parent"
+                                    android:orientation="vertical">
+
+                                    <TextView
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/deposit_accounts"/>
+
+                                    <TextView
+                                        android:layout_height="match_parent"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/manage_deposit_accounts"
+                                        android:textSize="@dimen/text_size_12sp"/>
+
+                                </LinearLayout>
+
+                            </LinearLayout>
 
                         </LinearLayout>
 
                     </LinearLayout>
 
-                    <LinearLayout
-                        android:id="@+id/ll_address"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:paddingTop="@dimen/layout_padding_16dp">
+                </android.support.v7.widget.CardView>
 
-                        <TextView
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:text="@string/address"
-                            android:textColor="@color/colorSecondaryText"
-                            android:textSize="@dimen/text_size_12sp"/>
-
-                        <RelativeLayout
-                            android:layout_height="match_parent"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:id="@+id/iv_address"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_place_black_24dp"/>
-
-                            <TextView
-                                android:foregroundGravity="center"
-                                android:id="@+id/tv_address"
-                                android:isScrollContainer="false"
-                                android:layout_centerInParent="true"
-                                android:layout_height="match_parent"
-                                android:layout_toEndOf="@+id/iv_address"
-                                android:layout_toRightOf="@+id/iv_address"
-                                android:layout_width="match_parent"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="Lärchen,Lärchenhof 7, Nickenich,"/>
-
-                        </RelativeLayout>
-
-                    </LinearLayout>
-
-                    <LinearLayout
-                        android:id="@+id/ll_contact_info"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:paddingTop="@dimen/layout_padding_16dp">
-
-                        <TextView
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:text="@string/contact_information"
-                            android:textColor="@color/colorSecondaryText"
-                            android:textSize="@dimen/text_size_12sp"/>
-
-                        <TextView
-                            android:id="@+id/tv_no_contact_details_available"
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:paddingBottom="@dimen/layout_padding_4dp"
-                            android:paddingTop="@dimen/layout_padding_4dp"
-                            android:text="@string/no_contact_details_available"
-                            android:visibility="gone"/>
-
-                        <RelativeLayout
-                            android:id="@+id/rl_email"
-                            android:layout_height="match_parent"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp"
-                            android:visibility="gone">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:id="@+id/iv_email"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_email_black_24dp"/>
-
-                            <TextView
-                                android:foregroundGravity="center"
-                                android:id="@+id/tv_email"
-                                android:isScrollContainer="false"
-                                android:layout_centerInParent="true"
-                                android:layout_height="match_parent"
-                                android:layout_toEndOf="@+id/iv_email"
-                                android:layout_toRightOf="@+id/iv_email"
-                                android:layout_width="match_parent"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="example@gmail.com"/>
-
-                        </RelativeLayout>
-
-                        <RelativeLayout
-                            android:id="@+id/rl_phone_no"
-                            android:layout_height="match_parent"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp"
-                            android:visibility="gone">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:id="@+id/iv_phone_no"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_phone_black_24dp"/>
-
-                            <TextView
-                                android:foregroundGravity="center"
-                                android:id="@+id/tv_phone_no"
-                                android:isScrollContainer="false"
-                                android:layout_centerInParent="true"
-                                android:layout_height="match_parent"
-                                android:layout_toEndOf="@+id/iv_phone_no"
-                                android:layout_toRightOf="@+id/iv_phone_no"
-                                android:layout_width="match_parent"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="PrefixOperator - NoTelp"/>
-
-                        </RelativeLayout>
-
-                        <RelativeLayout
-                            android:id="@+id/rl_mobile_no"
-                            android:layout_height="match_parent"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp"
-                            android:visibility="gone">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:id="@+id/iv_mobile_no"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_smartphone_black_24dp"/>
-
-                            <TextView
-                                android:foregroundGravity="center"
-                                android:id="@+id/tv_mobile_no"
-                                android:isScrollContainer="false"
-                                android:layout_centerInParent="true"
-                                android:layout_height="match_parent"
-                                android:layout_toEndOf="@+id/iv_mobile_no"
-                                android:layout_toRightOf="@+id/iv_mobile_no"
-                                android:layout_width="match_parent"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="KodeArea - Notelp"/>
-
-                        </RelativeLayout>
-
-                    </LinearLayout>
-
-                    <LinearLayout
-                        android:id="@+id/ll_birthday"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="vertical"
-                        android:paddingTop="@dimen/layout_padding_16dp">
-
-                        <TextView
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:text="@string/birthday"
-                            android:textColor="@color/colorSecondaryText"
-                            android:textSize="@dimen/text_size_12sp"/>
-
-                        <RelativeLayout
-                            android:layout_height="match_parent"
-                            android:layout_width="match_parent"
-                            android:orientation="horizontal"
-                            android:paddingTop="@dimen/layout_padding_4dp">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:id="@+id/iv_birthday"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_cake_black_24dp"/>
-
-                            <TextView
-                                android:foregroundGravity="center"
-                                android:id="@+id/tv_birthday"
-                                android:isScrollContainer="false"
-                                android:layout_centerInParent="true"
-                                android:layout_height="match_parent"
-                                android:layout_toEndOf="@+id/iv_birthday"
-                                android:layout_toRightOf="@+id/iv_birthday"
-                                android:layout_width="match_parent"
-                                android:paddingEnd="0dp"
-                                android:paddingLeft="@dimen/layout_padding_8dp"
-                                android:paddingRight="0dp"
-                                android:paddingStart="@dimen/layout_padding_8dp"
-                                tools:text="1974-7-18"/>
-
-                        </RelativeLayout>
-
-                    </LinearLayout>
-
-                </LinearLayout>
-
-            </android.support.v7.widget.CardView>
-
-            <TextView
-                android:layout_height="match_parent"
-                android:layout_width="match_parent"
-                android:paddingBottom="@dimen/layout_padding_8dp"
-                android:paddingEnd="0dp"
-                android:paddingLeft="@dimen/layout_padding_8dp"
-                android:paddingRight="0dp"
-                android:paddingStart="@dimen/layout_padding_8dp"
-                android:paddingTop="@dimen/layout_padding_16dp"
-                android:text="@string/financial_products"/>
-
-            <android.support.v7.widget.CardView
-                xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:background="@color/white"
-                android:id="@+id/cv_financial_products"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent"
-                android:visibility="visible">
-
-                <LinearLayout
+                <TextView
                     android:layout_height="match_parent"
                     android:layout_width="match_parent"
-                    android:orientation="vertical">
+                    android:paddingBottom="@dimen/layout_padding_8dp"
+                    android:paddingEnd="0dp"
+                    android:paddingLeft="@dimen/layout_padding_8dp"
+                    android:paddingRight="0dp"
+                    android:paddingStart="@dimen/layout_padding_8dp"
+                    android:paddingTop="@dimen/layout_padding_16dp"
+                    android:text="@string/management"/>
+
+                <android.support.v7.widget.CardView
+                    xmlns:android="http://schemas.android.com/apk/res/android"
+                    xmlns:app="http://schemas.android.com/apk/res-auto"
+                    android:background="@color/white"
+                    android:id="@+id/cv_management"
+                    android:layout_height="match_parent"
+                    android:layout_width="match_parent">
 
                     <LinearLayout
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
-                        android:id="@+id/ll_loan_accounts"
                         android:layout_height="match_parent"
                         android:layout_width="match_parent"
-                        android:orientation="horizontal"
-                        android:padding="16dp">
+                        android:orientation="vertical">
 
                         <LinearLayout
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:orientation="horizontal">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_payment_black_24dp"/>
+                            android:clickable="true"
+                            android:foreground="?android:attr/selectableItemBackground"
+                            android:id="@+id/ll_identifier_cards"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:padding="16dp">
 
                             <LinearLayout
                                 android:layout_height="wrap_content"
-                                android:layout_marginLeft="@dimen/layout_padding_8dp"
-                                android:layout_marginStart="@dimen/layout_padding_8dp"
                                 android:layout_width="wrap_content"
-                                android:orientation="vertical">
+                                android:orientation="horizontal">
 
-                                <TextView
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_person_outline_black_24dp"/>
+
+
+                                <LinearLayout
                                     android:layout_height="wrap_content"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/loan_accounts"/>
+                                    android:layout_marginLeft="@dimen/layout_padding_8dp"
+                                    android:layout_marginStart="@dimen/layout_padding_8dp"
+                                    android:layout_width="match_parent"
+                                    android:orientation="vertical">
 
-                                <TextView
-                                    android:layout_height="match_parent"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/manage_loan_accounts"
-                                    android:textSize="@dimen/text_size_12sp"/>
+                                    <TextView
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/identification_cards"/>
+
+                                    <TextView
+                                        android:layout_height="match_parent"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/view_identification_card"
+                                        android:textSize="@dimen/text_size_12sp"/>
+
+                                </LinearLayout>
 
                             </LinearLayout>
 
                         </LinearLayout>
 
-
-                    </LinearLayout>
-
-                    <LinearLayout
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
-                        android:id="@+id/ll_deposit_accounts"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="horizontal"
-                        android:padding="16dp">
-
                         <LinearLayout
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:orientation="horizontal">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_attach_money_black_24dp"/>
+                            android:clickable="true"
+                            android:foreground="?android:attr/selectableItemBackground"
+                            android:id="@+id/ll_tasks"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:padding="16dp">
 
                             <LinearLayout
                                 android:layout_height="wrap_content"
-                                android:layout_marginLeft="@dimen/layout_padding_8dp"
-                                android:layout_marginStart="@dimen/layout_padding_8dp"
-                                android:layout_width="match_parent"
-                                android:orientation="vertical">
+                                android:layout_width="wrap_content"
+                                android:orientation="horizontal">
 
-                                <TextView
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_task_black_24dp"/>
+
+                                <LinearLayout
                                     android:layout_height="wrap_content"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/deposit_accounts"/>
+                                    android:layout_marginLeft="@dimen/layout_padding_8dp"
+                                    android:layout_marginStart="@dimen/layout_padding_8dp"
+                                    android:layout_width="match_parent"
+                                    android:orientation="vertical">
 
-                                <TextView
-                                    android:layout_height="match_parent"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/manage_deposit_accounts"
-                                    android:textSize="@dimen/text_size_12sp"/>
+                                    <TextView
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/tasks"/>
+
+                                    <TextView
+                                        android:layout_height="match_parent"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/change_customer_status"
+                                        android:textSize="@dimen/text_size_12sp"/>
+
+                                </LinearLayout>
 
                             </LinearLayout>
 
+
                         </LinearLayout>
 
-                    </LinearLayout>
-
-                </LinearLayout>
-
-            </android.support.v7.widget.CardView>
-
-            <TextView
-                android:layout_height="match_parent"
-                android:layout_width="match_parent"
-                android:paddingBottom="@dimen/layout_padding_8dp"
-                android:paddingEnd="0dp"
-                android:paddingLeft="@dimen/layout_padding_8dp"
-                android:paddingRight="0dp"
-                android:paddingStart="@dimen/layout_padding_8dp"
-                android:paddingTop="@dimen/layout_padding_16dp"
-                android:text="@string/management"/>
-
-            <android.support.v7.widget.CardView
-                xmlns:android="http://schemas.android.com/apk/res/android"
-                xmlns:app="http://schemas.android.com/apk/res-auto"
-                android:background="@color/white"
-                android:id="@+id/cv_management"
-                android:layout_height="match_parent"
-                android:layout_width="match_parent">
-
-                <LinearLayout
-                    android:layout_height="match_parent"
-                    android:layout_width="match_parent"
-                    android:orientation="vertical">
-
-                    <LinearLayout
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
-                        android:id="@+id/ll_identifier_cards"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="horizontal"
-                        android:padding="16dp">
-
                         <LinearLayout
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:orientation="horizontal">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_person_outline_black_24dp"/>
-
+                            android:clickable="true"
+                            android:foreground="?android:attr/selectableItemBackground"
+                            android:id="@+id/ll_activities"
+                            android:layout_height="match_parent"
+                            android:layout_width="match_parent"
+                            android:orientation="horizontal"
+                            android:padding="@dimen/layout_padding_16dp">
 
                             <LinearLayout
                                 android:layout_height="wrap_content"
-                                android:layout_marginLeft="@dimen/layout_padding_8dp"
-                                android:layout_marginStart="@dimen/layout_padding_8dp"
-                                android:layout_width="match_parent"
-                                android:orientation="vertical">
+                                android:layout_width="wrap_content"
+                                android:orientation="horizontal">
 
-                                <TextView
+                                <ImageView
+                                    style="@style/circleLayout"
+                                    android:layout_height="35dp"
+                                    android:layout_width="35dp"
+                                    app:srcCompat="@drawable/ic_event_black_24dp"/>
+
+                                <LinearLayout
                                     android:layout_height="wrap_content"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/identification_cards"/>
+                                    android:layout_marginLeft="@dimen/layout_padding_8dp"
+                                    android:layout_marginStart="@dimen/layout_padding_8dp"
+                                    android:layout_width="match_parent"
+                                    android:orientation="vertical">
 
-                                <TextView
-                                    android:layout_height="match_parent"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/view_identification_card"
-                                    android:textSize="@dimen/text_size_12sp"/>
+                                    <TextView
+                                        android:layout_height="wrap_content"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/activities"/>
+
+                                    <TextView
+                                        android:layout_height="match_parent"
+                                        android:layout_width="wrap_content"
+                                        android:text="@string/recent_activities"
+                                        android:textSize="@dimen/text_size_12sp"/>
+
+                                </LinearLayout>
 
                             </LinearLayout>
 
+
                         </LinearLayout>
 
                     </LinearLayout>
 
-                    <LinearLayout
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
-                        android:id="@+id/ll_tasks"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="horizontal"
-                        android:padding="16dp">
+                </android.support.v7.widget.CardView>
 
-                        <LinearLayout
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:orientation="horizontal">
+            </LinearLayout>
 
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_task_black_24dp"/>
+        </android.support.v4.widget.NestedScrollView>
 
-                            <LinearLayout
-                                android:layout_height="wrap_content"
-                                android:layout_marginLeft="@dimen/layout_padding_8dp"
-                                android:layout_marginStart="@dimen/layout_padding_8dp"
-                                android:layout_width="match_parent"
-                                android:orientation="vertical">
+        <include
+            layout="@layout/layout_collapsing_header_view"
+            android:id="@+id/float_header_view"
+            android:layout_height="wrap_content"
+            android:layout_width="match_parent"
+            app:layout_behavior="org.apache.fineract.ui.views.ViewBehavior"
+        />
 
-                                <TextView
-                                    android:layout_height="wrap_content"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/tasks"/>
+        <android.support.design.widget.FloatingActionButton
+            android:clickable="true"
+            android:focusable="true"
+            android:id="@+id/fab_edit_customer"
+            android:layout_height="wrap_content"
+            android:layout_margin="@dimen/fab_margin"
+            android:layout_width="wrap_content"
+            android:tint="@color/white"
+            app:layout_anchor="@+id/app_bar_layout"
+            app:layout_anchorGravity="bottom|end"
+            app:srcCompat="@drawable/ic_edit_black_24dp"/>
 
-                                <TextView
-                                    android:layout_height="match_parent"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/change_customer_status"
-                                    android:textSize="@dimen/text_size_12sp"/>
-
-                            </LinearLayout>
-
-                        </LinearLayout>
-
-
-                    </LinearLayout>
-
-                    <LinearLayout
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
-                        android:id="@+id/ll_activities"
-                        android:layout_height="match_parent"
-                        android:layout_width="match_parent"
-                        android:orientation="horizontal"
-                        android:padding="@dimen/layout_padding_16dp">
-
-                        <LinearLayout
-                            android:layout_height="wrap_content"
-                            android:layout_width="wrap_content"
-                            android:orientation="horizontal">
-
-                            <ImageView
-                                style="@style/circleLayout"
-                                android:layout_height="35dp"
-                                android:layout_width="35dp"
-                                app:srcCompat="@drawable/ic_event_black_24dp"/>
-
-                            <LinearLayout
-                                android:layout_height="wrap_content"
-                                android:layout_marginLeft="@dimen/layout_padding_8dp"
-                                android:layout_marginStart="@dimen/layout_padding_8dp"
-                                android:layout_width="match_parent"
-                                android:orientation="vertical">
-
-                                <TextView
-                                    android:layout_height="wrap_content"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/activities"/>
-
-                                <TextView
-                                    android:layout_height="match_parent"
-                                    android:layout_width="wrap_content"
-                                    android:text="@string/recent_activities"
-                                    android:textSize="@dimen/text_size_12sp"/>
-
-                            </LinearLayout>
-
-                        </LinearLayout>
-
-
-                    </LinearLayout>
-
-                </LinearLayout>
-
-            </android.support.v7.widget.CardView>
-
-        </LinearLayout>
-
-    </android.support.v4.widget.NestedScrollView>
+    </android.support.design.widget.CoordinatorLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
-    <include
-        layout="@layout/layout_collapsing_header_view"
-        android:id="@+id/float_header_view"
-        android:layout_height="wrap_content"
-        android:layout_width="match_parent"
-        app:layout_behavior="org.apache.fineract.ui.views.ViewBehavior"
-    />
-
-    <android.support.design.widget.FloatingActionButton
-        android:clickable="true"
-        android:id="@+id/fab_edit_customer"
-        android:layout_height="wrap_content"
-        android:layout_margin="@dimen/fab_margin"
-        android:layout_width="wrap_content"
-        android:tint="@color/white"
-        app:layout_anchor="@+id/app_bar_layout"
-        app:layout_anchorGravity="bottom|end"
-        app:srcCompat="@drawable/ic_edit_black_24dp"/>
-
 </android.support.design.widget.CoordinatorLayout>
diff --git a/app/src/main/res/layout/fragment_customer_list.xml b/app/src/main/res/layout/fragment_customer_list.xml
index 5221bb3..7ebae36 100644
--- a/app/src/main/res/layout/fragment_customer_list.xml
+++ b/app/src/main/res/layout/fragment_customer_list.xml
@@ -20,12 +20,13 @@
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_add_customer"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_customer_loans.xml b/app/src/main/res/layout/fragment_customer_loans.xml
index 2176dff..3ca9ff1 100644
--- a/app/src/main/res/layout/fragment_customer_loans.xml
+++ b/app/src/main/res/layout/fragment_customer_loans.xml
@@ -20,12 +20,13 @@
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_add_customer_loan"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_form_deposit_assign_product.xml b/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
index 1eebcb8..17b17e7 100644
--- a/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
+++ b/app/src/main/res/layout/fragment_form_deposit_assign_product.xml
@@ -1,19 +1,18 @@
 <?xml version="1.0" encoding="utf-8"?>
 <android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
-    android:id="@+id/cl_deposit_assign_product"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
-    android:visibility="invisible">
+    android:visibility="visible">
 
     <android.support.v4.widget.NestedScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
         xmlns:app="http://schemas.android.com/apk/res-auto"
         android:background="@color/gray_light"
-        android:id="@+id/ncv_loan_details"
+        android:id="@+id/ncv_deposit_assign_product"
         android:layout_height="match_parent"
         android:layout_width="match_parent"
-        android:visibility="visible"
+        android:visibility="gone"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <android.support.v7.widget.CardView
@@ -100,4 +99,9 @@
 
     </android.support.v4.widget.NestedScrollView>
 
+    <include
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
+        android:visibility="gone"/>
+
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_identification_details.xml b/app/src/main/res/layout/fragment_identification_details.xml
index 15f081a..0c4fa5b 100644
--- a/app/src/main/res/layout/fragment_identification_details.xml
+++ b/app/src/main/res/layout/fragment_identification_details.xml
@@ -213,16 +213,15 @@
                         android:layout_height="200dp"
                         android:textSize="@dimen/text_size_12sp"
                         android:clickable="true"
+                        android:focusable="true"
                         android:foreground="?android:attr/selectableItemBackground"
                         android:text="@string/loading_scans_please_wait"/>
 
                     <include
-                        layout="@layout/layout_error"
-                        android:id="@+id/rl_error"
+                        android:layout_height="300dp"
                         android:layout_width="match_parent"
-                        android:layout_height="200dp"
-                        android:clickable="true"
-                        android:foreground="?android:attr/selectableItemBackground"
+                        layout="@layout/layout_exception_handler"
+                        android:id="@+id/layout_error"
                         android:visibility="gone"/>
 
                 </FrameLayout>
@@ -235,6 +234,7 @@
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_upload_identification_scan_card"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_identification_list.xml b/app/src/main/res/layout/fragment_identification_list.xml
index af0d298..202d482 100644
--- a/app/src/main/res/layout/fragment_identification_list.xml
+++ b/app/src/main/res/layout/fragment_identification_list.xml
@@ -21,12 +21,13 @@
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_add_identification_card"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/fragment_loan_details.xml b/app/src/main/res/layout/fragment_loan_details.xml
index 382eb4b..c8b05d7 100644
--- a/app/src/main/res/layout/fragment_loan_details.xml
+++ b/app/src/main/res/layout/fragment_loan_details.xml
@@ -4,7 +4,7 @@
     android:id="@+id/cl_loan_details"
     android:layout_height="match_parent"
     android:layout_width="match_parent"
-    android:visibility="invisible">
+    android:visibility="visible">
 
     <android.support.v4.widget.NestedScrollView
         xmlns:android="http://schemas.android.com/apk/res/android"
@@ -13,7 +13,7 @@
         android:id="@+id/ncv_loan_details"
         android:layout_height="match_parent"
         android:layout_width="match_parent"
-        android:visibility="visible"
+        android:visibility="invisible"
         app:layout_behavior="@string/appbar_scrolling_view_behavior">
 
         <android.support.v7.widget.CardView
@@ -307,4 +307,9 @@
 
     </android.support.v4.widget.NestedScrollView>
 
+    <include
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
+        android:visibility="gone"/>
+
 </android.support.design.widget.CoordinatorLayout>
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_planned_payment.xml b/app/src/main/res/layout/fragment_planned_payment.xml
index bad381c..b340779 100644
--- a/app/src/main/res/layout/fragment_planned_payment.xml
+++ b/app/src/main/res/layout/fragment_planned_payment.xml
@@ -2,12 +2,12 @@
 <android.support.design.widget.CoordinatorLayout
     xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_height="match_parent"
-    android:layout_width="match_parent" >
+    android:layout_width="match_parent">
 
     <LinearLayout
         xmlns:android="http://schemas.android.com/apk/res/android"
-        android:animateLayoutChanges="true"
-        style="@style/LinearLayout.Base">
+        style="@style/LinearLayout.Base"
+        android:animateLayoutChanges="true">
 
         <LinearLayout
             android:layout_height="wrap_content"
@@ -25,6 +25,7 @@
 
                 <LinearLayout
                     android:clickable="true"
+                    android:focusable="true"
                     android:foreground="?android:attr/selectableItemBackground"
                     android:id="@+id/ll_toolbar_date"
                     android:layout_height="match_parent"
@@ -33,10 +34,10 @@
                     android:padding="16dp">
 
                     <TextView
-                        android:id="@+id/tv_toolbar_date"
                         android:drawableEnd="@drawable/ic_arrow_drop_down_black_24dp"
                         android:drawableRight="@drawable/ic_arrow_drop_down_black_24dp"
                         android:gravity="center"
+                        android:id="@+id/tv_toolbar_date"
                         android:layout_gravity="center"
                         android:layout_height="wrap_content"
                         android:layout_width="wrap_content"
@@ -54,6 +55,7 @@
             xmlns:app="http://schemas.android.com/apk/res-auto"
             android:background="@color/white"
             android:clickable="true"
+            android:focusable="true"
             android:foreground="?android:attr/selectableItemBackground"
             android:id="@+id/cv_planned_payment"
             android:layout_height="wrap_content"
@@ -68,39 +70,46 @@
                 <CalendarView
                     android:id="@+id/calender_view_payment"
                     android:layout_height="300dp"
-                    android:layout_width="match_parent" />
+                    android:layout_width="match_parent"/>
 
                 <android.support.v7.widget.AppCompatButton
                     android:id="@+id/btn_load_planned_payment"
                     android:layout_gravity="end"
-                    android:layout_width="wrap_content"
                     android:layout_height="wrap_content"
                     android:layout_margin="@dimen/layout_padding_8dp"
-                    android:textAllCaps="false"
-                    android:text="@string/load_payment"/>
+                    android:layout_width="wrap_content"
+                    android:text="@string/load_payment"
+                    android:textAllCaps="false"/>
 
             </LinearLayout>
 
         </android.support.v7.widget.CardView>
 
-        <android.support.v4.widget.SwipeRefreshLayout
-            android:id="@+id/swipe_container"
+        <android.support.design.widget.CoordinatorLayout
+            xmlns:android="http://schemas.android.com/apk/res/android"
             android:layout_height="match_parent"
             android:layout_width="match_parent">
 
-            <android.support.v7.widget.RecyclerView
-                android:id="@+id/rv_planned_payment"
-                android:layout_centerHorizontal="true"
-                android:layout_height="0dp"
-                android:layout_marginBottom="@dimen/layout_padding_30dp"
-                android:layout_weight="1"
-                android:layout_width="wrap_content"/>
-        </android.support.v4.widget.SwipeRefreshLayout>
+            <android.support.v4.widget.SwipeRefreshLayout
+                android:id="@+id/swipe_container"
+                android:layout_height="match_parent"
+                android:layout_width="match_parent">
 
-        <include
-            layout="@layout/layout_error"
-            android:id="@+id/rl_error"
-            android:visibility="gone"/>
+                <android.support.v7.widget.RecyclerView
+                    android:id="@+id/rv_planned_payment"
+                    android:layout_centerHorizontal="true"
+                    android:layout_height="0dp"
+                    android:layout_marginBottom="@dimen/layout_padding_30dp"
+                    android:layout_weight="1"
+                    android:layout_width="wrap_content"/>
+            </android.support.v4.widget.SwipeRefreshLayout>
+
+            <include
+                layout="@layout/layout_exception_handler"
+                android:id="@+id/layout_error"
+                android:visibility="gone"/>
+
+        </android.support.design.widget.CoordinatorLayout>
 
     </LinearLayout>
 
diff --git a/app/src/main/res/layout/fragment_roles_list.xml b/app/src/main/res/layout/fragment_roles_list.xml
index fd10e39..466dec4 100644
--- a/app/src/main/res/layout/fragment_roles_list.xml
+++ b/app/src/main/res/layout/fragment_roles_list.xml
@@ -19,12 +19,13 @@
     </android.support.v4.widget.SwipeRefreshLayout>
 
     <include
-        layout="@layout/layout_error"
-        android:id="@+id/rl_error"
+        layout="@layout/layout_exception_handler"
+        android:id="@+id/layout_error"
         android:visibility="gone"/>
 
     <android.support.design.widget.FloatingActionButton
         android:clickable="true"
+        android:focusable="true"
         android:id="@+id/fab_add_role"
         android:layout_gravity="bottom|end"
         android:layout_height="wrap_content"
diff --git a/app/src/main/res/layout/layout_exception_handler.xml b/app/src/main/res/layout/layout_exception_handler.xml
index 9bbd38e..724d4bc 100644
--- a/app/src/main/res/layout/layout_exception_handler.xml
+++ b/app/src/main/res/layout/layout_exception_handler.xml
@@ -13,9 +13,10 @@
         android:layout_height="match_parent"
         android:layout_width="match_parent"
         android:orientation="vertical"
-        android:visibility="visible">
+        android:visibility="gone">
 
         <ImageView
+            android:id="@+id/iv_error_no_connection"
             android:contentDescription="@string/status_image"
             android:layout_gravity="center|center_horizontal"
             android:layout_height="70dp"
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index e0f86e4..965f297 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -29,6 +29,7 @@
     <string name="current_status">Current status</string>
     <string name="management">Management</string>
     <string name="identification_cards">Identification cards</string>
+    <string name="identification_card">Identification card</string>
     <string name="view_identification_card">View identification cards</string>
     <string name="tasks">Tasks</string>
     <string name="change_customer_status">Change the status of customer</string>
@@ -54,6 +55,7 @@
     <string name="payment_cycle">Payment cycle</string>
     <string name="term">Term</string>
     <string name="planned_payment">Planned Payment</string>
+    <string name="planned_payments">Planned Payments</string>
     <string name="view_payments">View payments</string>
     <string name="debt_income_report">Debt Income Report</string>
     <string name="view_debt_income_report">View debt income report</string>
@@ -70,6 +72,7 @@
     <string name="balance">Balance</string>
     <string name="beneficiaries">Beneficiaries</string>
     <string name="deposit_account">Deposit account</string>
+    <string name="deposit_product">Deposit product</string>
     <string name="remaining_principal">Remaining principal</string>
     <string name="load_payment">Load Payment</string>
     <string name="short_name">Short name</string>
@@ -178,6 +181,12 @@
     <string name="oh_no">Oh no!</string>
     <string name="empty_ui_message">No %1$s Found</string>
     <string name="empty_ui_sub_message">Tap to add %1$s</string>
+    <string name="customer_details">Customer details</string>
+    <string name="create_new_loan">Create new loan</string>
+    <string name="identification_card_scans">Identification card scans</string>
+    <string name="identification_card_scan">Identification card scan</string>
+    <string name="role">Role</string>
+    <string name="customer_name">%1$s %2$s</string>
 
     <!--Edit Text hint required-->
     <string name="required_account">Account*</string>
@@ -239,7 +248,7 @@
     <string name="error_updating_status">Error while updating customer</string>
     <string name="error_fetching_identification_list">Error while fetching identification cards</string>
     <string name="error_creating_identification_card">Error while creating identification card</string>
-    <string name="error_editing_identification_card">Error while editing identification card</string>
+    <string name="error_updating_identification_card">Error while updating identification card</string>
     <string name="error_fetching_scans">Error while fetching scan cards</string>
     <string name="error_uploading_identification_scan_card">Error while uploading identification scan card</string>
     <string name="error_deleting_identification_scan_card">Error while deleting identification scan card</string>
@@ -251,6 +260,9 @@
     <string name="error_fetching_customer_activities">Error fetching customer activities</string>
     <string name="error_fetching_roles">Error fetching roles</string>
     <string name="error_sorry_not_able_to_load">Sorry we weren\'t able to load</string>
+    <string name="error_fetching_customer_details">Failed to fetch customer details</string>
+    <string name="error_fetching_deposit_product">Failed to fetch deposit product</string>
+    <string name="error_failed_to_refresh_customers">Failed to refresh customers</string>
 
 
     <!--Material Dialog-->