Bug 895867 - Implement empty screen state for 'tabs from last time'. r=lucasr
authorChenxia Liu <liuche@mozilla.com>
Fri, 09 Aug 2013 13:39:13 -0700
changeset 143519 69cbdb6652bc7f18f90457f24ca3ddf5d3c53562
parent 143518 22d1104b4b0858fe8ae66db74b1bbf0371c0a524
child 143520 dff6e98eaac0bfd79785f97273f9e9612ab92481
push id25130
push userlrocha@mozilla.com
push dateWed, 21 Aug 2013 09:41:27 +0000
treeherdermozilla-central@b2486721572e [default view] [failures only]
perfherder[talos] [build metrics] [platform microbench] (compared to previous push)
reviewerslucasr
bugs895867
milestone26.0a1
first release with
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
last release without
nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
Bug 895867 - Implement empty screen state for 'tabs from last time'. r=lucasr
mobile/android/base/Makefile.in
mobile/android/base/home/LastTabsPage.java
mobile/android/base/locales/en-US/android_strings.dtd
mobile/android/base/resources/drawable-hdpi/icon_last_tabs_empty.png
mobile/android/base/resources/drawable-mdpi/icon_last_tabs_empty.png
mobile/android/base/resources/drawable-xhdpi/icon_last_tabs_empty.png
mobile/android/base/resources/layout/home_last_tabs_page.xml
mobile/android/base/strings.xml.in
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -641,19 +641,20 @@ RES_DRAWABLE_MDPI = \
   res/drawable-mdpi/ic_menu_new_tab.png \
   res/drawable-mdpi/ic_menu_reload.png \
   res/drawable-mdpi/ic_status_logo.png \
   res/drawable-mdpi/ic_url_bar_go.png \
   res/drawable-mdpi/ic_url_bar_reader.png \
   res/drawable-mdpi/ic_url_bar_search.png \
   res/drawable-mdpi/ic_url_bar_star.png \
   res/drawable-mdpi/ic_url_bar_tab.png \
+  res/drawable-mdpi/icon_last_tabs.png \
+  res/drawable-mdpi/icon_last_tabs_empty.png \
+  res/drawable-mdpi/icon_most_recent.png \
   res/drawable-mdpi/icon_most_recent_empty.png \
-  res/drawable-mdpi/icon_last_tabs.png \
-  res/drawable-mdpi/icon_most_recent.png \
   res/drawable-mdpi/icon_most_visited.png \
   res/drawable-mdpi/icon_pageaction.png \
   res/drawable-mdpi/progress_spinner.png \
   res/drawable-mdpi/tab_indicator_divider.9.png \
   res/drawable-mdpi/tab_indicator_selected.9.png \
   res/drawable-mdpi/tab_indicator_selected_focused.9.png \
   res/drawable-mdpi/spinner_default.9.png \
   res/drawable-mdpi/spinner_focused.9.png \
@@ -748,19 +749,20 @@ RES_DRAWABLE_HDPI = \
   res/drawable-hdpi/ic_menu_new_tab.png \
   res/drawable-hdpi/ic_menu_reload.png \
   res/drawable-hdpi/ic_status_logo.png \
   res/drawable-hdpi/ic_url_bar_go.png \
   res/drawable-hdpi/ic_url_bar_reader.png \
   res/drawable-hdpi/ic_url_bar_search.png \
   res/drawable-hdpi/ic_url_bar_star.png \
   res/drawable-hdpi/ic_url_bar_tab.png \
+  res/drawable-hdpi/icon_last_tabs.png \
+  res/drawable-hdpi/icon_last_tabs_empty.png \
+  res/drawable-hdpi/icon_most_recent.png \
   res/drawable-hdpi/icon_most_recent_empty.png \
-  res/drawable-hdpi/icon_last_tabs.png \
-  res/drawable-hdpi/icon_most_recent.png \
   res/drawable-hdpi/icon_most_visited.png \
   res/drawable-hdpi/icon_pageaction.png \
   res/drawable-hdpi/tab_indicator_divider.9.png \
   res/drawable-hdpi/tab_indicator_selected.9.png \
   res/drawable-hdpi/tab_indicator_selected_focused.9.png \
   res/drawable-hdpi/spinner_default.9.png \
   res/drawable-hdpi/spinner_focused.9.png \
   res/drawable-hdpi/spinner_pressed.9.png \
@@ -842,19 +844,20 @@ RES_DRAWABLE_XHDPI = \
   res/drawable-xhdpi/ic_menu_new_tab.png \
   res/drawable-xhdpi/ic_menu_reload.png \
   res/drawable-xhdpi/ic_status_logo.png \
   res/drawable-xhdpi/ic_url_bar_go.png \
   res/drawable-xhdpi/ic_url_bar_reader.png \
   res/drawable-xhdpi/ic_url_bar_search.png \
   res/drawable-xhdpi/ic_url_bar_star.png \
   res/drawable-xhdpi/ic_url_bar_tab.png \
+  res/drawable-xhdpi/icon_last_tabs.png \
+  res/drawable-xhdpi/icon_last_tabs_empty.png \
+  res/drawable-xhdpi/icon_most_recent.png \
   res/drawable-xhdpi/icon_most_recent_empty.png \
-  res/drawable-xhdpi/icon_last_tabs.png \
-  res/drawable-xhdpi/icon_most_recent.png \
   res/drawable-xhdpi/icon_most_visited.png \
   res/drawable-xhdpi/icon_pageaction.png \
   res/drawable-xhdpi/spinner_default.9.png \
   res/drawable-xhdpi/spinner_focused.9.png \
   res/drawable-xhdpi/spinner_pressed.9.png \
   res/drawable-xhdpi/tab_new.png \
   res/drawable-xhdpi/tab_new_pb.png \
   res/drawable-xhdpi/tab_close.png \
--- a/mobile/android/base/home/LastTabsPage.java
+++ b/mobile/android/base/home/LastTabsPage.java
@@ -21,16 +21,17 @@ import android.database.MatrixCursor.Row
 import android.os.Bundle;
 import android.support.v4.app.LoaderManager.LoaderCallbacks;
 import android.support.v4.content.Loader;
 import android.support.v4.widget.CursorAdapter;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.AdapterView;
+import android.widget.ImageView;
 import android.widget.ListView;
 import android.widget.TextView;
 
 /**
  * Fragment that displays tabs from last session in a ListView.
  */
 public class LastTabsPage extends HomeFragment {
     // Logging tag name
@@ -40,16 +41,25 @@ public class LastTabsPage extends HomeFr
     private static final int LOADER_ID_LAST_TABS = 0;
 
     // Adapter for the list of search results
     private LastTabsAdapter mAdapter;
 
     // The view shown by the fragment.
     private ListView mList;
 
+    // The title for this HomeFragment page.
+    private TextView mTitle;
+
+    // The button view for restoring tabs from last session.
+    private View mRestoreButton;
+
+    // Reference to the View to display when there are no results.
+    private View mEmptyView;
+
     // Callbacks used for the search and favicon cursor loaders
     private CursorLoaderCallbacks mCursorLoaderCallbacks;
 
     // On new tabs listener
     private OnNewTabsListener mNewTabsListener;
 
     public static LastTabsPage newInstance() {
         return new LastTabsPage();
@@ -80,18 +90,18 @@ public class LastTabsPage extends HomeFr
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
         return inflater.inflate(R.layout.home_last_tabs_page, container, false);
     }
 
     @Override
     public void onViewCreated(View view, Bundle savedInstanceState) {
-        final TextView title = (TextView) view.findViewById(R.id.title);
-        title.setText(R.string.home_last_tabs_title);
+        mTitle = (TextView) view.findViewById(R.id.title);
+        mTitle.setText(R.string.home_last_tabs_title);
 
         mList = (ListView) view.findViewById(R.id.list);
 
         mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
             @Override
             public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                 final Cursor c = mAdapter.getCursor();
                 if (c == null || !c.moveToPosition(position)) {
@@ -100,44 +110,72 @@ public class LastTabsPage extends HomeFr
 
                 final String url = c.getString(c.getColumnIndexOrThrow(Combined.URL));
                 mNewTabsListener.onNewTabs(new String[] { url });
             }
         });
 
         registerForContextMenu(mList);
 
-        final View openAllTabsButton = view.findViewById(R.id.open_all_tabs_button);
-        openAllTabsButton.setOnClickListener(new View.OnClickListener() {
+        mRestoreButton = view.findViewById(R.id.open_all_tabs_button);
+        mRestoreButton.setOnClickListener(new View.OnClickListener() {
             @Override
             public void onClick(View v) {
                 openAllTabs();
             }
         });
     }
 
     @Override
     public void onDestroyView() {
         super.onDestroyView();
         mList = null;
+        mTitle = null;
+        mEmptyView = null;
+        mRestoreButton = null;
     }
 
     @Override
     public void onActivityCreated(Bundle savedInstanceState) {
         super.onActivityCreated(savedInstanceState);
 
         // Intialize adapter
         mAdapter = new LastTabsAdapter(getActivity());
         mList.setAdapter(mAdapter);
 
         // Create callbacks before the initial loader is started
         mCursorLoaderCallbacks = new CursorLoaderCallbacks();
         loadIfVisible();
     }
 
+    private void updateUiFromCursor(Cursor c) {
+        if (c != null && c.getCount() > 0) {
+            mTitle.setVisibility(View.VISIBLE);
+            mRestoreButton.setVisibility(View.VISIBLE);
+            return;
+        }
+
+        // Cursor is empty, so hide the title and set the empty view if it hasn't been set already.
+        mTitle.setVisibility(View.GONE);
+        mRestoreButton.setVisibility(View.GONE);
+
+        if (mEmptyView == null) {
+            // Set empty page view. We delay this so that the empty view won't flash.
+            mEmptyView = getActivity().findViewById(R.id.home_empty_view);
+
+            final ImageView emptyIcon = (ImageView) mEmptyView.findViewById(R.id.home_empty_image);
+            emptyIcon.setImageResource(R.drawable.icon_last_tabs_empty);
+
+            final TextView emptyText = (TextView) mEmptyView.findViewById(R.id.home_empty_text);
+            emptyText.setText(R.string.home_last_tabs_empty);
+
+            mList.setEmptyView(mEmptyView);
+        }
+    }
+
     @Override
     protected void load() {
         getLoaderManager().initLoader(LOADER_ID_LAST_TABS, null, mCursorLoaderCallbacks);
     }
 
     private void openAllTabs() {
         final Cursor c = mAdapter.getCursor();
         if (c == null || !c.moveToFirst()) {
@@ -220,16 +258,17 @@ public class LastTabsPage extends HomeFr
         @Override
         public Loader<Cursor> onCreateLoader(int id, Bundle args) {
             return new LastTabsCursorLoader(getActivity());
         }
 
         @Override
         public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
             mAdapter.swapCursor(c);
+            updateUiFromCursor(c);
         }
 
         @Override
         public void onLoaderReset(Loader<Cursor> loader) {
             mAdapter.swapCursor(null);
         }
     }
 }
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -267,16 +267,17 @@ size. -->
 <!ENTITY button_no "No">
 <!ENTITY button_clear_data "Clear data">
 <!ENTITY button_set "Set">
 <!ENTITY button_clear "Clear">
 
 <!ENTITY home_history_title "History">
 <!ENTITY home_last_tabs_title "Tabs from last time">
 <!ENTITY home_last_tabs_open "Open all tabs from last time">
+<!ENTITY home_last_tabs_empty "Your recent tabs show up here.">
 <!ENTITY home_most_recent_title "Most recent">
 <!ENTITY home_most_recent_empty "Websites you visited most recently show up here.">
 <!ENTITY home_most_visited_title "Most visited">
 <!ENTITY pin_bookmark_dialog_hint "Enter a search keyword">
 
 <!ENTITY filepicker_title "Choose File">
 <!ENTITY filepicker_audio_title "Choose or record a sound">
 <!ENTITY filepicker_image_title "Choose or take a picture">
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..bfd618b8edd205e7d201e2e10bd669badeae8615
GIT binary patch
literal 1316
zc%17D@N?(olHy`uVBq!ia0vp^?I6s-1|)5sdjTa_UVFMYhE&{obN6n3aH-7kk7Chg
z+YU1E`5a!xZK%}A<dw!_Xs0sC;0a%TO@xP3<hG0wI~5O^B^DQNoE6n^JhCAzr)TAC
z>A!z@?^VCGH@<Ja|Hy>4IhW^st2ux3`J=6`{r&H~o_Fr2?&hsqRWDuGwx3~<g-c<_
zBY~reUCtuy8hn8=U;#J-Sw;!M$m~9I|No!cC+g-L=8rhyyn|!yf-a?b?rKTS8cA~A
zE8O?|_m6QGbk4o;Uq-D!__bhueTVCmk9K?}w=QV(*>v4#c)dW<ev|9&kFEU+onQUn
zs#dyT-yjsjo|_;O+uyxdK6S?ooyQ*C@5RcK@5E<+jD5l}E&0xW<8P*2i@8I0%vk$S
zz)10}>)8YUX6-+q$osgQ`S<D<btZj<7Rq^w@}C|}<9Ykv?8!HoJgHmuKmS|IJES&8
zaj~M_yY7NxGW;9=Puci(w#E+&yB6bTZXMmfS04N;?)+xH`HuQC#|_g9Vr-9;|3A(4
zeLdTqd+oap{uPx!t~JM$vHt%>{`4#N7=H6h-`)4@ae-Se%Z?qtdEd+PZ1~@D^>5eW
zy=}~I<O5~8oC`JhjxMwiX@3+z3a8KG(TxW07jOSEw>{Qixlw<nN~XM*uSV?wv*WoH
za~Z$!OWob~=<$xMf;+qFb@UtJdEdoz?AUwyh4uHI{^TnUcAP%J5@NEW-e_TeQB``a
z%-$XI9~|f8K4$mZtl+|X?+4#ywO@QLOfks%7^}SSy`1>08}_*w|E+t^J)dD@@P@By
zBBy41Hru!Q{utrk)gQYX|Hdob*65Q_OOp9E+5Yw-Pg}$KzyHp)-(6B`XusX&>ES$)
z_U}^fN(!#X|2Xjf#q~ux=Mq*PRu`J<YS#3(a?kaL%`tU{Upt;-`CRruRiuzJHAKm%
zU;Bqd{?GH<I-V8^J)Uta=E!gF83#O{+}=<xe(#9-3`bR`)EFm0{p911`Feyg(%#K!
zg(-z1&kF_Z7YR+Yj5(%q&!K#Fo%1g)yF=zPdMoNVA6JO}d@FLCBky483FbN7FO<?h
znu%G}Nc_`Gxh!*B*ie3g{q0BbspUuigx_5K!ZTRr+Bt#!b3gpHT&FmFn}y$DNyA<r
zkLSE^^_OY($u+m1miPW)yQFo?kwU3+GhQyaUpsG_g;!OcY7uv4XENux1?kN9%wP4q
z@^+RfwP^NJ`Q!M?Y0~2h!QbARt|2+@;hbH*1`i8me4J&z3)M6iZhvS|bxGj3&K$$i
zH+(;wrt!S1pD@i`_}GJ<oq~^AYtjn-U(f7Z+~8~Be6FQJ(Vh2Lp^YzpkpBV6!rh&l
zt-RX4onP`+^S55e!=!C(&c6SSH_mGO+g)L#TNv?cI^Xw?PTcw#8qXZEB)mRv^tTQ?
zVim(4d$5rs?uwkx!g~+rud#FgUuJ2L$MAkpPj&8&8>?45V&YR4-ssq~@Y1r)?*9&z
z_B?!fMNZ;4`$Tt5a9Qy$dpaK{uo#nI`|AI9=?>=$3{M>RpeUiJLFPmw5@IY;U@!V0
ZbavMn`@<|h1cBNZJYD@<);T3K0RSRPXdVCn
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..228a34dc36115904ddc09e13b88a8db776e90b15
GIT binary patch
literal 905
zc%17D@N?(olHy`uVBq!ia0vp^Q6S901|%(3I5IIXFb8<LIEGZ*dVA-*cSxYbv5&?U
zE0!2>ADtCcv{aMTGcY8nX~GLNo`VX9dNg`An6$ZZ3p({Ss$5<qpAxZX!P2tl`5E_j
z)gPP3&9`I1<GHVE@B7_N|0sFO_IV9!=eyi9-@ch?cGNPorDY^#v@N^Ao{-U|2IO?X
zgw#HNzW)Ahlp?qH1IK+H(jOSx7RdQblzJ$rb11FjuWm$(U<TL5dY-liwmB^~zL(uf
zeW){|>5%*+1FoMOxlaBExYZIE_HcZ+m1uD}U|e!I?Fg^Yggc^D>YIA{7^c4wzq4O3
zVZW@+!oL@tUR<6azJ)7vn)kJX(;oa2yAt_LJHd5_<7)dUt$Q})opxmx`IaC3ZMVp`
z<9`>bwk`}j?V2v~t$5ns<6OVB|6Sm3UC4Rb^||Ob`>1c~3i@Y%$QyF(J#m5OEEcqp
zbMG<(lf0cTv|ImHp8hxE(7*Ef48O#T3q=>#9Qqf0`k!v=U)K5;yAB0xe!57O>-XGg
zf74q3&Te(LJl&)`IYDRA2e*R%x>Fi9R;caR&oi}kq3{N^l9M7cYL~Rm`%=?b((qSn
zq5L<iIV_v2*T^kXu2Hb!5lvuP)n@oX>CfJn;3NMOD+C@kKN2sH>B(PzkZlK3tzt}b
z-`otfB_<_K@g8#vzA*gO+`+R~@%!#?Rh1|HD=>oG?aTA`eY;-!;esU|rW1M|BrFY(
zPTDW#70VyXWNRRP@b#|q4}B)KdpcM@;rmgZ$zODVkMp`y_<<=$PPa1Z&u-~C@K4xd
zmylIpht3lH1CH;w-`SU_mdyUL|ESYfyZ>_!3E%m?;9~2A$rHq{Wm_JxZT+h#?o=PT
zBjZ?6$DBj|)^IP}D`8{&=gW5I&kuE+jZLti|M?5UMfI%GERO&~aSr#w_$a;=A9W3s
zxqeHEJH?CcTf)ve&3R5RNA11V3rj!veVBBZabBH2_q+2BhgvV}GpP~V@kC?_Yfba#
ztq1-wEs3dKugt0}SgU%I>x(nzjD}MW`PR5^_|N;!Y3J#Dt<Xc78Qc$<Ok_XAb{S<f
zb}N3<cjTVZSje&8X!3pEQx}c^!)qh|0Z^!&y&&?N0Z2lG7Chx|kl4PWok=1Rn8g@8
MUHx3vIVCg!0B9|v761SM
new file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..1f148d0573a985b7357023aa2e9bb1edea9e30c3
GIT binary patch
literal 1855
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
Fe*=*KKW+d3
--- a/mobile/android/base/resources/layout/home_last_tabs_page.xml
+++ b/mobile/android/base/resources/layout/home_last_tabs_page.xml
@@ -12,13 +12,14 @@
 
     <LinearLayout android:layout_width="fill_parent"
                   android:layout_height="wrap_content"
                   android:background="@color/home_last_tab_bar_bg">
 
         <Button android:id="@+id/open_all_tabs_button"
                 style="@style/Widget.Home.ActionButton"
                 android:text="@string/home_last_tabs_open"
-                android:gravity="center"/>
+                android:gravity="center"
+                android:visibility="gone"/>
 
     </LinearLayout>
 
 </LinearLayout>
--- a/mobile/android/base/strings.xml.in
+++ b/mobile/android/base/strings.xml.in
@@ -249,16 +249,17 @@
   <string name="button_set">&button_set;</string>
   <string name="button_clear">&button_clear;</string>
   <string name="button_yes">&button_yes;</string>
   <string name="button_no">&button_no;</string>
 
   <string name="home_history_title">&home_history_title;</string>
   <string name="home_last_tabs_title">&home_last_tabs_title;</string>
   <string name="home_last_tabs_open">&home_last_tabs_open;</string>
+  <string name="home_last_tabs_empty">&home_last_tabs_empty;</string>
   <string name="home_most_recent_title">&home_most_recent_title;</string>
   <string name="home_most_recent_empty">&home_most_recent_empty;</string>
   <string name="home_most_visited_title">&home_most_visited_title;</string>
   <string name="pin_bookmark_dialog_hint">&pin_bookmark_dialog_hint;</string>
 
   <string name="filepicker_title">&filepicker_title;</string>
   <string name="filepicker_audio_title">&filepicker_audio_title;</string>
   <string name="filepicker_image_title">&filepicker_image_title;</string>