Mholloway has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/331824 )
Change subject: Handle new Parsoid reference links ...................................................................... Handle new Parsoid reference links Parsoid recently changed the formatting of reference link hrefs to include the page title before the URL fragment. Update the app-side link handling to handle this format. Bug: T155070 Change-Id: I6a6b12984807358d3800bd8a6f89c5649f3c2c9f --- M app/src/main/java/org/wikipedia/edit/preview/EditPreviewFragment.java M app/src/main/java/org/wikipedia/page/LinkHandler.java M app/src/main/java/org/wikipedia/page/PageFragment.java A app/src/main/java/org/wikipedia/page/PageTitleContextFragment.java A app/src/test/java/org/wikipedia/page/LinkHandlerTest.java 5 files changed, 78 insertions(+), 12 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/apps/android/wikipedia refs/changes/24/331824/1 diff --git a/app/src/main/java/org/wikipedia/edit/preview/EditPreviewFragment.java b/app/src/main/java/org/wikipedia/edit/preview/EditPreviewFragment.java index 2bef695..db6059f 100644 --- a/app/src/main/java/org/wikipedia/edit/preview/EditPreviewFragment.java +++ b/app/src/main/java/org/wikipedia/edit/preview/EditPreviewFragment.java @@ -31,6 +31,7 @@ import org.wikipedia.page.LinkHandler; import org.wikipedia.page.PageActivity; import org.wikipedia.page.PageTitle; +import org.wikipedia.page.PageTitleContextFragment; import org.wikipedia.util.ConfigurationCompat; import org.wikipedia.util.L10nUtil; import org.wikipedia.util.UriUtil; @@ -46,10 +47,11 @@ import static org.wikipedia.util.DeviceUtil.hideSoftKeyboard; -public class EditPreviewFragment extends Fragment { +public class EditPreviewFragment extends Fragment implements PageTitleContextFragment { private ObservableWebView webview; private ScrollView previewContainer; private EditSectionActivity parentActivity; + @NonNull private PageTitle pageTitle; private ViewGroup editSummaryTagsContainer; @@ -62,6 +64,10 @@ private ProgressDialog progressDialog; private EditFunnel funnel; + + public PageTitle getTitle() { + return pageTitle; + } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { @@ -79,8 +85,8 @@ public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - parentActivity = (EditSectionActivity)getActivity(); - PageTitle pageTitle = parentActivity.getPageTitle(); + parentActivity = (EditSectionActivity) getActivity(); + pageTitle = parentActivity.getPageTitle(); funnel = WikipediaApp.getInstance().getFunnelManager().getEditFunnel(pageTitle); /* @@ -189,7 +195,7 @@ new DarkModeMarshaller(bridge).turnOn(false); } - new LinkHandler(getActivity(), bridge) { + new LinkHandler(this) { @Override public void onPageLinkClicked(String href) { // TODO: also need to handle references, issues, disambig, ... in preview eventually diff --git a/app/src/main/java/org/wikipedia/page/LinkHandler.java b/app/src/main/java/org/wikipedia/page/LinkHandler.java index 06fa39d..f708343 100644 --- a/app/src/main/java/org/wikipedia/page/LinkHandler.java +++ b/app/src/main/java/org/wikipedia/page/LinkHandler.java @@ -20,15 +20,15 @@ * Handles any html links coming from a {@link org.wikipedia.page.PageFragment} */ public abstract class LinkHandler implements CommunicationBridge.JSEventListener, LinkMovementMethodExt.UrlHandler { - private final Context context; + @NonNull private Context context; + @Nullable private PageTitleContextFragment fragment; - public LinkHandler(Context context, CommunicationBridge bridge) { - this(context); - - bridge.addListener("linkClicked", this); + public LinkHandler(@NonNull PageTitleContextFragment fragment) { + this.context = fragment.getActivity(); + this.fragment = fragment; } - public LinkHandler(Context context) { + LinkHandler(@NonNull Context context) { this.context = context; } @@ -64,6 +64,8 @@ onInternalLinkClicked(title); } else if (href.startsWith("#")) { onPageLinkClicked(href.substring(1)); + } else if (fragment != null && href.startsWith(fragment.getTitle().getText() + "#")) { + onPageLinkClicked(href.substring(fragment.getTitle().getText().length() + 1)); } else { Uri uri = Uri.parse(href); String authority = uri.getAuthority(); diff --git a/app/src/main/java/org/wikipedia/page/PageFragment.java b/app/src/main/java/org/wikipedia/page/PageFragment.java index 49f5432..ae79c50 100755 --- a/app/src/main/java/org/wikipedia/page/PageFragment.java +++ b/app/src/main/java/org/wikipedia/page/PageFragment.java @@ -97,7 +97,7 @@ import static org.wikipedia.util.UriUtil.decodeURL; import static org.wikipedia.util.UriUtil.visitInExternalBrowser; -public class PageFragment extends Fragment implements BackPressedHandler { +public class PageFragment extends Fragment implements BackPressedHandler, PageTitleContextFragment { public interface Callback { void onPageShowBottomSheet(@NonNull BottomSheetDialog dialog); void onPageShowBottomSheet(@NonNull BottomSheetDialogFragment dialog); @@ -330,7 +330,7 @@ setupMessageHandlers(); sendDecorOffsetMessage(); - linkHandler = new LinkHandler(getActivity(), bridge) { + linkHandler = new LinkHandler(this) { @Override public void onPageLinkClicked(String anchor) { dismissBottomSheet(); @@ -353,6 +353,7 @@ return model.getTitle().getWikiSite(); } }; + bridge.addListener("linkClicked", linkHandler); new ReferenceHandler(bridge) { @Override diff --git a/app/src/main/java/org/wikipedia/page/PageTitleContextFragment.java b/app/src/main/java/org/wikipedia/page/PageTitleContextFragment.java new file mode 100644 index 0000000..1091b68 --- /dev/null +++ b/app/src/main/java/org/wikipedia/page/PageTitleContextFragment.java @@ -0,0 +1,9 @@ +package org.wikipedia.page; + +import android.app.Activity; +import android.support.annotation.NonNull; + +public interface PageTitleContextFragment { + @NonNull PageTitle getTitle(); + @NonNull Activity getActivity(); +} diff --git a/app/src/test/java/org/wikipedia/page/LinkHandlerTest.java b/app/src/test/java/org/wikipedia/page/LinkHandlerTest.java new file mode 100644 index 0000000..03f7f71 --- /dev/null +++ b/app/src/test/java/org/wikipedia/page/LinkHandlerTest.java @@ -0,0 +1,48 @@ +package org.wikipedia.page; + +import android.support.annotation.NonNull; + +import org.junit.Test; +import org.junit.runner.RunWith; +import org.wikipedia.dataclient.WikiSite; +import org.wikipedia.test.TestRunner; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.fail; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@RunWith(TestRunner.class) public class LinkHandlerTest { + + @Test public void testParseCitationHref() { + String mwApiCitationHref = "#cite_note-CD-1"; + String restBaseCitationHref = "Barack_Obama#cite_note-CD-1"; + + PageFragment fragment = mock(PageFragment.class); + PageTitle title = new PageTitle(null, "Barack_Obama", new WikiSite("test.wikipedia.org")); + when(fragment.getTitle()).thenReturn(title); + + LinkHandler linkHandler = getTestHandler(fragment); + linkHandler.onUrlClick(mwApiCitationHref, null); + linkHandler.onUrlClick(restBaseCitationHref, null); + } + + private LinkHandler getTestHandler(@NonNull PageTitleContextFragment fragment) { + return new LinkHandler(fragment) { + @Override + public void onPageLinkClicked(String anchor) { + assertEquals(anchor, "cite_note-CD-1"); + } + + @Override + public void onInternalLinkClicked(PageTitle title) { + fail("This method should not be called!"); + } + + @Override + public WikiSite getWikiSite() { + return null; + } + }; + } +} -- To view, visit https://gerrit.wikimedia.org/r/331824 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I6a6b12984807358d3800bd8a6f89c5649f3c2c9f Gerrit-PatchSet: 1 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Mholloway <mhollo...@wikimedia.org> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits