From 8ffef7b9f4b859d4fd7dba157a16fdf4c87b2309 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Adrien=20B=C3=A9raud?= <adrien.beraud@savoirfairelinux.com>
Date: Thu, 15 Oct 2015 17:02:04 -0400
Subject: [PATCH] ui: inform user of lost network connectivity

Tuleap: #10
Change-Id: I8f047f612897caab31f5d922b38e6d0372ca16c9
---
 .../fragments/AccountsManagementFragment.java |  34 +++---------
 .../cx/ring/fragments/CallListFragment.java   |  17 +++++-
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 3710 bytes
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 3540 bytes
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 3603 bytes
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 3906 bytes
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 4200 bytes
 .../ic_network_disconnect_black_24dp.png      | Bin 0 -> 4417 bytes
 .../main/res/layout/frag_accounts_list.xml    |  16 ++----
 .../src/main/res/layout/frag_call_list.xml    |  51 +++++++++++++++---
 .../src/main/res/layout/item_account_pref.xml |   7 +--
 .../app/src/main/res/values/strings.xml       |   1 +
 12 files changed, 76 insertions(+), 50 deletions(-)
 create mode 100644 ring-android/app/src/main/res/drawable-hdpi/ic_network_disconnect_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-ldpi/ic_network_disconnect_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-mdpi/ic_network_disconnect_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xhdpi/ic_network_disconnect_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxhdpi/ic_network_disconnect_black_24dp.png
 create mode 100644 ring-android/app/src/main/res/drawable-xxxhdpi/ic_network_disconnect_black_24dp.png

diff --git a/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
index bb2d99594..065dada48 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/AccountsManagementFragment.java
@@ -41,6 +41,7 @@ import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.graphics.Color;
 import android.net.Uri;
 import android.os.Bundle;
 import android.os.RemoteException;
@@ -74,7 +75,6 @@ public class AccountsManagementFragment extends Fragment {
     private AccountsAdapter mIP2IPAdapter;
 
     private DragSortListView mDnDListView;
-    private View mLoadingView;
     private int mShortAnimationDuration;
 
     private DragSortListView.DropListener onDrop = new DragSortListView.DropListener() {
@@ -167,8 +167,6 @@ public class AccountsManagementFragment extends Fragment {
                 launchAccountEditActivity(mIP2IPAdapter.accounts.get(0));
             }
         });
-
-        mLoadingView = view.findViewById(R.id.loading_spinner);
     }
 
     @Override
@@ -190,7 +188,6 @@ public class AccountsManagementFragment extends Fragment {
                 startActivityForResult(intent, ACCOUNT_CREATE_REQUEST);
             }
         });
-        crossfade();
     }
 
     @Override
@@ -329,6 +326,13 @@ public class AccountsManagementFragment extends Fragment {
                     entryView.error_indicator.setVisibility(View.GONE);
                     entryView.loading_indicator.setVisibility(View.VISIBLE);
                 } else if (item.isInError()) {
+                    entryView.error_indicator.setImageResource(R.drawable.ic_error_white_24dp);
+                    entryView.error_indicator.setColorFilter(Color.RED);
+                    entryView.error_indicator.setVisibility(View.VISIBLE);
+                    entryView.loading_indicator.setVisibility(View.GONE);
+                } else if (!item.isRegistered()) {
+                    entryView.error_indicator.setImageResource(R.drawable.ic_network_disconnect_black_24dp);
+                    entryView.error_indicator.setColorFilter(Color.BLACK);
                     entryView.error_indicator.setVisibility(View.VISIBLE);
                     entryView.loading_indicator.setVisibility(View.GONE);
                 } else {
@@ -401,28 +405,6 @@ public class AccountsManagementFragment extends Fragment {
 
     }
 
-    private void crossfade() {
-
-        // Set the content view to 0% opacity but visible, so that it is visible
-        // (but fully transparent) during the animation.
-        mDnDListView.setAlpha(0f);
-        mDnDListView.setVisibility(View.VISIBLE);
-
-        // Animate the content view to 100% opacity, and clear any animation
-        // listener set on the view.
-        mDnDListView.animate().alpha(1f).setDuration(mShortAnimationDuration).setListener(null);
-
-        // Animate the loading view to 0% opacity. After the animation ends,
-        // set its visibility to GONE as an optimization step (it won't
-        // participate in layout passes, etc.)
-        mLoadingView.animate().alpha(0f).setDuration(mShortAnimationDuration).setListener(new AnimatorListenerAdapter() {
-            @Override
-            public void onAnimationEnd(Animator animation) {
-                mLoadingView.setVisibility(View.GONE);
-            }
-        });
-    }
-
     private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/CallListFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/CallListFragment.java
index d78353334..74adc0dd9 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/CallListFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/CallListFragment.java
@@ -60,6 +60,7 @@ import cx.ring.R;
 import cx.ring.adapters.ContactPictureTask;
 import cx.ring.adapters.ContactsAdapter;
 import cx.ring.adapters.StarredContactsAdapter;
+import cx.ring.client.AccountWizard;
 import cx.ring.client.ConversationActivity;
 import cx.ring.client.HomeActivity;
 import cx.ring.client.NewConversationActivity;
@@ -103,7 +104,8 @@ public class CallListFragment extends Fragment implements SearchView.OnQueryText
     //private SwipeListViewTouchListener mSwipeLvTouchListener;
     private LinearLayout mHeader;
     private ViewGroup newcontact;
-
+    private ViewGroup error_msg_pane;
+    private TextView error_msg_txt;
 
     @Override
     public void onStart() {
@@ -111,6 +113,7 @@ public class CallListFragment extends Fragment implements SearchView.OnQueryText
         super.onStart();
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(LocalService.ACTION_CONF_UPDATE);
+        intentFilter.addAction(LocalService.ACTION_ACCOUNT_UPDATE);
         getActivity().registerReceiver(receiver, intentFilter);
         updateLists();
     }
@@ -146,8 +149,15 @@ public class CallListFragment extends Fragment implements SearchView.OnQueryText
     }
 
     public void updateLists() {
-        if (mCallbacks.getService() != null)
+        if (mCallbacks.getService() != null) {
             mConferenceAdapter.updateDataset(mCallbacks.getService().getConversations());
+            if (mCallbacks.getService().isConnected()) {
+                error_msg_pane.setVisibility(View.GONE);
+            } else {
+                error_msg_pane.setVisibility(mCallbacks.getService().isConnected() ? View.GONE : View.VISIBLE);
+                error_msg_txt.setText(R.string.error_no_network);
+            }
+        }
     }
 
     @Override
@@ -301,6 +311,9 @@ public class CallListFragment extends Fragment implements SearchView.OnQueryText
             }
         });
 
+        error_msg_pane = (ViewGroup) inflatedView.findViewById(R.id.error_msg_pane);
+        error_msg_txt = (TextView) error_msg_pane.findViewById(R.id.error_msg_txt);
+
         list.setAdapter(mConferenceAdapter);
         list.setVisibility(View.VISIBLE);
         contactList.setVisibility(View.GONE);
diff --git a/ring-android/app/src/main/res/drawable-hdpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..f9e7eddb49079cf9fc3e7d591cda1d7e0efbe6dc
GIT binary patch
literal 3710
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
M)78&qol`;+0L^Q#*Z=?k

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-ldpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-ldpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..8be95371dde5d901aa25876c9ad6b842364d79d2
GIT binary patch
literal 3540
zcmeAS@N?(olHy`uVBq!ia0y~yV2}V|4mJh`h6m-gKNuL8ZdZjwlmsP~D-;yvr)B1(
zDwI?fq$;FVWTr7NRNQ(yJ$ln^1)jG1k*?DlR9X@&XPovazwq=syYO=rbz9@THeVFe
zayIDHIn3`7zFuD=|4y3k)T7t{Z^Pp+3R`51#7!pI_it8{zxH*{PTR%qyLZbO_%ubG
zyM1GOePir<S)H8UA2Z6sw)@?3`hCzh;Ms|uV;j|Xwzl|Nzpb8LzF){rCw+dB_oJe^
zef(_+Car-t3a9r>J{QPhEHJfcb$s~K%+8F}CpO)9ePie9pCWr!e-*Kg-xe$9{IKQ@
z-$zZi+kU^S%Cw#Mue?*Xw=vk+_CsX1VU*P3`Kz@Rm4Yt5b-g=nQ&a)VVujVwE{1cu
zwym8MC^RiX@XIsp3b}n&r;c>IS>Vvi#rtaYx)8&o2j=pc7N<sTQ#m&Cb(2uq!h>p&
zvnI2IiQZvJ+xN^V`_7(Yt37T#lRh|^GpR*xephwspUFj>y@tVaPAu0Bn<0Ll<%o&e
z&dOHth6^_guZrFez0<zuqx=Cbj#pg8hnTwU{W_gr&Wqk;!Tsk7`}6Z9>e<l@iid7=
zot)6n(C?Ao^`!S^hrn?bJ67X#&YA{>l|{<t2i#Pc{2p1F{gTj)53@UaBZ|T4<06R*
zDVhzUO-l7TDo+9eFFpt{U6pxhjj9(<U~-SxbGc9-of%Okn^SIjO%j>3Y=+L#DZwY_
zutv{#HskEmDaCrM&0-$nU-Uj`JbmEYSMWlR-}=(T{-B9=rXg!LM){gvzqG^i@ay|Y
z#@B;RuPu4yu~cr?w;OAh&#RU^u~ku-N4D^WhjM>W;O!9kl^2C~u3vd^nOSG+)AaHz
zgV}dgGV;`|W;RN&GZoHenQ*~o=1&*J4=Uy}f1at(oZ{G9awyZJvoYbt5vvzT<?7#6
z&6hvizT@Ni6FWQK#ZM>}zN_|q=56k*+`8|tl*;zC8ZV1uGc&XJ5@Ip+r|+-FxBjj@
z5dA{;i&z!+-qw3g`3wKMXFNF0{4Z<Q{QjB=57yL5Su-#&Bw$VEnFS@upk!|Axs$iS
zf#<a`tFlVrgT7LaS+6y2#79g#Fzu=TwZBVpdJ7Kn^c#CM|4B?;*>}+5VSq&0s=f1{
z6mOKh<0${=YiMXCqhYPcW8YfUO$-d2S(zabB@w<pR>}FfdWk9dNvV1jxdjX$U}IlV
zkeHmETB4AYnx2_wtMq>NekFy>6kDZmQ(pt$0_W6>OpmIf)Zi+=kmRcDWXlvKdpj<h
z3ag6Tg51=SM1_jnoV;SI3R@+xxmJ0_Rv=-0B?YjOl5AV02;Tq&=lr5n1rt3JJp*0W
zip(-2B|9z!o1&C7s~{IQs1ZdeX|_rkB_#z``ugSN<$C4Ddih1^`i7R4mih)p`bI{&
zMJZ{z#g%y_i50qe#mXQfAZECv7AF^F7L;V>=P7{9OiaozEwNQn;!;phfEu2X3^%)=
zv?vE`a!Rs(YEEiyYF<gPzM-C>K3IK9vXxtYQEp<1tx{%gVtT56L0-C&KFGEDAftm^
z-0Zk)^uc}u`O^+;2gn{;;!#UT3f<A*8VxRzLVzU2qp52&xJU{Ck`#}ouAvoNT!;o#
zYF>)1Qn`}79mD?y2L=WPwj^(N7l!{JxM1({$qWn(oCO|{#S9GG!XV7ZFl!E|^TS@^
z>FdgVpNn6_RPf!wr>+bP3^P1k978;gzYTHZYf#|P{^4iw<Nt0orO!;q1P<i3Nc)x<
zNJnqq!o)2s$Pm!Qqt)HB=_l_2v!X9&BUOvTieIuFS!1lMF2uia^V9^<H|OVDt+!=o
zwCH+oRQ7Uj=fv|5x2P@h`+Ptl$TTqbZ_$CHfzwwS+}|N3KD%k>s+p?6D{s!q$$0Sg
t1Dl=cwSTSgM~?&we-+SXmK95T$oO}U_3z`ky>CD*M^9Hjmvv4FO#rjxY!Lte

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-mdpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..be26ae73100447b5e25f369fa946c64bae631062
GIT binary patch
literal 3603
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
IIVCg!03rd0I{*Lx

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..54800300463b4408354743553c6a09dea208169b
GIT binary patch
literal 3906
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
Mp00i_>zopr0DX=hkpKVy

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..34eb88c482ad7be15fae264ab4c320ba0ca89198
GIT binary patch
literal 4200
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
F69DgFzF+_V

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ic_network_disconnect_black_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_network_disconnect_black_24dp.png
new file mode 100644
index 0000000000000000000000000000000000000000..840320b07cd0ad3a3ab66dbd6d05554ffc15f7d6
GIT binary patch
literal 4417
zcmeAS@N?(olHy`uVBq!ia0y~yU}ykg4mJh`hQoG=rx_TSZdZjwlmsP~D-;yvr)B1(
zDwI?fq$;FVWTr7NRNQ(yJ$lj|1s>P`k*?DkR9X@&XSj!!O?djeN%DKLRq)i~?sm7P
z<mz;5Uzqq(@_K!Z{5xsBQ;%W;ybX`PC~T225-*u#-~ZXqZq4htnYQ*f?tX1b6uR@Y
zrl<C|_>He-2M%qM?=MR)eZ53?OMDH-sh%@0WUAewJ$`JtTvt}vul+F3^0!E|(Dcur
ziw#s3YxW%K+nq9}#7*#wLkQQpy4b19RTr&SIz1`w`MKD;%b&#VU4G~1rnjGFa6Nxq
z*5Pk?tL)PCozarJ<_q3cvfpE{)2ZgvT?yUZi|4OS6_~j4#kWOv(>7HVuq;-{j&L!a
z)3tByw2MO1A|`%$rd=Vo&+62X6K@tc^m6gOdL6eisjJai`rVnSsW&G{q_5-ln$gQP
zJ0;UkC?d2#c*f6J+-rAK9$h^}V5gwXOa(WIk1KbEAG6P#enDdMk<OZ3MXi+|bsT(>
zC(RD8VC3kX8yx#H_UzrOz5AK96;^1U<>c1+XQ9fsG&=X>Bb^Vy@^kD@&s~$txP)V)
z=wwAkM)|;dA}6Ic3o7<=)^Mer6Z*lx81&RFuc6n2WzG>}vttsv@nLpnZ$vRTeOxGU
zAw{!6v}sYDj>?sQz>5z;Ojl)ITBGX46PVm1_FOL1M`uQq$>x-sUXw&7Et{dUbV~5a
zIjqq$p3OM>bV{)vt0VUkZa49YDMcR?-7UU!w9CFc;l5I1zSOE~5o?#t%FevA<l*Q1
zjWe@XJ`J-fof5<!Tm9x*@cF$wS8h!ZZ0obgSu)Xm=Zf4_{a0Re-no7yBY5_aL!UNF
zo6b0Er;?GUZZ)$}f}N>wHcP+-o0&gd6hEk#&-{7jhsG4g-jYL^CY_B5FOFEfNGezU
zu4=yg;r1OL*Pqzg`7VA!vG85B?=x?6XXXBTch&XHAFg!2y*xQN1us?>Xni(++5i4s
zKI=WF{Ds>uM8DAeB38xy*WQV_-sVBP?|0$)v<dfHdt;m!7#QNPCiBdKl4MXaxAnB-
zYhd8GUD@i-(A9NcP|TeDzr3_i?&U9&Ue|d|bKIeD_;JTIh5Cr-mC5No79wp^rRFdH
zF(*g5{6g@a{j0R}4SPhMWX%0Ii-CbND>EdbB*NFnDmgz_FEJ%QDOIl`w}1fzZ0suv
z5|gu2OB9k)(=+pImEP~(ucVNfVyhHx>TBRz;GCL~=}}db8eHWUl3bOYY?-2DZ^va*
zVO5b^kegbPs8ErclUHn2VXFi-*D9~r3M8zrqySb@l5MLL;TxdfoL`ixV4`QDXQ1m^
zky&P>WXGjoQ<Rcs73AUuHKHgb%~mO+q@=(~U%$M(T(8_%FTW^V-_X+1Qs2Nx-^fU}
zC?!p|xH7LKu|hYmSQ%sl#0;0z;^d;tf|AVqJOz-MiAnjTCALaRTnY*bP{UJ_;bs?<
z7Uh6VPD$2J%}LEo%_}L^H`FuK2dhs>wsOla%1tb>Rm#jwOi$G>$V*q!2f0=sWOR^=
zn;n;pKG<&{f7*fV0NF!JJZcF^p*tE}qrpW|2#}<BG<A&z7fB&NlH$?SHMD|@3(<f|
z%}cRWDp#_%WBA|Tz`(%3mgMd3!tfsi7wla=nSp_Uv%n*=n1O*?7=#%aX3ddcU|?V`
z@$_|Nzt6=lVk%UAV#|L91{QWt7srr_TW{x{_mU12X+M8NO>nJmttt05Y3-6&uZ7(6
z9RhZ}5Z>{Ao%h5Et@%&n1#(PYI<c#qxpHQ1ar(Kv&woEq(wj5k&$++no}8<2X92bI
zka3u$@WiL5W^|u0KYD$Kz(hv*t-5KV2g7@Hk6yp|AbI=2!?PYvPuBlXx=i%=Ar{-u
zHw^w1y<yMT|1LtrQOVf;3d`#);<p@=9<GmOxy*L_5X-Tx_qWK#nAn_~ka20|&-F7C
zu6=la++}j!kJYXQxj)L47kT>sE`7Yo|E>6w80*iv^HTG>PS~<OF#fZ#<Ih#Q7Y7n|
ztk1lk^kcEa!|skfg(Ckx9X-EjnT3vDhi~Ps9U`pyY!Q1t?M{7r|9DMf<Kz$BUB&ZT
z3*XjvEv@y}5tgrZxsmrwUz2J7os=L3#p#nC&RpHo#ULEOBEtB#p{#+^#5ce~r^!?8
zeQLDJJB@}7Wg8}+lyZOFYSaIH%3k4#uX*mdD{_^yR_<N-p;pcH!|dSQ1$C(fMi%OB
z`yWncmilD8_=91?<C*(KCKfAwmA3mY{UGG`m;Wb>_s8gLlKU6Es8_hI^Jz9ayUXhJ
ze^;dzcDsIP&3Jt7PpHn;X6Hq3&1$^WPDK6gem-;A!6i$->54gCyH)?wZT*zKozgG0
zL*(B+F!(-m|C@yzw=OK@<lEC4-#6o}!(+7>dR+&4zrA+j5zY|WESs|SuiEW(8DfoQ
z@fYi2m@~FFiySK7dSdg7gDg@t?!W806|SB6|EBV(-qf;&Z^{CjM5E=^I+oU6zy9TR
z&Y_Cbif8;%>x6YU>~ro&@Y<(rJP|6G@$P`+WftG9@ftc}hM#*y9B0qm?<FiOBUtzU
zt%LC&HP?c!Z@DuP!XMr7|FFNT;LI8S^&C$BHf}q`qTZ6fS=MLD;q_WfTjnp|G<m1K
z!|`{fm}A**O_7O*wr~3WZmrE*jzt&w@`__NT-0lDZ{GYQYF-&jBNy8#<NJ%0)RSJ<
zHR*6CsBN2{VktPgTrBl6Q&8mbWwI^?2O^!`PcIWV$e<Z_^wO`g21cP&cHtj-47VCT
zi#b>am>h6^G{5n6*@8d@`waFq%ukB!XYVdsP%5<J>~`k+tOe>y@;}NLeos2DHz&rL
zBSn9)(g79`Mpp;x1+qKL4;lvk(rpS>$~nLEV!`RNlCR3NEERWs^XYBdzf1Qt)7#g^
z#!_{6+k7(OCvrc&wf=F(i%(bW{BJq@PVoFK-<u&{b>ZKN#idMJ@&kT9?i1_2u+Q-=
ze|F#E+P4gE%a15H{4ULy$?&%Pj9bIEWKqUj<{3?ihm%{kF>lG=z~R<-JS&T7Oa2Dg
zEwy`oPFwTchf!`x&IK0dqmO%CpY(T}na@1G`@~MCMn>c;%D}*oa@=0o>hl(-B$K}&
N8BbR~mvv4FO#p5679#)v

literal 0
HcmV?d00001

diff --git a/ring-android/app/src/main/res/layout/frag_accounts_list.xml b/ring-android/app/src/main/res/layout/frag_accounts_list.xml
index ead1b9627..ebd142192 100644
--- a/ring-android/app/src/main/res/layout/frag_accounts_list.xml
+++ b/ring-android/app/src/main/res/layout/frag_accounts_list.xml
@@ -15,7 +15,8 @@
 
        <RelativeLayout
            android:layout_width="match_parent"
-           android:layout_height="wrap_content" >
+           android:layout_height="wrap_content"
+           android:minHeight="72dp">
 
            <cx.ring.views.dragsortlv.DragSortListView
                android:id="@+id/accounts_list"
@@ -24,7 +25,7 @@
                android:background="@color/white"
                android:choiceMode="multipleChoice"
                android:dividerHeight="1px"
-               android:visibility="gone"
+               android:visibility="visible"
                dslv:collapsed_height="1px"
                dslv:drag_enabled="true"
                dslv:drag_handle_id="@id/drag_handle"
@@ -35,16 +36,6 @@
                dslv:remove_enabled="false"
                dslv:slide_shuffle_speed="0.3" />
 
-           <ProgressBar
-               android:id="@+id/loading_spinner"
-               style="?android:progressBarStyle"
-               android:layout_width="wrap_content"
-               android:layout_height="wrap_content"
-               android:layout_margin="5dp"
-               android:layout_centerInParent="true"
-               android:layout_gravity="center"
-               android:indeterminate="false" />
-
            <TextView
                android:id="@+id/empty_account_list"
                android:layout_width="wrap_content"
@@ -54,6 +45,7 @@
                android:gravity="center"
                android:text="@string/empty_account_list"
                android:textAppearance="?android:attr/textAppearanceMedium"
+               android:textColor="@color/text_color_secondary"
                android:visibility="gone">
            </TextView>
 
diff --git a/ring-android/app/src/main/res/layout/frag_call_list.xml b/ring-android/app/src/main/res/layout/frag_call_list.xml
index a90c940cf..0291a6d67 100644
--- a/ring-android/app/src/main/res/layout/frag_call_list.xml
+++ b/ring-android/app/src/main/res/layout/frag_call_list.xml
@@ -18,12 +18,33 @@ along with this program; if not, write to the Free Software
  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.          
 -->
 
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<RelativeLayout 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:layout_width="match_parent"
     android:layout_height="match_parent"
-    android:background="@android:color/white">
+    android:animateLayoutChanges="true">
+
+    <RelativeLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentLeft="true"
+        android:layout_alignParentStart="true"
+        android:id="@+id/error_msg_pane"
+        android:padding="16dp"
+        android:background="#e57373"
+        android:visibility="gone">
+
+        <TextView
+            android:id="@+id/error_msg_txt"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:layout_centerHorizontal="true"
+            android:textColor="@color/text_color_primary"
+            android:textSize="14sp" />
+
+    </RelativeLayout>
 
     <se.emilsjolander.stickylistheaders.StickyListHeadersListView
         android:id="@+id/contacts_stickylv"
@@ -35,7 +56,13 @@ along with this program; if not, write to the Free Software
         android:fastScrollEnabled="true"
         android:paddingBottom="8dp"
         android:paddingTop="8dp"
-        android:scrollbarStyle="outsideOverlay" />
+        android:scrollbarStyle="outsideOverlay"
+        android:layout_alignParentLeft="true"
+        android:layout_marginLeft="0dp"
+        android:layout_below="@+id/error_msg_pane"
+        android:elevation="8dp"
+        android:visibility="gone"
+        android:background="@android:color/white" />
 
     <ListView
         android:id="@+id/confs_list"
@@ -45,18 +72,28 @@ along with this program; if not, write to the Free Software
         android:divider="@null"
         android:paddingBottom="8dp"
         android:paddingTop="8dp"
-        tools:listitem="@layout/item_calllist"/>
+        tools:listitem="@layout/item_calllist"
+        android:layout_alignParentLeft="true"
+        android:layout_marginLeft="0dp"
+        android:layout_marginTop="0dp"
+        android:layout_below="@+id/error_msg_pane"
+        android:elevation="8dp"
+        android:background="@android:color/white"
+        android:visibility="gone" />
 
     <android.support.design.widget.FloatingActionButton
         android:id="@+id/newconv_fab"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:layout_gravity="bottom|end"
-        android:layout_margin="@dimen/fab_compat_margin"
         android:src="@drawable/ic_add_white_24dp"
         app:backgroundTint="@color/color_primary_light"
         app:elevation="6dp"
         app:pressedTranslationZ="12dp"
-        app:rippleColor="@color/color_primary_dark" />
+        app:rippleColor="@color/color_primary_dark"
+        android:layout_alignParentBottom="true"
+        android:layout_alignParentRight="true"
+        android:layout_alignParentEnd="true"
+        android:layout_margin="@dimen/fab_compat_margin" />
 
-</FrameLayout>
\ No newline at end of file
+</RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/item_account_pref.xml b/ring-android/app/src/main/res/layout/item_account_pref.xml
index ee774ce51..a34d7cc30 100644
--- a/ring-android/app/src/main/res/layout/item_account_pref.xml
+++ b/ring-android/app/src/main/res/layout/item_account_pref.xml
@@ -36,7 +36,8 @@
         android:layout_alignParentLeft="true"
         android:ellipsize="middle"
         android:singleLine="true"
-        android:layout_marginRight="56dp" />
+        android:layout_toLeftOf="@+id/error_indicator"
+        android:layout_toStartOf="@+id/error_indicator" />
 
     <CheckBox
         android:id="@+id/account_checked"
@@ -64,10 +65,10 @@
         android:focusable="false"
         android:src="@drawable/ic_error_white_24dp"
         android:focusableInTouchMode="false"
-        android:layout_marginRight="16dp"
         android:layout_centerVertical="true"
         android:layout_toStartOf="@+id/account_checked"
         android:layout_toLeftOf="@+id/loading_indicator"
-        android:tint="@color/error_red" />
+        android:tint="@color/error_red"
+        android:layout_margin="16dp" />
 
 </RelativeLayout>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/values/strings.xml b/ring-android/app/src/main/res/values/strings.xml
index 4884b2d9f..f4cf56364 100644
--- a/ring-android/app/src/main/res/values/strings.xml
+++ b/ring-android/app/src/main/res/values/strings.xml
@@ -46,6 +46,7 @@ as that of the covered work.
     <string name="create_new_account_dialog">Would you like to register an account now?</string>
     <string name="cannot_pass_sipcall_title">SIP account not available</string>
     <string name="cannot_pass_sipcall">Current selected account is not available</string>
+    <string name="error_no_network">No network connectivity</string>
 
     <!-- AB menus -->
     <string name="ab_account_creation">New account</string>
-- 
GitLab