Show appicon in notifications
This commit is contained in:
@@ -0,0 +1,94 @@
|
||||
package com.github.gotify.picasso;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.BitmapFactory;
|
||||
import com.github.gotify.R;
|
||||
import com.github.gotify.Settings;
|
||||
import com.github.gotify.Utils;
|
||||
import com.github.gotify.api.Callback;
|
||||
import com.github.gotify.api.CertUtils;
|
||||
import com.github.gotify.api.ClientFactory;
|
||||
import com.github.gotify.client.api.ApplicationApi;
|
||||
import com.github.gotify.log.Log;
|
||||
import com.github.gotify.messages.provider.MessageImageCombiner;
|
||||
import com.squareup.picasso.OkHttp3Downloader;
|
||||
import com.squareup.picasso.Picasso;
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import okhttp3.Cache;
|
||||
import okhttp3.OkHttpClient;
|
||||
|
||||
public class PicassoHandler {
|
||||
|
||||
private static final int PICASSO_CACHE_SIZE = 50 * 1024 * 1024; // 50 MB
|
||||
private static final String PICASSO_CACHE_SUBFOLDER = "picasso-cache";
|
||||
|
||||
private Context context;
|
||||
private Settings settings;
|
||||
|
||||
private Cache picassoCache;
|
||||
|
||||
private Picasso picasso;
|
||||
private Map<Integer, String> appIdToAppImage = new ConcurrentHashMap<>();
|
||||
|
||||
public PicassoHandler(Context context, Settings settings) {
|
||||
this.context = context;
|
||||
this.settings = settings;
|
||||
|
||||
picassoCache =
|
||||
new Cache(
|
||||
new File(context.getCacheDir(), PICASSO_CACHE_SUBFOLDER),
|
||||
PICASSO_CACHE_SIZE);
|
||||
picasso = makePicasso();
|
||||
}
|
||||
|
||||
private Picasso makePicasso() {
|
||||
OkHttpClient.Builder builder = new OkHttpClient.Builder();
|
||||
builder.cache(picassoCache);
|
||||
CertUtils.applySslSettings(builder, settings.sslSettings());
|
||||
OkHttp3Downloader downloader = new OkHttp3Downloader(builder.build());
|
||||
return new Picasso.Builder(context).downloader(downloader).build();
|
||||
}
|
||||
|
||||
public Bitmap getIcon(Integer appId) {
|
||||
if (appId == -1) {
|
||||
return BitmapFactory.decodeResource(context.getResources(), R.drawable.gotify);
|
||||
}
|
||||
|
||||
try {
|
||||
return picasso.load(
|
||||
Utils.resolveAbsoluteUrl(
|
||||
settings.url() + "/", appIdToAppImage.get(appId)))
|
||||
.get();
|
||||
} catch (IOException e) {
|
||||
Log.e("Could not load image for notification", e);
|
||||
}
|
||||
return BitmapFactory.decodeResource(context.getResources(), R.drawable.gotify);
|
||||
}
|
||||
|
||||
public void updateAppIds() {
|
||||
ClientFactory.clientToken(settings.url(), settings.sslSettings(), settings.token())
|
||||
.createService(ApplicationApi.class)
|
||||
.getApps()
|
||||
.enqueue(
|
||||
Callback.call(
|
||||
(apps) -> {
|
||||
appIdToAppImage.clear();
|
||||
appIdToAppImage.putAll(MessageImageCombiner.appIdToImage(apps));
|
||||
},
|
||||
(t) -> {
|
||||
appIdToAppImage.clear();
|
||||
}));
|
||||
}
|
||||
|
||||
public Picasso get() {
|
||||
return picasso;
|
||||
}
|
||||
|
||||
public void evict() throws IOException {
|
||||
picassoCache.evictAll();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user