Source:
<code>private void displayNonLeadSection(int index, boolean savedPage) { activity.updateProgressBar(true, false, PageActivity.PROGRESS_BAR_MAX_VALUE / model.getPage() .getSections().size() * index); <START> if (index >= model.getPage().getSections().size()) { <END> return; } try { final Page page = model.getPage(); JSONObject wrapper = new JSONObject(); wrapper.put("sequence", sequenceNumber.get()); wrapper.put(BRIDGE_PAYLOAD_SAVED_PAGE, savedPage); boolean lastSection = index == page.getSections().size(); if (!lastSection) { JSONObject section = page.getSections().get(index).toJSON(); wrapper.put("section", section); wrapper.put("index", index); if (sectionTargetFromIntent > 0 && sectionTargetFromIntent < page.getSections().size()) { wrapper.put("fragment", page.getSections().get(sectionTargetFromIntent).getAnchor()); } else if (sectionTargetFromTitle != null) { wrapper.put("fragment", sectionTargetFromTitle); } else if (!TextUtils.isEmpty(model.getTitle().getFragment())) { wrapper.put("fragment", model.getTitle().getFragment()); } } else { wrapper.put("noMore", true); } wrapper.put("scrollY", (int) (stagedScrollY / activity.getResources().getDisplayMetrics().density)); bridge.sendMessage("displaySection", wrapper); if (savedPage && lastSection) { fragment.readUrlMappings(); } } catch (JSONException e) { L.logRemoteErrorIfProd(e); } }</code><technical_language>This scenario a symptom of falling out of synchronicity. In general, I strive write methods unsurprising called time. However, surprising intentionally do this ourselves. If agree, mind adding a TODO, HACK, L.logErrorIfProd()</technical_language>

Target:
private void displayNonLeadSection(int index, boolean savedPage) { activity.updateProgressBar(true, false, PageActivity.PROGRESS_BAR_MAX_VALUE / model.getPage() .getSections().size() * index); if (index >= model.getPage().getSections().size()) { String errorText = "Section index mismatch!"; errorText += " modelTitle=" + model.getTitleOriginal().getPrefixedText(); errorText += ", pageTitle=" + model.getPage().getTitle().getPrefixedText(); errorText += ", source=" + model.getCurEntry().getSource(); L.logRemoteErrorIfProd(new RuntimeException(errorText)); return; } try { final Page page = model.getPage(); JSONObject wrapper = new JSONObject(); wrapper.put("sequence", sequenceNumber.get()); wrapper.put(BRIDGE_PAYLOAD_SAVED_PAGE, savedPage); boolean lastSection = index == page.getSections().size(); if (!lastSection) { JSONObject section = page.getSections().get(index).toJSON(); wrapper.put("section", section); wrapper.put("index", index); if (sectionTargetFromIntent > 0 && sectionTargetFromIntent < page.getSections().size()) { wrapper.put("fragment", page.getSections().get(sectionTargetFromIntent).getAnchor()); } else if (sectionTargetFromTitle != null) { wrapper.put("fragment", sectionTargetFromTitle); } else if (!TextUtils.isEmpty(model.getTitle().getFragment())) { wrapper.put("fragment", model.getTitle().getFragment()); } } else { wrapper.put("noMore", true); } wrapper.put("scrollY", (int) (stagedScrollY / activity.getResources().getDisplayMetrics().density)); bridge.sendMessage("displaySection", wrapper); if (savedPage && lastSection) { fragment.readUrlMappings(); } } catch (JSONException e) { L.logRemoteErrorIfProd(e); } }