Check if icon is already cached
This commit is contained in:
parent
ad4d3e3603
commit
4d5d60b86c
4 changed files with 41 additions and 2 deletions
|
@ -10,6 +10,8 @@ import com.squareup.picasso.Picasso;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
import okhttp3.Cache;
|
import okhttp3.Cache;
|
||||||
import okhttp3.OkHttpClient;
|
import okhttp3.OkHttpClient;
|
||||||
|
@ -28,6 +30,8 @@ public class PicassoUtils {
|
||||||
|
|
||||||
private static boolean initialized;
|
private static boolean initialized;
|
||||||
|
|
||||||
|
private static Map<String, Boolean> cached = new HashMap<>();
|
||||||
|
|
||||||
public static void setupPicasso(@NonNull Context context) {
|
public static void setupPicasso(@NonNull Context context) {
|
||||||
if (!initialized) {
|
if (!initialized) {
|
||||||
File cacheDir = createDefaultCacheDir(context);
|
File cacheDir = createDefaultCacheDir(context);
|
||||||
|
@ -57,6 +61,19 @@ public class PicassoUtils {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
cached.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
public static Boolean isCached(@NonNull String key) {
|
||||||
|
return cached.get(key);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setCached(@NonNull String key, boolean val) {
|
||||||
|
cached.put(key, val);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void clearCachedMap() {
|
||||||
|
cached.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static long getDiskCacheSizeBytes() throws IOException {
|
public static long getDiskCacheSizeBytes() throws IOException {
|
||||||
|
|
|
@ -16,6 +16,7 @@ import com.squareup.picasso.Picasso;
|
||||||
import com.squareup.picasso.RequestCreator;
|
import com.squareup.picasso.RequestCreator;
|
||||||
|
|
||||||
import net.osmand.AndroidUtils;
|
import net.osmand.AndroidUtils;
|
||||||
|
import net.osmand.PicassoUtils;
|
||||||
import net.osmand.plus.IconsCache;
|
import net.osmand.plus.IconsCache;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.OsmandSettings;
|
import net.osmand.plus.OsmandSettings;
|
||||||
|
@ -76,22 +77,29 @@ public class SavedArticlesRvAdapter extends RecyclerView.Adapter<RecyclerView.Vi
|
||||||
} else {
|
} else {
|
||||||
final ItemVH holder = (ItemVH) viewHolder;
|
final ItemVH holder = (ItemVH) viewHolder;
|
||||||
TravelArticle article = (TravelArticle) getItem(position);
|
TravelArticle article = (TravelArticle) getItem(position);
|
||||||
|
final String url = TravelArticle.getImageUrl(article.getImageTitle(), false);
|
||||||
|
Boolean cached = PicassoUtils.isCached(url);
|
||||||
boolean lastItem = position == getItemCount() - 1;
|
boolean lastItem = position == getItemCount() - 1;
|
||||||
|
|
||||||
RequestCreator rc = Picasso.get()
|
RequestCreator rc = Picasso.get()
|
||||||
.load(TravelArticle.getImageUrl(article.getImageTitle(), false));
|
.load(url);
|
||||||
WikivoyageUtils.setupNetworkPolicy(settings, rc);
|
WikivoyageUtils.setupNetworkPolicy(settings, rc);
|
||||||
rc.transform(new CropCircleTransformation())
|
rc.transform(new CropCircleTransformation())
|
||||||
.into(holder.icon, new Callback() {
|
.into(holder.icon, new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess() {
|
public void onSuccess() {
|
||||||
holder.icon.setVisibility(View.VISIBLE);
|
holder.icon.setVisibility(View.VISIBLE);
|
||||||
|
PicassoUtils.setCached(url, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception e) {
|
public void onError(Exception e) {
|
||||||
holder.icon.setVisibility(View.GONE);
|
holder.icon.setVisibility(View.GONE);
|
||||||
|
PicassoUtils.setCached(url, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
holder.icon.setVisibility(cached != null && cached ? View.VISIBLE : View.GONE);
|
||||||
holder.title.setText(article.getTitle());
|
holder.title.setText(article.getTitle());
|
||||||
holder.content.setText(article.getContent());
|
holder.content.setText(article.getContent());
|
||||||
holder.partOf.setText(article.getGeoDescription());
|
holder.partOf.setText(article.getGeoDescription());
|
||||||
|
|
|
@ -143,6 +143,12 @@ public class WikivoyageExploreDialogFragment extends WikivoyageBaseDialogFragmen
|
||||||
return mainView;
|
return mainView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
PicassoUtils.clearCachedMap();
|
||||||
|
}
|
||||||
|
|
||||||
protected void onDataLoaded() {
|
protected void onDataLoaded() {
|
||||||
mainView.findViewById(R.id.progress_bar).setVisibility(View.GONE);
|
mainView.findViewById(R.id.progress_bar).setVisibility(View.GONE);
|
||||||
updateSearchVisibility();
|
updateSearchVisibility();
|
||||||
|
|
|
@ -12,6 +12,7 @@ import com.squareup.picasso.Callback;
|
||||||
import com.squareup.picasso.Picasso;
|
import com.squareup.picasso.Picasso;
|
||||||
import com.squareup.picasso.RequestCreator;
|
import com.squareup.picasso.RequestCreator;
|
||||||
|
|
||||||
|
import net.osmand.PicassoUtils;
|
||||||
import net.osmand.plus.OsmandApplication;
|
import net.osmand.plus.OsmandApplication;
|
||||||
import net.osmand.plus.R;
|
import net.osmand.plus.R;
|
||||||
import net.osmand.plus.widgets.tools.CropCircleTransformation;
|
import net.osmand.plus.widgets.tools.CropCircleTransformation;
|
||||||
|
@ -40,21 +41,28 @@ public class ArticleTravelCard extends BaseTravelCard {
|
||||||
public void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder) {
|
public void bindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder) {
|
||||||
if (viewHolder instanceof ArticleTravelVH) {
|
if (viewHolder instanceof ArticleTravelVH) {
|
||||||
final ArticleTravelVH holder = (ArticleTravelVH) viewHolder;
|
final ArticleTravelVH holder = (ArticleTravelVH) viewHolder;
|
||||||
|
final String url = TravelArticle.getImageUrl(article.getImageTitle(), false);
|
||||||
|
Boolean cached = PicassoUtils.isCached(url);
|
||||||
|
|
||||||
RequestCreator rc = Picasso.get()
|
RequestCreator rc = Picasso.get()
|
||||||
.load(TravelArticle.getImageUrl(article.getImageTitle(), false));
|
.load(url);
|
||||||
WikivoyageUtils.setupNetworkPolicy(app.getSettings(), rc);
|
WikivoyageUtils.setupNetworkPolicy(app.getSettings(), rc);
|
||||||
rc.transform(new CropCircleTransformation())
|
rc.transform(new CropCircleTransformation())
|
||||||
.into(holder.icon, new Callback() {
|
.into(holder.icon, new Callback() {
|
||||||
@Override
|
@Override
|
||||||
public void onSuccess() {
|
public void onSuccess() {
|
||||||
holder.icon.setVisibility(View.VISIBLE);
|
holder.icon.setVisibility(View.VISIBLE);
|
||||||
|
PicassoUtils.setCached(url, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Exception e) {
|
public void onError(Exception e) {
|
||||||
holder.icon.setVisibility(View.GONE);
|
holder.icon.setVisibility(View.GONE);
|
||||||
|
PicassoUtils.setCached(url, false);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
holder.icon.setVisibility(cached != null && cached ? View.VISIBLE : View.GONE);
|
||||||
holder.title.setText(article.getTitle());
|
holder.title.setText(article.getTitle());
|
||||||
holder.content.setText(article.getPartialContent());
|
holder.content.setText(article.getPartialContent());
|
||||||
holder.partOf.setText(article.getGeoDescription());
|
holder.partOf.setText(article.getGeoDescription());
|
||||||
|
|
Loading…
Reference in a new issue