UIL: use time-limited disk cache instead of flushing it on startup

flavor images: show X more label if more than one image
 fix crash on loadmore row
This commit is contained in:
Andrew Dolgov 2014-10-29 08:59:33 +03:00
parent 903e4250f9
commit 1bfc708bc0
7 changed files with 80 additions and 24 deletions

View File

@ -54,6 +54,7 @@ import org.fox.ttrss.util.TypefaceCache;
import org.jsoup.Jsoup; import org.jsoup.Jsoup;
import org.jsoup.nodes.Document; import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element; import org.jsoup.nodes.Element;
import org.jsoup.select.Elements;
import java.text.DateFormat; import java.text.DateFormat;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
@ -669,6 +670,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
public ImageView menuButtonView; public ImageView menuButtonView;
public ViewGroup flavorImageHolder; public ViewGroup flavorImageHolder;
public ProgressBar flavorImageLoadingBar; public ProgressBar flavorImageLoadingBar;
public TextView flavorImageMore;
} }
private class ArticleListAdapter extends ArrayAdapter<Article> { private class ArticleListAdapter extends ArrayAdapter<Article> {
@ -762,6 +764,7 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
holder.menuButtonView = (ImageView) v.findViewById(R.id.article_menu_button); holder.menuButtonView = (ImageView) v.findViewById(R.id.article_menu_button);
holder.flavorImageHolder = (ViewGroup) v.findViewById(R.id.flavorImageHolder); holder.flavorImageHolder = (ViewGroup) v.findViewById(R.id.flavorImageHolder);
holder.flavorImageLoadingBar = (ProgressBar) v.findViewById(R.id.flavorImageLoadingBar); holder.flavorImageLoadingBar = (ProgressBar) v.findViewById(R.id.flavorImageLoadingBar);
holder.flavorImageMore = (TextView) v.findViewById(R.id.flavorImageMore);
v.setTag(holder); v.setTag(holder);
@ -857,13 +860,20 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
} }
} }
if (holder.flavorImageMore != null) {
holder.flavorImageMore.setVisibility(View.GONE);
}
if (holder.flavorImageView != null && m_prefs.getBoolean("headlines_show_flavor_image", true)) { if (holder.flavorImageView != null && m_prefs.getBoolean("headlines_show_flavor_image", true)) {
Document doc = Jsoup.parse(articleContent); Document doc = Jsoup.parse(articleContent);
boolean loadableImageFound = false; boolean loadableImageFound = false;
if (doc != null) { if (doc != null) {
Element img = doc.select("img").first(); //Element img = doc.select("img").first();
Elements imgs = doc.select("img");
Element img = imgs.first();
if (img != null) { if (img != null) {
String imgSrc = img.attr("src"); String imgSrc = img.attr("src");
@ -886,6 +896,11 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
flavorImageHolder.setVisibility(View.VISIBLE); flavorImageHolder.setVisibility(View.VISIBLE);
if (imgs.size() > 1 && holder.flavorImageMore != null) {
holder.flavorImageMore.setVisibility(View.VISIBLE);
holder.flavorImageMore.setText(getString(R.string.flavor_image_more, imgs.size()-1));
}
final boolean weNeedAnimation = MemoryCacheUtils.findCachedBitmapsForImageUri(imgSrc, ImageLoader.getInstance().getMemoryCache()).size() == 0; final boolean weNeedAnimation = MemoryCacheUtils.findCachedBitmapsForImageUri(imgSrc, ImageLoader.getInstance().getMemoryCache()).size() == 0;
loadableImageFound = true; loadableImageFound = true;
@ -939,10 +954,10 @@ public class HeadlinesFragment extends Fragment implements OnItemClickListener,
} }
} }
if (!loadableImageFound) { if (!loadableImageFound && holder.flavorImageHolder != null) {
holder.flavorImageHolder.setVisibility(View.GONE); holder.flavorImageHolder.setVisibility(View.GONE);
} }
} else { } else if (holder.flavorImageHolder != null) {
holder.flavorImageHolder.setVisibility(View.GONE); holder.flavorImageHolder.setVisibility(View.GONE);
} }

View File

@ -1,22 +1,5 @@
package org.fox.ttrss; package org.fox.ttrss;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
import org.fox.ttrss.offline.OfflineActivity;
import org.fox.ttrss.offline.OfflineDownloadService;
import org.fox.ttrss.offline.OfflineUploadService;
import org.fox.ttrss.share.SubscribeActivity;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
import org.fox.ttrss.types.Label;
import org.fox.ttrss.widget.SmallWidgetProvider;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import android.annotation.TargetApi; import android.annotation.TargetApi;
import android.app.AlertDialog; import android.app.AlertDialog;
import android.app.Dialog; import android.app.Dialog;
@ -51,8 +34,28 @@ import com.google.gson.Gson;
import com.google.gson.JsonElement; import com.google.gson.JsonElement;
import com.google.gson.JsonObject; import com.google.gson.JsonObject;
import com.google.gson.reflect.TypeToken; import com.google.gson.reflect.TypeToken;
import com.nostra13.universalimageloader.cache.disc.impl.LimitedAgeDiscCache;
import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;
import com.nostra13.universalimageloader.utils.StorageUtils;
import org.fox.ttrss.offline.OfflineActivity;
import org.fox.ttrss.offline.OfflineDownloadService;
import org.fox.ttrss.offline.OfflineUploadService;
import org.fox.ttrss.share.SubscribeActivity;
import org.fox.ttrss.types.Article;
import org.fox.ttrss.types.ArticleList;
import org.fox.ttrss.types.Feed;
import org.fox.ttrss.types.Label;
import org.fox.ttrss.widget.SmallWidgetProvider;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;
import java.io.File;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.List;
public class OnlineActivity extends CommonActivity { public class OnlineActivity extends CommonActivity {
private final String TAG = this.getClass().getSimpleName(); private final String TAG = this.getClass().getSimpleName();
@ -175,10 +178,16 @@ public class OnlineActivity extends CommonActivity {
setStatusBarTint(); setStatusBarTint();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext()).build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.diskCache(
new LimitedAgeDiscCache(new File(StorageUtils.getCacheDirectory(getApplicationContext()), "article-images"),
2*24*60*60)) // 2 days
.build();
ImageLoader.getInstance().init(config); ImageLoader.getInstance().init(config);
ImageLoader.getInstance().clearDiskCache(); //ImageLoader.getInstance().clearDiskCache();
//m_pullToRefreshAttacher = PullToRefreshAttacher.get(this); //m_pullToRefreshAttacher = PullToRefreshAttacher.get(this);
if (isOffline) { if (isOffline) {

View File

@ -93,6 +93,14 @@
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:cropToPadding="true" android:cropToPadding="true"
android:visibility="visible" /> android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(5 more)"
android:alpha="0.5"
android:layout_gravity="bottom|right"
android:id="@+id/flavorImageMore" />
</FrameLayout> </FrameLayout>
</TableRow> </TableRow>

View File

@ -93,6 +93,14 @@
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:cropToPadding="true" android:cropToPadding="true"
android:visibility="visible" /> android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(5 more)"
android:alpha="0.5"
android:layout_gravity="bottom|right"
android:id="@+id/flavorImageMore" />
</FrameLayout> </FrameLayout>
</TableRow> </TableRow>

View File

@ -94,6 +94,14 @@
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:cropToPadding="true" android:cropToPadding="true"
android:visibility="visible" /> android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(5 more)"
android:alpha="0.5"
android:layout_gravity="bottom|right"
android:id="@+id/flavorImageMore" />
</FrameLayout> </FrameLayout>
</TableRow> </TableRow>

View File

@ -94,6 +94,14 @@
android:scaleType="fitCenter" android:scaleType="fitCenter"
android:cropToPadding="true" android:cropToPadding="true"
android:visibility="visible" /> android:visibility="visible" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="(5 more)"
android:alpha="0.5"
android:layout_gravity="bottom|right"
android:id="@+id/flavorImageMore" />
</FrameLayout> </FrameLayout>
</TableRow> </TableRow>

View File

@ -232,5 +232,5 @@
<string name="pref_headlines_full_content_long">Show full article content in headlines. Resource intensive, can cause UI lag on some devices.</string> <string name="pref_headlines_full_content_long">Show full article content in headlines. Resource intensive, can cause UI lag on some devices.</string>
<string name="pref_headlines_full_content">Show full content</string> <string name="pref_headlines_full_content">Show full content</string>
<string name="prefs_headlines_show_flavor_image">Show article image</string> <string name="prefs_headlines_show_flavor_image">Show article image</string>
<string name="flavor_image_more">(%1$d more)</string>
</resources> </resources>