Added context menu to shownotes view

This commit is contained in:
daniel oeh 2013-02-21 18:13:41 +01:00
parent f387929170
commit cb82268f7d
4 changed files with 105 additions and 6 deletions

View File

@ -2,12 +2,15 @@
<item name="action_bar_refresh" type="id"/>
<item name="action_bar_add" type="id"/>
<item type="id" name="clear_queue_item"/>
<item type="id" name="select_all_item"/>
<item type="id" name="deselect_all_item"/>
<item type="id" name="search_item"/>
<item name="clear_queue_item" type="id"/>
<item name="select_all_item" type="id"/>
<item name="deselect_all_item" type="id"/>
<item name="search_item" type="id"/>
<item name="enqueue_all_item" type="id"/>
<item name="download_all_item" type="id"/>
<item type="id" name="clear_history_item"/>
<item name="clear_history_item" type="id"/>
<item name="open_in_browser_item" type="id"/>
<item name="copy_url_item" type="id"/>
<item name="share_url_item" type="id"/>
</resources>

View File

@ -14,6 +14,12 @@
<string name="download_log_label">Download log</string>
<string name="playback_history_label">Playback history</string>
<!-- Webview actions -->
<string name="open_in_browser_label">Open in browser</string>
<string name="copy_url_label">Copy URL</string>
<string name="share_url_label">Share URL</string>
<string name="copied_url_msg">Copied URL to clipboard.</string>
<!-- Playback history -->
<string name="clear_history_label">Clear history</string>

View File

@ -4,19 +4,28 @@ import org.apache.commons.lang3.StringEscapeUtils;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ClipData;
import android.content.Context;
import android.content.Intent;
import android.content.res.TypedArray;
import android.net.Uri;
import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
import android.util.Log;
import android.util.TypedValue;
import android.view.ContextMenu;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.LayoutInflater;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebSettings.LayoutAlgorithm;
import android.webkit.WebView;
import android.widget.FrameLayout;
import android.widget.LinearLayout;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragment;
@ -26,6 +35,7 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.feed.Feed;
import de.danoeh.antennapod.feed.FeedItem;
import de.danoeh.antennapod.feed.FeedManager;
import de.danoeh.antennapod.util.ShareUtils;
/** Displays the description of a FeedItem in a Webview. */
public class ItemDescriptionFragment extends SherlockFragment {
@ -42,6 +52,9 @@ public class ItemDescriptionFragment extends SherlockFragment {
private String descriptionRef;
private String contentEncodedRef;
/** URL that was selected via long-press. */
private String selectedURL;
public static ItemDescriptionFragment newInstance(FeedItem item) {
ItemDescriptionFragment f = new ItemDescriptionFragment();
Bundle args = new Bundle();
@ -69,6 +82,8 @@ public class ItemDescriptionFragment extends SherlockFragment {
webvDescription.getSettings().setUseWideViewPort(false);
webvDescription.getSettings().setLayoutAlgorithm(
LayoutAlgorithm.SINGLE_COLUMN);
webvDescription.setOnLongClickListener(webViewLongClickListener);
registerForContextMenu(webvDescription);
return webvDescription;
}
@ -195,6 +210,81 @@ public class ItemDescriptionFragment extends SherlockFragment {
return String.format(WEBVIEW_STYLE, textColor);
}
private View.OnLongClickListener webViewLongClickListener = new View.OnLongClickListener() {
@Override
public boolean onLongClick(View v) {
WebView.HitTestResult r = webvDescription.getHitTestResult();
if (r != null
&& r.getType() == WebView.HitTestResult.SRC_ANCHOR_TYPE) {
if (AppConfig.DEBUG)
Log.d(TAG,
"Link of webview was long-pressed. Extra: "
+ r.getExtra());
selectedURL = r.getExtra();
webvDescription.showContextMenu();
return true;
}
selectedURL = null;
return false;
}
};
@SuppressLint("NewApi")
@Override
public boolean onContextItemSelected(MenuItem item) {
boolean handled = selectedURL != null;
if (selectedURL != null) {
switch (item.getItemId()) {
case R.id.open_in_browser_item:
Uri uri = Uri.parse(selectedURL);
getActivity()
.startActivity(new Intent(Intent.ACTION_VIEW, uri));
break;
case R.id.share_url_item:
ShareUtils.shareLink(getActivity(), selectedURL);
break;
case R.id.copy_url_item:
if (android.os.Build.VERSION.SDK_INT >= 11) {
ClipData clipData = ClipData.newPlainText(selectedURL,
selectedURL);
android.content.ClipboardManager cm = (android.content.ClipboardManager) getActivity()
.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setPrimaryClip(clipData);
} else {
android.text.ClipboardManager cm = (android.text.ClipboardManager) getActivity()
.getSystemService(Context.CLIPBOARD_SERVICE);
cm.setText(selectedURL);
}
Toast t = Toast.makeText(getActivity(), R.string.copied_url_msg, Toast.LENGTH_SHORT);
t.show();
break;
default:
handled = false;
break;
}
selectedURL = null;
}
return handled;
}
@Override
public void onCreateContextMenu(ContextMenu menu, View v,
ContextMenuInfo menuInfo) {
if (selectedURL != null) {
super.onCreateContextMenu(menu, v, menuInfo);
menu.add(Menu.NONE, R.id.open_in_browser_item, Menu.NONE,
R.string.open_in_browser_label);
menu.add(Menu.NONE, R.id.copy_url_item, Menu.NONE,
R.string.copy_url_label);
menu.add(Menu.NONE, R.id.share_url_item, Menu.NONE,
R.string.share_url_label);
menu.setHeaderTitle(selectedURL);
}
}
private AsyncTask<Void, Void, Void> createLoader() {
return new AsyncTask<Void, Void, Void>() {
@Override

View File

@ -11,7 +11,7 @@ public class ShareUtils {
private ShareUtils() {}
private static void shareLink(Context context, String link) {
public static void shareLink(Context context, String link) {
Intent i = new Intent(Intent.ACTION_SEND);
i.setType("text/plain");
i.putExtra(Intent.EXTRA_SUBJECT, "Sharing URL");