Search in sources :

Example 1 with LinkHandler

use of org.wikipedia.page.LinkHandler in project apps-android-wikipedia by wikimedia.

the class EditPreviewFragment method displayPreview.

private void displayPreview(final String html) {
    if (!isWebViewSetup) {
        isWebViewSetup = true;
        L10nUtil.setupDirectionality(parentActivity.getPageTitle().getWikiSite().languageCode(), Locale.getDefault().getLanguage(), bridge);
        if (!WikipediaApp.getInstance().getCurrentTheme().isDefault()) {
            ThemeBridgeAdapter.setTheme(bridge);
        }
        bridge.addListener("linkClicked", new LinkHandler(getActivity()) {

            @Override
            public void onPageLinkClicked(@NonNull String href) {
            // TODO: also need to handle references, issues, disambig, ... in preview eventually
            }

            @Override
            public void onInternalLinkClicked(@NonNull final PageTitle title) {
                showLeavingEditDialogue(() -> startActivity(PageActivity.newIntentForNewTab(getContext(), new HistoryEntry(title, HistoryEntry.SOURCE_INTERNAL_LINK), title)));
            }

            @Override
            public void onExternalLinkClicked(@NonNull final Uri uri) {
                showLeavingEditDialogue(() -> handleExternalLink(getContext(), uri));
            }

            /**
             * Shows the user a dialogue asking them if they really meant to leave the edit
             * workflow, and warning them that their changes have not yet been saved.
             * @param runnable The runnable that is run if the user chooses to leave.
             */
            private void showLeavingEditDialogue(final Runnable runnable) {
                // Ask the user if they really meant to leave the edit workflow
                final AlertDialog leavingEditDialog = new AlertDialog.Builder(getActivity()).setMessage(R.string.dialog_message_leaving_edit).setPositiveButton(R.string.dialog_message_leaving_edit_leave, (dialog, which) -> {
                    // They meant to leave; close dialogue and run specified action
                    dialog.dismiss();
                    runnable.run();
                }).setNegativeButton(R.string.dialog_message_leaving_edit_stay, null).create();
                leavingEditDialog.show();
            }

            @Override
            public WikiSite getWikiSite() {
                return parentActivity.getPageTitle().getWikiSite();
            }
        });
        bridge.addListener("imageClicked", (messageType, messagePayload) -> {
        // TODO: do something when an image is clicked in Preview.
        });
        bridge.addListener("mediaClicked", (messageType, messagePayload) -> {
        // TODO: do something when a video is clicked in Preview.
        });
        bridge.addListener("referenceClicked", (messageType, messagePayload) -> {
        // TODO: do something when a reference is clicked in Preview.
        });
    }
    ViewAnimations.fadeIn(previewContainer, () -> parentActivity.supportInvalidateOptionsMenu());
    ViewAnimations.fadeOut(getActivity().findViewById(R.id.edit_section_container));
    JSONObject payload = new JSONObject();
    try {
        payload.put("html", html);
        payload.put("siteBaseUrl", parentActivity.getPageTitle().getWikiSite().url());
    } catch (JSONException e) {
        throw new RuntimeException(e);
    }
    bridge.sendMessage("displayPreviewHTML", payload);
}
Also used : AlertDialog(android.support.v7.app.AlertDialog) Bundle(android.os.Bundle) ThemeBridgeAdapter(org.wikipedia.theme.ThemeBridgeAdapter) Uri(android.net.Uri) NonNull(android.support.annotation.NonNull) PageActivity(org.wikipedia.page.PageActivity) UriUtil.handleExternalLink(org.wikipedia.util.UriUtil.handleExternalLink) HistoryEntry(org.wikipedia.history.HistoryEntry) WikiSite(org.wikipedia.dataclient.WikiSite) ArrayList(java.util.ArrayList) L10nUtil(org.wikipedia.util.L10nUtil) JSONException(org.json.JSONException) JSONObject(org.json.JSONObject) AssetManager(android.content.res.AssetManager) Locale(java.util.Locale) WikipediaApp(org.wikipedia.WikipediaApp) View(android.view.View) DeviceUtil.hideSoftKeyboard(org.wikipedia.util.DeviceUtil.hideSoftKeyboard) LinkHandler(org.wikipedia.page.LinkHandler) EditSummaryTag(org.wikipedia.edit.summaries.EditSummaryTag) R(org.wikipedia.R) LayoutInflater(android.view.LayoutInflater) Fragment(android.support.v4.app.Fragment) PageTitle(org.wikipedia.page.PageTitle) ProgressDialog(android.app.ProgressDialog) CommunicationBridge(org.wikipedia.bridge.CommunicationBridge) ViewAnimations(org.wikipedia.views.ViewAnimations) DisplayMetrics(android.util.DisplayMetrics) ViewGroup(android.view.ViewGroup) EditFunnel(org.wikipedia.analytics.EditFunnel) List(java.util.List) AlertDialog(android.support.v7.app.AlertDialog) ConfigurationCompat(org.wikipedia.util.ConfigurationCompat) ScrollView(android.widget.ScrollView) Configuration(android.content.res.Configuration) L(org.wikipedia.util.log.L) EditSectionActivity(org.wikipedia.edit.EditSectionActivity) ObservableWebView(org.wikipedia.views.ObservableWebView) Call(retrofit2.Call) Resources(android.content.res.Resources) PageTitle(org.wikipedia.page.PageTitle) JSONException(org.json.JSONException) Uri(android.net.Uri) WikiSite(org.wikipedia.dataclient.WikiSite) JSONObject(org.json.JSONObject) HistoryEntry(org.wikipedia.history.HistoryEntry) LinkHandler(org.wikipedia.page.LinkHandler)

Aggregations

ProgressDialog (android.app.ProgressDialog)1 AssetManager (android.content.res.AssetManager)1 Configuration (android.content.res.Configuration)1 Resources (android.content.res.Resources)1 Uri (android.net.Uri)1 Bundle (android.os.Bundle)1 NonNull (android.support.annotation.NonNull)1 Fragment (android.support.v4.app.Fragment)1 AlertDialog (android.support.v7.app.AlertDialog)1 DisplayMetrics (android.util.DisplayMetrics)1 LayoutInflater (android.view.LayoutInflater)1 View (android.view.View)1 ViewGroup (android.view.ViewGroup)1 ScrollView (android.widget.ScrollView)1 ArrayList (java.util.ArrayList)1 List (java.util.List)1 Locale (java.util.Locale)1 JSONException (org.json.JSONException)1 JSONObject (org.json.JSONObject)1 R (org.wikipedia.R)1