diff --git a/mobile/android/base/BrowserApp.java b/mobile/android/base/BrowserApp.java
index e3d9fa710615..95049a690dbe 100644
--- a/mobile/android/base/BrowserApp.java
+++ b/mobile/android/base/BrowserApp.java
@@ -1431,6 +1431,13 @@ abstract public class BrowserApp extends GeckoApp
return;
}
+ // Hide any visible homepager subpages
+ final FragmentManager fm = getSupportFragmentManager();
+ final Fragment subPage = fm.findFragmentByTag(HomePager.SUBPAGE_TAG);
+ if (subPage != null) {
+ fm.beginTransaction().remove(subPage).commitAllowingStateLoss();
+ }
+
// FIXME: do animation if animate is true
mHomePager.hide();
diff --git a/mobile/android/base/Makefile.in b/mobile/android/base/Makefile.in
index 974f8e85c1c8..59700c563088 100644
--- a/mobile/android/base/Makefile.in
+++ b/mobile/android/base/Makefile.in
@@ -471,6 +471,7 @@ RES_LAYOUT = \
res/layout/home_header_row.xml \
res/layout/home_list_with_title.xml \
res/layout/home_search_item_row.xml \
+ res/layout/home_visited_page.xml \
res/layout/web_app.xml \
res/layout/launch_app_list.xml \
res/layout/launch_app_listitem.xml \
diff --git a/mobile/android/base/home/HomeFragment.java b/mobile/android/base/home/HomeFragment.java
index 29e6cc1df227..4cc2718a5f44 100644
--- a/mobile/android/base/home/HomeFragment.java
+++ b/mobile/android/base/home/HomeFragment.java
@@ -46,6 +46,12 @@ class HomeFragment extends Fragment {
// URL to Title replacement regex.
private static final String REGEX_URL_TO_TITLE = "^([a-z]+://)?(www\\.)?";
+ protected void showSubPage(Fragment subPage) {
+ getActivity().getSupportFragmentManager().beginTransaction()
+ .addToBackStack(null).replace(R.id.home_pager_container, subPage, HomePager.SUBPAGE_TAG)
+ .commitAllowingStateLoss();
+ }
+
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo) {
if (!(menuInfo instanceof HomeContextMenuInfo)) {
diff --git a/mobile/android/base/home/HomePager.java b/mobile/android/base/home/HomePager.java
index a4e4be886b87..de9947af12e7 100644
--- a/mobile/android/base/home/HomePager.java
+++ b/mobile/android/base/home/HomePager.java
@@ -22,6 +22,9 @@ import java.util.EnumMap;
import java.util.EnumSet;
public class HomePager extends ViewPager {
+ // Subpage fragment tag
+ public static final String SUBPAGE_TAG = "home_pager_subpage";
+
private final Context mContext;
private volatile boolean mLoaded;
diff --git a/mobile/android/base/home/VisitedPage.java b/mobile/android/base/home/VisitedPage.java
index c1fb48044ef4..69deb27f1f19 100644
--- a/mobile/android/base/home/VisitedPage.java
+++ b/mobile/android/base/home/VisitedPage.java
@@ -43,6 +43,12 @@ public class VisitedPage extends HomeFragment {
// The view shown by the fragment.
private ListView mList;
+ // Empty message view
+ private View mEmptyMessage;
+
+ // Buttons container
+ private View mButtonsContainer;
+
// Callbacks used for the search and favicon cursor loaders
private CursorLoaderCallbacks mCursorLoaderCallbacks;
@@ -74,16 +80,15 @@ public class VisitedPage extends HomeFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // All list views are styled to look the same with a global activity theme.
- // If the style of the list changes, inflate it from an XML.
- mList = new HomeListView(container.getContext());
- return mList;
+ return inflater.inflate(R.layout.home_visited_page, container, false);
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+ mList = (HomeListView) view.findViewById(R.id.visited_list);
+
mList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView> parent, View view, int position, long id) {
@@ -98,12 +103,33 @@ public class VisitedPage extends HomeFragment {
});
registerForContextMenu(mList);
+
+ mEmptyMessage = view.findViewById(R.id.empty_message);
+ mButtonsContainer = view.findViewById(R.id.buttons_container);
+
+ final View historyButton = view.findViewById(R.id.history_button);
+ historyButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showHistoryPage();
+ }
+ });
+
+ final View tabsButton = view.findViewById(R.id.tabs_button);
+ tabsButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showTabsPage();
+ }
+ });
}
@Override
public void onDestroyView() {
super.onDestroyView();
mList = null;
+ mButtonsContainer = null;
+ mEmptyMessage = null;
}
@Override
@@ -121,6 +147,16 @@ public class VisitedPage extends HomeFragment {
getLoaderManager().initLoader(FRECENCY_LOADER_ID, null, mCursorLoaderCallbacks);
}
+ private void showHistoryPage() {
+ final HistoryPage historyPage = HistoryPage.newInstance();
+ showSubPage(historyPage);
+ }
+
+ private void showTabsPage() {
+ final LastTabsPage lastTabsPage = LastTabsPage.newInstance();
+ showSubPage(lastTabsPage);
+ }
+
private static class FrecencyCursorLoader extends SimpleCursorLoader {
// Max number of search results
private static final int SEARCH_LIMIT = 50;
@@ -172,6 +208,13 @@ public class VisitedPage extends HomeFragment {
final int loaderId = loader.getId();
switch(loaderId) {
case FRECENCY_LOADER_ID:
+ // Only set empty view once cursor is loaded to avoid
+ // flashing the empty message before loading.
+ mList.setEmptyView(mEmptyMessage);
+
+ final int buttonsVisibility = (c.getCount() == 0 ? View.GONE : View.VISIBLE);
+ mButtonsContainer.setVisibility(buttonsVisibility);
+
mAdapter.swapCursor(c);
FaviconsLoader.restartFromCursor(getLoaderManager(), FAVICONS_LOADER_ID,
diff --git a/mobile/android/base/locales/en-US/android_strings.dtd b/mobile/android/base/locales/en-US/android_strings.dtd
index 3ad868ec5bee..24f4b4227262 100644
--- a/mobile/android/base/locales/en-US/android_strings.dtd
+++ b/mobile/android/base/locales/en-US/android_strings.dtd
@@ -274,6 +274,7 @@ size. -->
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/mobile/android/base/resources/values/styles.xml b/mobile/android/base/resources/values/styles.xml
index 4e1567f29fcc..a471f816cfee 100644
--- a/mobile/android/base/resources/values/styles.xml
+++ b/mobile/android/base/resources/values/styles.xml
@@ -502,6 +502,25 @@
- @color/abouthome_section_subtitle
+
+
+
+