From f78ad58b79893b3ba236ef47fba40bbc2b588843 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Thu, 3 Jan 2013 15:09:30 +0400 Subject: rework attachment UI to use a dialog, update published actionbar icon --- src/org/fox/ttrss/ArticleFragment.java | 64 +-------------------- src/org/fox/ttrss/FeedsActivity.java | 14 +++++ src/org/fox/ttrss/HeadlinesActivity.java | 16 +++++- src/org/fox/ttrss/OnlineActivity.java | 57 ++++++++++++++++++ .../fox/ttrss/offline/.OfflineActivity.java.swp | Bin 0 -> 16384 bytes .../fox/ttrss/offline/OfflineArticleFragment.java | 2 - 6 files changed, 87 insertions(+), 66 deletions(-) create mode 100644 src/org/fox/ttrss/offline/.OfflineActivity.java.swp (limited to 'src') diff --git a/src/org/fox/ttrss/ArticleFragment.java b/src/org/fox/ttrss/ArticleFragment.java index 0cb36b4d..b2b14f00 100644 --- a/src/org/fox/ttrss/ArticleFragment.java +++ b/src/org/fox/ttrss/ArticleFragment.java @@ -256,22 +256,12 @@ public class ArticleFragment extends Fragment implements GestureDetector.OnDoubl "" + "" + articleContent; - final Spinner spinner = (Spinner) view.findViewById(R.id.attachments); - if (m_article.attachments != null && m_article.attachments.size() != 0) { - 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); - String flatContent = articleContent.replaceAll("[\r\n]", ""); boolean hasImages = flatContent.matches(".*?+].*?"); for (Attachment a : m_article.attachments) { - if (a.content_type != null && a.content_url != null) { - + if (a.content_type != null && a.content_url != null) { try { if (a.content_type.indexOf("image") != -1 && (!hasImages || m_article.always_display_attachments)) { @@ -287,60 +277,8 @@ public class ArticleFragment extends Fragment implements GestureDetector.OnDoubl } catch (Exception e) { e.printStackTrace(); } - - spinnerArray.add(a); } } - - 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_activity.copyToClipboard(attachment.content_url); - } - } - }); - - Button attachmentsShare = (Button) view.findViewById(R.id.attachment_share); - - if (!m_activity.isPortrait()) { - attachmentsShare.setOnClickListener(new OnClickListener() { - - @Override - public void onClick(View v) { - Attachment attachment = (Attachment) spinner.getSelectedItem(); - - if (attachment != null) { - m_activity.shareText(attachment.content_url); - } - } - }); - } else { - attachmentsShare.setVisibility(View.GONE); - } - - } else { - view.findViewById(R.id.attachments_holder).setVisibility(View.GONE); } content += ""; diff --git a/src/org/fox/ttrss/FeedsActivity.java b/src/org/fox/ttrss/FeedsActivity.java index 58f8eda6..bb423285 100644 --- a/src/org/fox/ttrss/FeedsActivity.java +++ b/src/org/fox/ttrss/FeedsActivity.java @@ -159,6 +159,20 @@ public class FeedsActivity extends OnlineActivity implements HeadlinesEventListe m_menu.findItem(R.id.update_headlines).setVisible(false); } + if (af != null) { + if (af.getSelectedArticle() != null && af.getSelectedArticle().attachments != null && af.getSelectedArticle().attachments.size() > 0) { + if (!isCompatMode()) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + m_menu.findItem(R.id.toggle_attachments).setVisible(true); + } else { + if (!isCompatMode()) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + } + m_menu.findItem(R.id.toggle_attachments).setVisible(false); + } + } + MenuItem item = m_menu.findItem(R.id.show_feeds); if (getUnreadOnly()) { diff --git a/src/org/fox/ttrss/HeadlinesActivity.java b/src/org/fox/ttrss/HeadlinesActivity.java index 81c4ca8c..68f226e7 100644 --- a/src/org/fox/ttrss/HeadlinesActivity.java +++ b/src/org/fox/ttrss/HeadlinesActivity.java @@ -149,10 +149,24 @@ public class HeadlinesActivity extends OnlineActivity implements HeadlinesEventL m_menu.setGroupVisible(R.id.menu_group_headlines, !isPortrait()&& hf != null && hf.getSelectedArticles().size() == 0); m_menu.setGroupVisible(R.id.menu_group_headlines_selection, !isPortrait() && hf != null && hf.getSelectedArticles().size() != 0); - Fragment af = getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); + ArticlePager af = (ArticlePager) getSupportFragmentManager().findFragmentByTag(FRAG_ARTICLE); m_menu.setGroupVisible(R.id.menu_group_article, af != null); + if (af != null) { + if (af.getSelectedArticle() != null && af.getSelectedArticle().attachments != null && af.getSelectedArticle().attachments.size() > 0) { + if (!isCompatMode()) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM); + } + m_menu.findItem(R.id.toggle_attachments).setVisible(true); + } else { + if (!isCompatMode()) { + m_menu.findItem(R.id.toggle_attachments).setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER); + } + m_menu.findItem(R.id.toggle_attachments).setVisible(false); + } + } + m_menu.findItem(R.id.search).setVisible(false); } } diff --git a/src/org/fox/ttrss/OnlineActivity.java b/src/org/fox/ttrss/OnlineActivity.java index 004fab6e..99b13a31 100644 --- a/src/org/fox/ttrss/OnlineActivity.java +++ b/src/org/fox/ttrss/OnlineActivity.java @@ -1,6 +1,8 @@ package org.fox.ttrss; import java.lang.reflect.Type; +import java.net.MalformedURLException; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -9,6 +11,7 @@ import org.fox.ttrss.offline.OfflineDownloadService; import org.fox.ttrss.offline.OfflineUploadService; import org.fox.ttrss.types.Article; import org.fox.ttrss.types.ArticleList; +import org.fox.ttrss.types.Attachment; import org.fox.ttrss.types.Feed; import org.fox.ttrss.types.Label; @@ -534,6 +537,60 @@ public class OnlineActivity extends CommonActivity { case android.R.id.home: finish(); return true; + case R.id.toggle_attachments: + if (true) { + Article article = ap.getSelectedArticle(); + + if (article != null && article.attachments != null && article.attachments.size() > 0) { + CharSequence[] items = new CharSequence[article.attachments.size()]; + final CharSequence[] itemUrls = new CharSequence[article.attachments.size()]; + + for (int i = 0; i < article.attachments.size(); i++) { + items[i] = article.attachments.get(i).title != null ? article.attachments.get(i).content_url : + article.attachments.get(i).content_url; + + itemUrls[i] = article.attachments.get(i).content_url; + } + + Dialog dialog = new Dialog(OnlineActivity.this); + AlertDialog.Builder builder = new AlertDialog.Builder(OnlineActivity.this) + .setTitle(R.string.attachments_prompt) + .setSingleChoiceItems(items, 0, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + // + } + }).setNeutralButton(R.string.attachment_copy, new OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition(); + + copyToClipboard((String)itemUrls[selectedPosition]); + } + }).setPositiveButton(R.string.attachment_view, new OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int id) { + int selectedPosition = ((AlertDialog)dialog).getListView().getCheckedItemPosition(); + + Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse((String)itemUrls[selectedPosition])); + startActivity(browserIntent); + + dialog.cancel(); + } + }).setNegativeButton(R.string.dialog_cancel, new OnClickListener() { + + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + + dialog = builder.create(); + dialog.show(); + } + } + return true; case R.id.donate: if (true) { openUnlockUrl(); diff --git a/src/org/fox/ttrss/offline/.OfflineActivity.java.swp b/src/org/fox/ttrss/offline/.OfflineActivity.java.swp new file mode 100644 index 00000000..56c1f525 Binary files /dev/null and b/src/org/fox/ttrss/offline/.OfflineActivity.java.swp differ diff --git a/src/org/fox/ttrss/offline/OfflineArticleFragment.java b/src/org/fox/ttrss/offline/OfflineArticleFragment.java index 0cf5cc4a..61ea7d39 100644 --- a/src/org/fox/ttrss/offline/OfflineArticleFragment.java +++ b/src/org/fox/ttrss/offline/OfflineArticleFragment.java @@ -227,8 +227,6 @@ public class OfflineArticleFragment extends Fragment implements GestureDetector. articleContent = doc.toString(); } - view.findViewById(R.id.attachments_holder).setVisibility(View.GONE); - String align = m_prefs.getBoolean("justify_article_text", true) ? "text-align : justified" : ""; switch (Integer.parseInt(m_prefs.getString("font_size", "0"))) { -- cgit v1.2.3-54-g00ecf