From 8caa0fcd8261f6c3d885cd880df3aac156f9d120 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Mon, 12 Mar 2012 14:57:57 +0300 Subject: implement new attachment UI with buttons to copy URL/view separate attachment --- src/org/fox/ttrss/ArticleFragment.java | 57 ++++++++++++++++++++++--- src/org/fox/ttrss/Attachment.java | 17 ++++++++ src/org/fox/ttrss/HeadlinesFragment.java | 56 ++++++++++++++++++++---- src/org/fox/ttrss/MainActivity.java | 27 +++++++----- src/org/fox/ttrss/OfflineArticleFragment.java | 2 + src/org/fox/ttrss/OfflineHeadlinesFragment.java | 7 +-- src/org/fox/ttrss/OnlineServices.java | 2 + 7 files changed, 139 insertions(+), 29 deletions(-) (limited to 'src') diff --git a/src/org/fox/ttrss/ArticleFragment.java b/src/org/fox/ttrss/ArticleFragment.java index 3d803df8..6890376f 100644 --- a/src/org/fox/ttrss/ArticleFragment.java +++ b/src/org/fox/ttrss/ArticleFragment.java @@ -4,6 +4,7 @@ import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.text.SimpleDateFormat; +import java.util.ArrayList; import java.util.Date; import org.jsoup.Jsoup; @@ -12,7 +13,10 @@ import org.jsoup.nodes.Element; import org.jsoup.select.Elements; import android.app.Activity; +import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; +import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; @@ -23,11 +27,17 @@ import android.util.TypedValue; import android.view.ContextMenu; import android.view.LayoutInflater; import android.view.View; +import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ContextMenu.ContextMenuInfo; import android.webkit.WebSettings; import android.webkit.WebView; +import android.widget.AdapterView; +import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.Spinner; import android.widget.TextView; +import android.widget.Toast; import android.widget.AdapterView.AdapterContextMenuInfo; public class ArticleFragment extends Fragment { @@ -178,22 +188,27 @@ public class ArticleFragment extends Fragment { "" + "" + articleContent; + final Spinner spinner = (Spinner) view.findViewById(R.id.attachments); + if (m_article.attachments != null && m_article.attachments.size() != 0) { - String attachments = "
" + getString(R.string.attachments) + " "; + ArrayList spinnerArray = new ArrayList(); + + ArrayAdapter spinnerArrayAdapter = new ArrayAdapter( + getActivity(), android.R.layout.simple_spinner_item, spinnerArray); + + spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); for (Attachment a : m_article.attachments) { if (a.content_type != null && a.content_url != null) { try { URL url = new URL(a.content_url.trim()); - - String atitle = (a.title != null && a.title.length() > 0) ? a.title : new File(url.getFile()).getName(); if (a.content_type.indexOf("image") != -1) { content += "
"; } - attachments += "" + atitle + ", "; + spinnerArray.add(a); } catch (MalformedURLException e) { // @@ -203,8 +218,38 @@ public class ArticleFragment extends Fragment { } } - content += attachments.replaceAll(", $", ""); - content += "
"; + + spinner.setAdapter(spinnerArrayAdapter); + + Button attachmentsView = (Button) view.findViewById(R.id.attachment_view); + + attachmentsView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Attachment attachment = (Attachment) spinner.getSelectedItem(); + + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(attachment.content_url)); + startActivity(browserIntent); + } + }); + + Button attachmentsCopy = (Button) view.findViewById(R.id.attachment_copy); + + attachmentsCopy.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Attachment attachment = (Attachment) spinner.getSelectedItem(); + + if (attachment != null) { + m_onlineServices.copyToClipboard(attachment.content_url); + } + } + }); + + } else { + view.findViewById(R.id.attachments_holder).setVisibility(View.GONE); } content += ""; diff --git a/src/org/fox/ttrss/Attachment.java b/src/org/fox/ttrss/Attachment.java index 38cc16d8..37c4a08a 100644 --- a/src/org/fox/ttrss/Attachment.java +++ b/src/org/fox/ttrss/Attachment.java @@ -1,5 +1,9 @@ package org.fox.ttrss; +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; + import android.os.Parcel; import android.os.Parcelable; @@ -30,6 +34,19 @@ public class Attachment implements Parcelable { out.writeInt(post_id); } + public String toString() { + if (title != null && title.length() > 0) { + return title; + } else { + try { + URL url = new URL(content_url.trim()); + return new File(url.getFile()).getName(); + } catch (MalformedURLException e) { + return content_url; + } + } + } + public void readFromParcel(Parcel in) { id = in.readInt(); content_url = in.readString(); diff --git a/src/org/fox/ttrss/HeadlinesFragment.java b/src/org/fox/ttrss/HeadlinesFragment.java index e0927790..c1c69774 100644 --- a/src/org/fox/ttrss/HeadlinesFragment.java +++ b/src/org/fox/ttrss/HeadlinesFragment.java @@ -16,9 +16,11 @@ import org.jsoup.Jsoup; import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Bundle; import android.preference.PreferenceManager; import android.support.v4.app.Fragment; @@ -38,9 +40,11 @@ import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; import android.widget.ArrayAdapter; +import android.widget.Button; import android.widget.CheckBox; import android.widget.ImageView; import android.widget.ListView; +import android.widget.Spinner; import android.widget.TextView; import com.google.gson.Gson; @@ -444,34 +448,67 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, if (m_combinedMode) { content.setMovementMethod(LinkMovementMethod.getInstance()); + final Spinner spinner = (Spinner) v.findViewById(R.id.attachments); + + ArrayList spinnerArray = new ArrayList(); + + ArrayAdapter spinnerArrayAdapter = new ArrayAdapter( + getActivity(), android.R.layout.simple_spinner_item, spinnerArray); + + spinnerArrayAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); + if (article.attachments != null && article.attachments.size() != 0) { - String attachments = "
" + getString(R.string.attachments) + " "; - for (Attachment a : article.attachments) { if (a.content_type != null && a.content_url != null) { try { URL url = new URL(a.content_url.trim()); - String atitle = (a.title != null && a.title.length() > 0) ? a.title : new File(url.getFile()).getName(); - if (a.content_type.indexOf("image") != -1) { articleContent += "
"; } - attachments += "" + atitle + ", "; + spinnerArray.add(a); } catch (MalformedURLException e) { // } catch (Exception e) { e.printStackTrace(); - } - + } } } - articleContent += attachments.replaceAll(", $", ""); - articleContent += "
"; + spinner.setAdapter(spinnerArrayAdapter); + + Button attachmentsView = (Button) v.findViewById(R.id.attachment_view); + + attachmentsView.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Attachment attachment = (Attachment) spinner.getSelectedItem(); + + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(attachment.content_url)); + startActivity(browserIntent); + } + }); + + Button attachmentsCopy = (Button) v.findViewById(R.id.attachment_copy); + + attachmentsCopy.setOnClickListener(new OnClickListener() { + + @Override + public void onClick(View v) { + Attachment attachment = (Attachment) spinner.getSelectedItem(); + + if (attachment != null) { + m_onlineServices.copyToClipboard(attachment.content_url); + } + } + }); + + } else { + v.findViewById(R.id.attachments_holder).setVisibility(View.GONE); } //content.setText(Html.fromHtml(article.content, new URLImageGetter(content, getActivity()), null)); @@ -491,6 +528,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener, } else { content.setVisibility(View.GONE); + v.findViewById(R.id.attachments_holder).setVisibility(View.GONE); } } diff --git a/src/org/fox/ttrss/MainActivity.java b/src/org/fox/ttrss/MainActivity.java index 70976e65..a86204c2 100644 --- a/src/org/fox/ttrss/MainActivity.java +++ b/src/org/fox/ttrss/MainActivity.java @@ -1829,17 +1829,7 @@ public class MainActivity extends FragmentActivity implements OnlineServices { } if (article != null) { - if (android.os.Build.VERSION.SDK_INT < 11) { - @SuppressWarnings("deprecation") - android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - clipboard.setText(article.link); - } else { - android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); - clipboard.setText(article.link); - } - - Toast toast = Toast.makeText(MainActivity.this, R.string.text_copied_to_clipboard, Toast.LENGTH_SHORT); - toast.show(); + copyToClipboard(article.link); } } return true; @@ -2088,4 +2078,19 @@ public class MainActivity extends FragmentActivity implements OnlineServices { m_selectedArticle = article; updateHeadlines(); } + + @Override + public void copyToClipboard(String str) { + if (android.os.Build.VERSION.SDK_INT < 11) { + @SuppressWarnings("deprecation") + android.text.ClipboardManager clipboard = (android.text.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + clipboard.setText(str); + } else { + android.content.ClipboardManager clipboard = (android.content.ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + clipboard.setText(str); + } + + Toast toast = Toast.makeText(MainActivity.this, R.string.text_copied_to_clipboard, Toast.LENGTH_SHORT); + toast.show(); + } } \ No newline at end of file diff --git a/src/org/fox/ttrss/OfflineArticleFragment.java b/src/org/fox/ttrss/OfflineArticleFragment.java index c37c2a45..04ad3384 100644 --- a/src/org/fox/ttrss/OfflineArticleFragment.java +++ b/src/org/fox/ttrss/OfflineArticleFragment.java @@ -165,6 +165,8 @@ public class OfflineArticleFragment extends Fragment { articleContent = doc.toString(); } + view.findViewById(R.id.attachments_holder).setVisibility(View.GONE); + switch (Integer.parseInt(m_prefs.getString("font_size", "0"))) { case 0: cssOverride += "body { text-align : justify; font-size : 14px; } "; diff --git a/src/org/fox/ttrss/OfflineHeadlinesFragment.java b/src/org/fox/ttrss/OfflineHeadlinesFragment.java index 2dda7197..98083de1 100644 --- a/src/org/fox/ttrss/OfflineHeadlinesFragment.java +++ b/src/org/fox/ttrss/OfflineHeadlinesFragment.java @@ -291,7 +291,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis tt.setText(Html.fromHtml(article.getString(article.getColumnIndex("title")))); } } - + ImageView marked = (ImageView)v.findViewById(R.id.marked); if (marked != null) { @@ -370,10 +370,11 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis } } else { content.setVisibility(View.GONE); - } - + } } + v.findViewById(R.id.attachments_holder).setVisibility(View.GONE); + TextView dv = (TextView) v.findViewById(R.id.date); if (dv != null) { diff --git a/src/org/fox/ttrss/OnlineServices.java b/src/org/fox/ttrss/OnlineServices.java index 9d16ec33..a4a10f08 100644 --- a/src/org/fox/ttrss/OnlineServices.java +++ b/src/org/fox/ttrss/OnlineServices.java @@ -24,5 +24,7 @@ public interface OnlineServices { public boolean getUnreadOnly(); public int getApiLevel(); public void setSelectedArticle(Article article); + + public void copyToClipboard(String str); } -- cgit v1.2.3-54-g00ecf