Bug 1251362 - Part 6 - Hook up tab restoring code on click
MozReview-Commit-ID: KF3UJjq5zQK
--- a/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryRecyclerView.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/CombinedHistoryRecyclerView.java
@@ -119,19 +119,21 @@ public class CombinedHistoryRecyclerView
if (mOnUrlOpenListener != null) {
final TwoLinePageRow historyItem = (TwoLinePageRow) v;
Telemetry.sendUIEvent(TelemetryContract.Event.LOAD_URL, TelemetryContract.Method.LIST_ITEM, "history");
mOnUrlOpenListener.onUrlOpen(historyItem.getUrl(), EnumSet.of(HomePager.OnUrlOpenListener.Flags.ALLOW_SWITCH_TO_TAB));
}
break;
case CLOSED_TAB:
+ ((RecentTabsAdapter) getAdapter()).restoreTabFromPosition(position);
break;
case OPEN_ALL_TABS:
+ ((RecentTabsAdapter) getAdapter()).restoreAllTabsFromPosition(position);
break;
}
}
@Override
public boolean onItemLongClicked(RecyclerView recyclerView, int position, View v) {
mContextMenuInfo = ((AdapterContextMenuBuilder) getAdapter()).makeContextMenuInfoFromPosition(v, position);
return showContextMenuForChild(this);
--- a/mobile/android/base/java/org/mozilla/gecko/home/RecentTabsAdapter.java
+++ b/mobile/android/base/java/org/mozilla/gecko/home/RecentTabsAdapter.java
@@ -147,16 +147,49 @@ public class RecentTabsAdapter extends R
panelStateUpdateHandler.onPanelStateUpdated();
notifyDataSetChanged();
}
});
}
});
}
+ public void restoreTabFromPosition(int position) {
+ final List<String> dataList = new ArrayList<>(1);
+ dataList.add(getClosedTabForPosition(position).data);
+ restoreSessionWithHistory(dataList);
+ }
+
+ public void restoreAllTabsFromPosition(int position) {
+ final ClosedTab[] allClosedTabs;
+ if (isOpenAllLastSessionTabsButtonVisible() && position == getOpenAllLastSessionTabsButtonIndex()) {
+ allClosedTabs = mLastSessionTabs;
+ } else {
+ allClosedTabs = mRecentlyClosedTabs;
+ }
+
+ final List<String> dataList = new ArrayList<>(allClosedTabs.length);
+ for (ClosedTab closedTab : allClosedTabs) {
+ dataList.add(closedTab.data);
+ }
+
+ restoreSessionWithHistory(dataList);
+ }
+
+ private static void restoreSessionWithHistory(List<String> dataList) {
+ JSONObject json = new JSONObject();
+ try {
+ json.put("tabs", new JSONArray(dataList));
+ } catch (JSONException e) {
+ Log.e(LOGTAG, "JSON error", e);
+ }
+
+ GeckoAppShell.notifyObservers("Session:RestoreRecentTabs", json.toString());
+ }
+
@Override
public CombinedHistoryItem onCreateViewHolder(ViewGroup parent, int viewType) {
final LayoutInflater inflater = LayoutInflater.from(parent.getContext());
final View view;
final CombinedHistoryItem.ItemType itemType = CombinedHistoryItem.ItemType.viewTypeToItemType(viewType);
switch (itemType) {
@@ -184,22 +217,17 @@ public class RecentTabsAdapter extends R
final CombinedHistoryItem.ItemType itemType = getItemTypeForPosition(position);
switch (itemType) {
case SECTION_HEADER:
((TextView) holder.itemView).setText(context.getString(R.string.home_last_tabs_title));
break;
case CLOSED_TAB:
- ClosedTab closedTab;
- if (position <= getLastRecentTabIndex()) {
- closedTab = mRecentlyClosedTabs[position - getFirstRecentTabIndex()];
- } else {
- closedTab = mLastSessionTabs[position - getFirstLastSessionTabIndex()];
- }
+ ClosedTab closedTab = getClosedTabForPosition(position);
((CombinedHistoryItem.HistoryItem) holder).bind(closedTab);
break;
}
}
@Override
public int getItemCount() {
int itemCount = 1; // NAVIGATION_BACK button is always visible.
@@ -280,16 +308,27 @@ public class RecentTabsAdapter extends R
}
private int getOpenAllLastSessionTabsButtonIndex() {
return isOpenAllLastSessionTabsButtonVisible() ?
getLastSessionTabsSectionHeaderIndex() + mLastSessionTabs.length + BUTTON_LENGTH :
getLastSessionTabsSectionHeaderIndex() + mLastSessionTabs.length;
}
+ private ClosedTab getClosedTabForPosition(int position) {
+ ClosedTab closedTab;
+ if (position <= getLastRecentTabIndex()) {
+ closedTab = mRecentlyClosedTabs[position - getFirstRecentTabIndex()];
+ } else {
+ closedTab = mLastSessionTabs[position - getFirstLastSessionTabIndex()];
+ }
+
+ return closedTab;
+ }
+
@Override
public HomeContextMenuInfo makeContextMenuInfoFromPosition(View view, int position) {
final CombinedHistoryItem.ItemType itemType = getItemTypeForPosition(position);
HomeContextMenuInfo info;
return null;
}
}