jenkins-bot has submitted this change and it was merged. ( https://gerrit.wikimedia.org/r/333317 )
Change subject: Show link previews for (Wikipedia) links in gallery item descriptions ...................................................................... Show link previews for (Wikipedia) links in gallery item descriptions Note that many links in gallery item descriptions are for Commons pages and will not be handled in-app (see T156018). Bug: T142024 Change-Id: If7ce774861176ba71af4345742a3eee99955dea3 --- M app/src/main/java/org/wikipedia/gallery/GalleryActivity.java M app/src/main/java/org/wikipedia/history/HistoryEntry.java M app/src/main/java/org/wikipedia/main/MainFragment.java M app/src/main/java/org/wikipedia/page/ExclusiveBottomSheetPresenter.java M app/src/main/java/org/wikipedia/page/PageActivity.java M app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java 6 files changed, 62 insertions(+), 18 deletions(-) Approvals: Niedzielski: Looks good to me, approved jenkins-bot: Verified diff --git a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java index 631f31f..16f9842 100644 --- a/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java +++ b/app/src/main/java/org/wikipedia/gallery/GalleryActivity.java @@ -38,14 +38,19 @@ import org.wikipedia.history.HistoryEntry; import org.wikipedia.json.GsonMarshaller; import org.wikipedia.json.GsonUnmarshaller; +import org.wikipedia.page.ExclusiveBottomSheetPresenter; import org.wikipedia.page.LinkMovementMethodExt; import org.wikipedia.page.Page; import org.wikipedia.page.PageActivity; import org.wikipedia.page.PageCache; import org.wikipedia.page.PageTitle; +import org.wikipedia.page.linkpreview.LinkPreviewDialog; +import org.wikipedia.readinglist.AddToReadingListDialog; import org.wikipedia.theme.Theme; +import org.wikipedia.util.ClipboardUtil; import org.wikipedia.util.FeedbackUtil; import org.wikipedia.util.GradientUtil; +import org.wikipedia.util.ShareUtil; import org.wikipedia.util.StringUtil; import org.wikipedia.util.log.L; import org.wikipedia.views.ViewAnimations; @@ -60,8 +65,8 @@ import static org.wikipedia.util.UriUtil.handleExternalLink; import static org.wikipedia.util.UriUtil.resolveProtocolRelativeUrl; -public class GalleryActivity extends ThemedActionBarActivity { - public static final int ACTIVITY_RESULT_FILEPAGE_SELECT = 1; +public class GalleryActivity extends ThemedActionBarActivity implements LinkPreviewDialog.Callback { + public static final int ACTIVITY_RESULT_PAGE_SELECTED = 1; public static final String EXTRA_PAGETITLE = "pageTitle"; public static final String EXTRA_FILENAME = "filename"; @@ -71,6 +76,7 @@ public static final String EXTRA_FEATURED_IMAGE_AGE = "featuredImageAge"; @NonNull private WikipediaApp app = WikipediaApp.getInstance(); + @NonNull private ExclusiveBottomSheetPresenter bottomSheetPresenter = new ExclusiveBottomSheetPresenter(); @Nullable private PageTitle pageTitle; @Nullable private Page page; private boolean cacheOnLoad; @@ -369,6 +375,11 @@ setControlsShowing(!controlsShowing); } + public void showLinkPreview(@NonNull PageTitle title) { + bottomSheetPresenter.show(getSupportFragmentManager(), + LinkPreviewDialog.newInstance(title, HistoryEntry.SOURCE_GALLERY, null)); + } + /** * LinkMovementMethod for handling clicking of links in the description or metadata * text fields. For internal links, this activity will close, and pass the page title as @@ -383,14 +394,14 @@ WikiSite appWikiSite = app.getWikiSite(); if (url.startsWith("/wiki/")) { PageTitle title = appWikiSite.titleForInternalLink(url); - finishWithPageResult(title); + showLinkPreview(title); } else { Uri uri = Uri.parse(url); String authority = uri.getAuthority(); if (authority != null && WikiSite.supportedAuthority(authority) && uri.getPath().startsWith("/wiki/")) { PageTitle title = appWikiSite.titleForUri(uri); - finishWithPageResult(title); + showLinkPreview(title); } else { // if it's a /w/ URI, turn it into a full URI and go external if (url.startsWith("/w/")) { @@ -407,14 +418,33 @@ * by the activity that originally launched us. * @param resultTitle PageTitle to pass as the activity result. */ - public void finishWithPageResult(PageTitle resultTitle) { - HistoryEntry historyEntry = new HistoryEntry(resultTitle, - HistoryEntry.SOURCE_INTERNAL_LINK); + public void finishWithPageResult(@NonNull PageTitle resultTitle) { + finishWithPageResult(resultTitle, new HistoryEntry(resultTitle, HistoryEntry.SOURCE_GALLERY)); + } + + public void finishWithPageResult(@NonNull PageTitle resultTitle, @NonNull HistoryEntry historyEntry) { Intent intent = PageActivity.newIntent(GalleryActivity.this, historyEntry, resultTitle); - setResult(ACTIVITY_RESULT_FILEPAGE_SELECT, intent); + setResult(ACTIVITY_RESULT_PAGE_SELECTED, intent); finish(); } + @Override public void onLinkPreviewLoadPage(@NonNull PageTitle title, @NonNull HistoryEntry entry, boolean inNewTab) { + finishWithPageResult(title, entry); + } + + @Override public void onLinkPreviewCopyLink(@NonNull PageTitle title) { + ClipboardUtil.setPlainText(this, null, title.getCanonicalUri()); + FeedbackUtil.showMessage(this, R.string.address_copied); + } + + @Override public void onLinkPreviewAddToList(@NonNull PageTitle title) { + bottomSheetPresenter.showAddToListDialog(getSupportFragmentManager(), title, AddToReadingListDialog.InvokeSource.LINK_PREVIEW_MENU); + } + + @Override public void onLinkPreviewShareLink(@NonNull PageTitle title) { + ShareUtil.shareText(this, title); + } + /** * Retrieve the complete list of media items for the current page. * When retrieved, the list will be passed to the ViewPager, and will become a diff --git a/app/src/main/java/org/wikipedia/history/HistoryEntry.java b/app/src/main/java/org/wikipedia/history/HistoryEntry.java index 529de91..89f9f3e 100644 --- a/app/src/main/java/org/wikipedia/history/HistoryEntry.java +++ b/app/src/main/java/org/wikipedia/history/HistoryEntry.java @@ -29,6 +29,7 @@ public static final int SOURCE_NEWS = 16; public static final int SOURCE_FEED_MAIN_PAGE = 17; public static final int SOURCE_FEED_RANDOM = 18; + public static final int SOURCE_GALLERY = 19; // Or should we just use SOURCE_INTERNAL_LINK as before? Some of these things seem not like the others. @NonNull private final PageTitle title; @NonNull private final Date timestamp; diff --git a/app/src/main/java/org/wikipedia/main/MainFragment.java b/app/src/main/java/org/wikipedia/main/MainFragment.java index a84bd6d..990cdef 100644 --- a/app/src/main/java/org/wikipedia/main/MainFragment.java +++ b/app/src/main/java/org/wikipedia/main/MainFragment.java @@ -143,7 +143,7 @@ String searchQuery = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS).get(0); openSearchFragment(SearchInvokeSource.VOICE, searchQuery); } else if (requestCode == Constants.ACTIVITY_REQUEST_GALLERY - && resultCode == GalleryActivity.ACTIVITY_RESULT_FILEPAGE_SELECT) { + && resultCode == GalleryActivity.ACTIVITY_RESULT_PAGE_SELECTED) { startActivity(data); } else if (requestCode == Constants.ACTIVITY_REQUEST_LOGIN && resultCode == LoginActivity.RESULT_LOGIN_SUCCESS) { diff --git a/app/src/main/java/org/wikipedia/page/ExclusiveBottomSheetPresenter.java b/app/src/main/java/org/wikipedia/page/ExclusiveBottomSheetPresenter.java index 2288c3d..5693418 100644 --- a/app/src/main/java/org/wikipedia/page/ExclusiveBottomSheetPresenter.java +++ b/app/src/main/java/org/wikipedia/page/ExclusiveBottomSheetPresenter.java @@ -3,13 +3,27 @@ import android.app.Dialog; import android.content.DialogInterface; import android.support.annotation.NonNull; +import android.support.annotation.Nullable; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentManager; + +import org.wikipedia.readinglist.AddToReadingListDialog; public class ExclusiveBottomSheetPresenter { private static final String BOTTOM_SHEET_FRAGMENT_TAG = "bottom_sheet_fragment"; private Dialog currentDialog; + public void showAddToListDialog(@NonNull FragmentManager fm, @NonNull PageTitle title, + @NonNull AddToReadingListDialog.InvokeSource source) { + show(fm, AddToReadingListDialog.newInstance(title, source, null)); + } + + public void showAddToListDialog(@NonNull FragmentManager fm, @NonNull PageTitle title, + @NonNull AddToReadingListDialog.InvokeSource source, + @Nullable DialogInterface.OnDismissListener listener) { + show(fm, AddToReadingListDialog.newInstance(title, source, listener)); + } + public void show(@NonNull FragmentManager manager, @NonNull DialogFragment dialog) { dismiss(manager); dialog.show(manager, BOTTOM_SHEET_FRAGMENT_TAG); diff --git a/app/src/main/java/org/wikipedia/page/PageActivity.java b/app/src/main/java/org/wikipedia/page/PageActivity.java index 69234af..30e543b 100644 --- a/app/src/main/java/org/wikipedia/page/PageActivity.java +++ b/app/src/main/java/org/wikipedia/page/PageActivity.java @@ -409,9 +409,8 @@ bottomSheetPresenter.dismiss(getSupportFragmentManager()); } - public void showAddToListDialog(PageTitle title, AddToReadingListDialog.InvokeSource source) { - bottomSheetPresenter.show(getSupportFragmentManager(), - AddToReadingListDialog.newInstance(title, source, listDialogDismissListener)); + public void showAddToListDialog(@NonNull PageTitle title, @NonNull AddToReadingListDialog.InvokeSource source) { + bottomSheetPresenter.showAddToListDialog(getSupportFragmentManager(), title, source, listDialogDismissListener); } @Override @@ -707,14 +706,14 @@ public void onActivityResult(int requestCode, int resultCode, final Intent data) { if (settingsActivityRequested(requestCode)) { handleSettingsActivityResult(resultCode); - } else if (newArticleLanguageSelected(requestCode, resultCode) || galleryFilePageSelected(requestCode, resultCode)) { - handleLangLinkOrFilePageResult(data); + } else if (newArticleLanguageSelected(requestCode, resultCode) || galleryPageSelected(requestCode, resultCode)) { + handleLangLinkOrPageResult(data); } else { super.onActivityResult(requestCode, resultCode, data); } } - private void handleLangLinkOrFilePageResult(final Intent data) { + private void handleLangLinkOrPageResult(final Intent data) { tabsContainerView.post(new Runnable() { @Override public void run() { @@ -807,8 +806,8 @@ return requestCode == Constants.ACTIVITY_REQUEST_LANGLINKS && resultCode == LangLinksActivity.ACTIVITY_RESULT_LANGLINK_SELECT; } - private boolean galleryFilePageSelected(int requestCode, int resultCode) { - return requestCode == Constants.ACTIVITY_REQUEST_GALLERY && resultCode == GalleryActivity.ACTIVITY_RESULT_FILEPAGE_SELECT; + private boolean galleryPageSelected(int requestCode, int resultCode) { + return requestCode == Constants.ACTIVITY_REQUEST_GALLERY && resultCode == GalleryActivity.ACTIVITY_RESULT_PAGE_SELECTED; } private boolean languageChanged(int resultCode) { diff --git a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java index 63343f7..c029027 100755 --- a/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java +++ b/app/src/main/java/org/wikipedia/page/linkpreview/LinkPreviewDialog.java @@ -218,7 +218,7 @@ @Override public void onActivityResult(int requestCode, int resultCode, final Intent data) { if (requestCode == Constants.ACTIVITY_REQUEST_GALLERY - && resultCode == GalleryActivity.ACTIVITY_RESULT_FILEPAGE_SELECT) { + && resultCode == GalleryActivity.ACTIVITY_RESULT_PAGE_SELECTED) { startActivity(data); } else { super.onActivityResult(requestCode, resultCode, data); -- To view, visit https://gerrit.wikimedia.org/r/333317 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: merged Gerrit-Change-Id: If7ce774861176ba71af4345742a3eee99955dea3 Gerrit-PatchSet: 6 Gerrit-Project: apps/android/wikipedia Gerrit-Branch: master Gerrit-Owner: Mholloway <mhollo...@wikimedia.org> Gerrit-Reviewer: Brion VIBBER <br...@wikimedia.org> Gerrit-Reviewer: Dbrant <dbr...@wikimedia.org> Gerrit-Reviewer: Niedzielski <sniedziel...@wikimedia.org> Gerrit-Reviewer: jenkins-bot <> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits