summaryrefslogtreecommitdiff
path: root/src/de/danoeh/antennapod/adapter/SCListAdapter.java
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2012-07-29 15:43:28 +0200
committerdaniel oeh <daniel.oeh@gmail.com>2012-07-29 15:43:28 +0200
commit328172332698301baa556db53748ad26dc3571bb (patch)
treeb8707d348ef556c68170d2b7dbd2878203e5d192 /src/de/danoeh/antennapod/adapter/SCListAdapter.java
parentf564c9a6e2d0add73856970be0876b2325432307 (diff)
downloadAntennaPod-328172332698301baa556db53748ad26dc3571bb.zip
- Bugfix : Player did not always display the current chapter correctly.
- Added support for links in SimpleChapters
Diffstat (limited to 'src/de/danoeh/antennapod/adapter/SCListAdapter.java')
-rw-r--r--src/de/danoeh/antennapod/adapter/SCListAdapter.java123
1 files changed, 118 insertions, 5 deletions
diff --git a/src/de/danoeh/antennapod/adapter/SCListAdapter.java b/src/de/danoeh/antennapod/adapter/SCListAdapter.java
index f0c9c0e93..0764735ab 100644
--- a/src/de/danoeh/antennapod/adapter/SCListAdapter.java
+++ b/src/de/danoeh/antennapod/adapter/SCListAdapter.java
@@ -12,10 +12,19 @@ import de.danoeh.antennapod.storage.DownloadRequester;
import de.danoeh.antennapod.util.Converter;
import android.content.Context;
import android.graphics.Color;
+import android.text.Layout;
+import android.text.Selection;
+import android.text.Spannable;
+import android.text.Spanned;
import android.text.format.DateUtils;
+import android.text.method.LinkMovementMethod;
+import android.text.style.ClickableSpan;
+import android.text.util.Linkify;
import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
+import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
@@ -45,32 +54,136 @@ public class SCListAdapter extends ArrayAdapter<SimpleChapter> {
convertView = inflater.inflate(R.layout.simplechapter_item, null);
holder.title = (TextView) convertView.findViewById(R.id.txtvTitle);
holder.start = (TextView) convertView.findViewById(R.id.txtvStart);
+ holder.link = (TextView) convertView.findViewById(R.id.txtvLink);
convertView.setTag(holder);
} else {
holder = (Holder) convertView.getTag();
}
-
+
holder.title.setText(sc.getTitle());
- holder.start.setText(Converter.getDurationStringLong((int) sc.getStart()));
-
+ holder.start.setText(Converter.getDurationStringLong((int) sc
+ .getStart()));
+ if (sc.getLink() != null) {
+ holder.link.setVisibility(View.VISIBLE);
+ holder.link.setText(sc.getLink());
+ Linkify.addLinks(holder.link, Linkify.WEB_URLS);
+ } else {
+ holder.link.setVisibility(View.GONE);
+ }
+ holder.link.setMovementMethod(null);
+ holder.link.setOnTouchListener(new OnTouchListener() {
+
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ TextView widget = (TextView) v;
+ Object text = widget.getText();
+ if (text instanceof Spanned) {
+ Spannable buffer = (Spannable) text;
+
+ int action = event.getAction();
+
+ if (action == MotionEvent.ACTION_UP
+ || action == MotionEvent.ACTION_DOWN) {
+ int x = (int) event.getX();
+ int y = (int) event.getY();
+
+ x -= widget.getTotalPaddingLeft();
+ y -= widget.getTotalPaddingTop();
+
+ x += widget.getScrollX();
+ y += widget.getScrollY();
+
+ Layout layout = widget.getLayout();
+ int line = layout.getLineForVertical(y);
+ int off = layout.getOffsetForHorizontal(line, x);
+
+ ClickableSpan[] link = buffer.getSpans(off, off,
+ ClickableSpan.class);
+
+ if (link.length != 0) {
+ if (action == MotionEvent.ACTION_UP) {
+ link[0].onClick(widget);
+ } else if (action == MotionEvent.ACTION_DOWN) {
+ Selection.setSelection(buffer,
+ buffer.getSpanStart(link[0]),
+ buffer.getSpanEnd(link[0]));
+ }
+ return true;
+ }
+ }
+
+ }
+
+ return false;
+
+ }
+ });
SimpleChapter current = sc.getItem().getCurrentChapter();
if (current != null) {
if (current == sc) {
- holder.title.setTextColor(convertView.getResources().getColor(R.color.bright_blue));
+ holder.title.setTextColor(convertView.getResources().getColor(
+ R.color.bright_blue));
} else {
holder.title.setTextColor(Color.parseColor("black"));
}
} else {
Log.w(TAG, "Could not find out what the current chapter is.");
}
-
+
return convertView;
}
static class Holder {
TextView title;
TextView start;
+ TextView link;
}
+ private LinkMovementMethod linkMovementMethod = new LinkMovementMethod() {
+
+ @Override
+ public boolean onTouchEvent(TextView widget, Spannable buffer,
+ MotionEvent event) {
+ Object text = widget.getText();
+ if (text instanceof Spanned) {
+ int action = event.getAction();
+
+ if (action == MotionEvent.ACTION_UP
+ || action == MotionEvent.ACTION_DOWN) {
+ int x = (int) event.getX();
+ int y = (int) event.getY();
+
+ x -= widget.getTotalPaddingLeft();
+ y -= widget.getTotalPaddingTop();
+
+ x += widget.getScrollX();
+ y += widget.getScrollY();
+
+ Layout layout = widget.getLayout();
+ int line = layout.getLineForVertical(y);
+ int off = layout.getOffsetForHorizontal(line, x);
+
+ ClickableSpan[] link = buffer.getSpans(off, off,
+ ClickableSpan.class);
+
+ if (link.length != 0) {
+ if (action == MotionEvent.ACTION_UP) {
+ link[0].onClick(widget);
+ } else if (action == MotionEvent.ACTION_DOWN) {
+ Selection.setSelection(buffer,
+ buffer.getSpanStart(link[0]),
+ buffer.getSpanEnd(link[0]));
+ }
+ return true;
+ }
+ }
+
+ }
+
+ return false;
+
+ }
+
+ };
}