summaryrefslogtreecommitdiff
path: root/org.fox.ttrss/src/main/java
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2014-11-09 15:27:54 +0300
committerAndrew Dolgov <[email protected]>2014-11-09 15:27:54 +0300
commit82df9eb2acb3e68371598a5b2936d346f913d0f8 (patch)
tree52fce857972308b8d1d3fa77b8f85b04535684fb /org.fox.ttrss/src/main/java
parent61f6713645f1914baa280460eb480523a357cbf3 (diff)
offline headlines: use view holder
headlines: prevent footer from being clickable
Diffstat (limited to 'org.fox.ttrss/src/main/java')
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java10
-rw-r--r--org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java272
2 files changed, 159 insertions, 123 deletions
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
index 5a6200be..9f714430 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/HeadlinesFragment.java
@@ -695,6 +695,16 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
} else {
holder = (HeadlineViewHolder) v.getTag();
}
+
+ // block footer clicks to make button/selection clicking easier
+ if (holder.headlineFooter != null) {
+ holder.headlineFooter.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //
+ }
+ });
+ }
if (holder.titleView != null) {
holder.titleView.setText(Html.fromHtml(article.title));
diff --git a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
index 2687223e..ab89c8d9 100644
--- a/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
+++ b/org.fox.ttrss/src/main/java/org/fox/ttrss/offline/OfflineHeadlinesFragment.java
@@ -33,6 +33,7 @@ import android.widget.AdapterView.OnItemClickListener;
import android.widget.CheckBox;
import android.widget.ImageView;
import android.widget.ListView;
+import android.widget.ProgressBar;
import android.widget.TextView;
import org.fox.ttrss.CommonActivity;
@@ -91,7 +92,7 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
return selected;
}
-
+
@Override
public boolean onContextItemSelected(MenuItem item) {
AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
@@ -424,8 +425,25 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
getActivity().setProgressBarIndeterminateVisibility(showProgress);
} */
-
- private class ArticleListAdapter extends SimpleCursorAdapter {
+
+ static class HeadlineViewHolder {
+ public TextView titleView;
+ public TextView feedTitleView;
+ public ImageView markedView;
+ public ImageView publishedView;
+ public TextView excerptView;
+ public ImageView flavorImageView;
+ public TextView authorView;
+ public TextView dateView;
+ public CheckBox selectionBoxView;
+ public ImageView menuButtonView;
+ public ViewGroup flavorImageHolder;
+ public ProgressBar flavorImageLoadingBar;
+ public View flavorImageArrow;
+ public View headlineFooter;
+ }
+
+ private class ArticleListAdapter extends SimpleCursorAdapter {
public static final int VIEW_NORMAL = 0;
public static final int VIEW_UNREAD = 1;
public static final int VIEW_SELECTED = 2;
@@ -474,6 +492,9 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
View v = convertView;
Cursor article = (Cursor)getItem(position);
+
+ HeadlineViewHolder holder;
+
final int articleId = article.getInt(0);
int headlineFontSize = Integer.parseInt(m_prefs.getString("headlines_font_size_sp", "13"));
@@ -496,192 +517,197 @@ public class OfflineHeadlinesFragment extends Fragment implements OnItemClickLis
layoutId = R.layout.headlines_row_selected;
break;
}
-
- LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- v = vi.inflate(layoutId, null);
-
- // http://code.google.com/p/android/issues/detail?id=3414
- ((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
- }
- TextView tt = (TextView)v.findViewById(R.id.title);
+ LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ v = vi.inflate(layoutId, null);
+
+ holder = new HeadlineViewHolder();
+ holder.titleView = (TextView)v.findViewById(R.id.title);
+
+ holder.feedTitleView = (TextView)v.findViewById(R.id.feed_title);
+ holder.markedView = (ImageView)v.findViewById(R.id.marked);
+ holder.publishedView = (ImageView)v.findViewById(R.id.published);
+ holder.excerptView = (TextView)v.findViewById(R.id.excerpt);
+ holder.flavorImageView = (ImageView) v.findViewById(R.id.flavor_image);
+ holder.authorView = (TextView)v.findViewById(R.id.author);
+ holder.dateView = (TextView) v.findViewById(R.id.date);
+ holder.selectionBoxView = (CheckBox) v.findViewById(R.id.selected);
+ holder.menuButtonView = (ImageView) v.findViewById(R.id.article_menu_button);
+ holder.flavorImageHolder = (ViewGroup) v.findViewById(R.id.flavorImageHolder);
+ holder.flavorImageLoadingBar = (ProgressBar) v.findViewById(R.id.flavorImageLoadingBar);
+ holder.flavorImageArrow = v.findViewById(R.id.flavorImageArrow);
+ holder.headlineFooter = v.findViewById(R.id.headline_footer);
+
+ v.setTag(holder);
+
+ // http://code.google.com/p/android/issues/detail?id=3414
+ ((ViewGroup)v).setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
+ } else {
+ holder = (HeadlineViewHolder) v.getTag();
+ }
- if (tt != null) {
+ // block footer clicks to make button/selection clicking easier
+ if (holder.headlineFooter != null) {
+ holder.headlineFooter.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ //
+ }
+ });
+ }
+
+ if (holder.titleView != null) {
- tt.setText(Html.fromHtml(article.getString(article.getColumnIndex("title"))));
+ holder.titleView.setText(Html.fromHtml(article.getString(article.getColumnIndex("title"))));
if (m_prefs.getBoolean("enable_condensed_fonts", false)) {
Typeface tf = TypefaceCache.get(m_activity, "sans-serif-condensed", article.getInt(article.getColumnIndex("unread")) == 1 ? Typeface.BOLD : Typeface.NORMAL);
- if (tf != null && !tf.equals(tt.getTypeface())) {
- tt.setTypeface(tf);
+ if (tf != null && !tf.equals(holder.titleView.getTypeface())) {
+ holder.titleView.setTypeface(tf);
}
-
- tt.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, headlineFontSize + 5));
+
+ holder.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, headlineFontSize + 5));
} else {
- tt.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, headlineFontSize + 3));
+ holder.titleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, Math.min(21, headlineFontSize + 3));
}
int scoreIndex = article.getColumnIndex("score");
if (scoreIndex >= 0)
- adjustTitleTextView(article.getInt(scoreIndex), tt, position);
+ adjustTitleTextView(article.getInt(scoreIndex), holder.titleView, position);
}
- TextView ft = (TextView)v.findViewById(R.id.feed_title);
-
int feedTitleIndex = article.getColumnIndex("feed_title");
- if (ft != null && feedTitleIndex != -1 && m_feedIsCat) {
+ if (holder.feedTitleView != null && feedTitleIndex != -1 && m_feedIsCat) {
String feedTitle = article.getString(feedTitleIndex);
if (feedTitle.length() > 20)
feedTitle = feedTitle.substring(0, 20) + "...";
if (feedTitle.length() > 0) {
- ft.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
- ft.setText(feedTitle);
+ holder.feedTitleView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
+ holder.feedTitleView.setText(feedTitle);
} else {
- ft.setVisibility(View.GONE);
+ holder.feedTitleView.setVisibility(View.GONE);
}
- } else if (ft != null) {
- ft.setVisibility(View.GONE);
+ } else if (holder.feedTitleView != null) {
+ holder.feedTitleView.setVisibility(View.GONE);
}
- ImageView marked = (ImageView)v.findViewById(R.id.marked);
-
- if (marked != null) {
- marked.setImageResource(article.getInt(article.getColumnIndex("marked")) == 1 ? R.drawable.ic_star_full : R.drawable.ic_star_empty);
+ if (holder.markedView != null) {
+ holder.markedView.setImageResource(article.getInt(article.getColumnIndex("marked")) == 1 ? R.drawable.ic_star_full : R.drawable.ic_star_empty);
- marked.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET modified = 1, marked = NOT marked " +
- "WHERE " + BaseColumns._ID + " = ?");
-
- stmtUpdate.bindLong(1, articleId);
- stmtUpdate.execute();
- stmtUpdate.close();
-
- refresh();
- }
- });
+ holder.markedView.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET modified = 1, marked = NOT marked " +
+ "WHERE " + BaseColumns._ID + " = ?");
+
+ stmtUpdate.bindLong(1, articleId);
+ stmtUpdate.execute();
+ stmtUpdate.close();
+
+ refresh();
+ }
+ });
}
- ImageView published = (ImageView)v.findViewById(R.id.published);
-
- if (published != null) {
- published.setImageResource(article.getInt(article.getColumnIndex("published")) == 1 ? R.drawable.ic_published : R.drawable.ic_unpublished);
+ if (holder.publishedView != null) {
+ holder.publishedView.setImageResource(article.getInt(article.getColumnIndex("published")) == 1 ? R.drawable.ic_published : R.drawable.ic_unpublished);
- published.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View v) {
- SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET modified = 1, published = NOT published " +
- "WHERE " + BaseColumns._ID + " = ?");
-
- stmtUpdate.bindLong(1, articleId);
- stmtUpdate.execute();
- stmtUpdate.close();
-
- refresh();
- }
- });
+ holder.publishedView.setOnClickListener(new OnClickListener() {
+
+ @Override
+ public void onClick(View v) {
+ SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET modified = 1, published = NOT published " +
+ "WHERE " + BaseColumns._ID + " = ?");
+
+ stmtUpdate.bindLong(1, articleId);
+ stmtUpdate.execute();
+ stmtUpdate.close();
+
+ refresh();
+ }
+ });
}
-
- TextView te = (TextView)v.findViewById(R.id.excerpt);
- if (te != null) {
+ if (holder.excerptView != null) {
if (!m_prefs.getBoolean("headlines_show_content", true)) {
- te.setVisibility(View.GONE);
+ holder.excerptView.setVisibility(View.GONE);
} else {
String excerpt = Jsoup.parse(article.getString(article.getColumnIndex("content"))).text();
if (excerpt.length() > CommonActivity.EXCERPT_MAX_SIZE)
excerpt = excerpt.substring(0, CommonActivity.EXCERPT_MAX_SIZE) + "...";
- te.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineFontSize);
- te.setText(excerpt);
+ holder.excerptView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineFontSize);
+ holder.excerptView.setText(excerpt);
}
}
- TextView ta = (TextView)v.findViewById(R.id.author);
-
- if (ta != null) {
+ if (holder.authorView != null) {
int authorIndex = article.getColumnIndex("author");
if (authorIndex >= 0) {
String author = article.getString(authorIndex);
- ta.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
+ holder.authorView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
if (author != null && author.length() > 0)
- ta.setText(getString(R.string.author_formatted, author));
+ holder.authorView.setText(getString(R.string.author_formatted, author));
else
- ta.setText("");
+ holder.authorView.setText("");
}
}
-
- /* ImageView separator = (ImageView)v.findViewById(R.id.headlines_separator);
- if (separator != null && m_offlineServices.isSmallScreen()) {
- separator.setVisibility(View.GONE);
- } */
-
- TextView dv = (TextView) v.findViewById(R.id.date);
-
- if (dv != null) {
- dv.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
+ if (holder.dateView != null) {
+ holder.dateView.setTextSize(TypedValue.COMPLEX_UNIT_SP, headlineSmallFontSize);
Date d = new Date((long)article.getInt(article.getColumnIndex("updated")) * 1000);
DateFormat df = new SimpleDateFormat("MMM dd, HH:mm");
df.setTimeZone(TimeZone.getDefault());
- dv.setText(df.format(d));
+ holder.dateView.setText(df.format(d));
}
-
- CheckBox cb = (CheckBox) v.findViewById(R.id.selected);
- if (cb != null) {
- cb.setChecked(article.getInt(article.getColumnIndex("selected")) == 1);
- cb.setOnClickListener(new OnClickListener() {
-
- @Override
- public void onClick(View view) {
- CheckBox cb = (CheckBox)view;
-
- SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET selected = ? " +
- "WHERE " + BaseColumns._ID + " = ?");
-
- stmtUpdate.bindLong(1, cb.isChecked() ? 1 : 0);
- stmtUpdate.bindLong(2, articleId);
- stmtUpdate.execute();
- stmtUpdate.close();
-
- refresh();
-
- m_activity.invalidateOptionsMenu();
-
- }
- });
- }
+ if (holder.selectionBoxView != null) {
+ holder.selectionBoxView.setChecked(article.getInt(article.getColumnIndex("selected")) == 1);
+ holder.selectionBoxView.setOnClickListener(new OnClickListener() {
- View flavorImageHolder = v.findViewById(R.id.flavorImageHolder);
+ @Override
+ public void onClick(View view) {
+ CheckBox cb = (CheckBox) view;
- if (flavorImageHolder != null) {
- flavorImageHolder.setVisibility(View.GONE);
- }
+ SQLiteStatement stmtUpdate = m_activity.getWritableDb().compileStatement("UPDATE articles SET selected = ? " +
+ "WHERE " + BaseColumns._ID + " = ?");
+
+ stmtUpdate.bindLong(1, cb.isChecked() ? 1 : 0);
+ stmtUpdate.bindLong(2, articleId);
+ stmtUpdate.execute();
+ stmtUpdate.close();
+
+ refresh();
- ImageView ib = (ImageView) v.findViewById(R.id.article_menu_button);
+ m_activity.invalidateOptionsMenu();
+
+ }
+ });
+ }
+
+ if (holder.flavorImageHolder != null) {
+ holder.flavorImageHolder.setVisibility(View.GONE);
+ }
- if (ib != null) {
+ if (holder.menuButtonView != null) {
//if (m_activity.isDarkTheme())
// ib.setImageResource(R.drawable.ic_mailbox_collapsed_holo_dark);
- ib.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- getActivity().openContextMenu(v);
- }
- });
+ holder.menuButtonView.setOnClickListener(new OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ getActivity().openContextMenu(v);
+ }
+ });
}
return v;