use of org.wikipedia.page.tabs.Tab in project apps-android-wikipedia by wikimedia.
the class TabUnmarshaller method unmarshal.
@NonNull
public static List<Tab> unmarshal(@Nullable String json) {
List<Tab> object = null;
try {
object = GsonUnmarshaller.unmarshal(TYPE_TOKEN, json);
} catch (Exception e) {
// Catch all. Any Exception can be thrown when unmarshalling.
L.logRemoteErrorIfProd(new RemoteLogException(e).put("json", json));
}
if (object == null) {
object = Collections.emptyList();
}
// T152980
// When upgrading from much older versions (namely, 2.1.141 or earlier), the serialized
// tab list may be in a format that causes WikiSite objects to have null Uri components.
// If we encounter one of these occurrences, just clear out the entire tab list.
// to be on the safe side.
// TODO: Remove when the incidence of this is sufficiently diminished (April 2017?)
boolean bad = false;
for (Tab tab : object) {
for (PageBackStackItem item : tab.getBackStack()) {
if (TextUtils.isEmpty(item.getTitle().getWikiSite().authority()) || TextUtils.isEmpty(item.getHistoryEntry().getTitle().getWikiSite().authority())) {
L.logRemoteErrorIfProd(new IllegalArgumentException("Format error in serialized tab list."));
bad = true;
break;
}
}
}
if (bad) {
object.clear();
}
return object;
}
use of org.wikipedia.page.tabs.Tab in project apps-android-wikipedia by wikimedia.
the class TabUnmarshallerTest method testUnmarshalSingle.
@Test
public void testUnmarshalSingle() {
PageTitle page = new PageTitle("text", WikiSite.forLanguageCode("test"));
HistoryEntry history = new HistoryEntry(page, new Date(0), HistoryEntry.SOURCE_SEARCH);
Tab tab = new Tab();
tab.getBackStack().add(new PageBackStackItem(page, history));
List<Tab> tabs = singletonList(tab);
assertThat(TabUnmarshaller.unmarshal(GsonMarshaller.marshal(tabs)), is(tabs));
}
use of org.wikipedia.page.tabs.Tab in project apps-android-wikipedia by wikimedia.
the class TabUnmarshallerTest method testUnmarshalNoHistoryEntryAuthority.
// T152980
@Test(expected = RuntimeException.class)
public void testUnmarshalNoHistoryEntryAuthority() {
PageTitle page = new PageTitle("text", WikiSite.forLanguageCode("test"));
PageTitle prevPage = new PageTitle("text", new WikiSite("", ""));
HistoryEntry history = new HistoryEntry(prevPage, new Date(0), HistoryEntry.SOURCE_SEARCH);
Tab tab = new Tab();
tab.getBackStack().add(new PageBackStackItem(page, history));
List<Tab> tabs = singletonList(tab);
TabUnmarshaller.unmarshal(GsonMarshaller.marshal(tabs));
}
use of org.wikipedia.page.tabs.Tab in project apps-android-wikipedia by wikimedia.
the class TabUnmarshallerTest method testUnmarshalNoPageTitleAuthority.
// T152980
@Test(expected = RuntimeException.class)
public void testUnmarshalNoPageTitleAuthority() {
PageTitle page = new PageTitle("text", new WikiSite("", ""));
HistoryEntry history = new HistoryEntry(page, new Date(0), HistoryEntry.SOURCE_SEARCH);
Tab tab = new Tab();
tab.getBackStack().add(new PageBackStackItem(page, history));
List<Tab> tabs = singletonList(tab);
TabUnmarshaller.unmarshal(GsonMarshaller.marshal(tabs));
}
use of org.wikipedia.page.tabs.Tab in project apps-android-wikipedia by wikimedia.
the class PageFragment method openInNewTab.
private void openInNewTab(@NonNull PageTitle title, @NonNull HistoryEntry entry, int position) {
if (shouldCreateNewTab()) {
// create a new tab
Tab tab = new Tab();
boolean isForeground = position == getForegroundTabPosition();
// if the requested position is at the top, then make its backstack current
if (isForeground) {
pageFragmentLoadState.setBackStack(tab.getBackStack());
}
// put this tab in the requested position
tabList.add(position, tab);
trimTabCount();
tabsProvider.invalidate();
// add the requested page to its backstack
tab.getBackStack().add(new PageBackStackItem(title, entry));
if (!isForeground) {
loadIntoCache(title);
}
getActivity().invalidateOptionsMenu();
} else {
getTopMostTab().getBackStack().add(new PageBackStackItem(title, entry));
}
}
Aggregations