From ad5be385e8aff32fdeb13a66700de420994dea0d Mon Sep 17 00:00:00 2001 From: Galen Abell Date: Sat, 10 Nov 2018 15:14:17 -0500 Subject: [PATCH] Added local Picasso instance instead of singleton - MessagesActivity now constructs a new Picasso instance each onCreate and passes it to ListMessageAdapter --- .../gotify/messages/ListMessageAdapter.java | 8 +++++--- .../gotify/messages/MessagesActivity.java | 19 +++++++++++-------- 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java b/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java index 87c2934..5d1eef3 100644 --- a/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java +++ b/app/src/main/java/com/github/gotify/messages/ListMessageAdapter.java @@ -21,12 +21,15 @@ import java.util.List; public class ListMessageAdapter extends BaseAdapter { private Context content; + private Picasso picasso; private List items; private Delete delete; - ListMessageAdapter(Context context, List items, Delete delete) { + ListMessageAdapter( + Context context, Picasso picasso, List items, Delete delete) { super(); this.content = context; + this.picasso = picasso; this.items = items; this.delete = delete; } @@ -62,8 +65,7 @@ public class ListMessageAdapter extends BaseAdapter { final MessageWithImage message = items.get(position); holder.message.setText(message.message.getMessage()); holder.title.setText(message.message.getTitle()); - Picasso.get() - .load(message.image) + picasso.load(message.image) .error(R.drawable.ic_alarm) .placeholder(R.drawable.ic_placeholder) .into(holder.image); diff --git a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java index eefa5bd..293bf66 100644 --- a/app/src/main/java/com/github/gotify/messages/MessagesActivity.java +++ b/app/src/main/java/com/github/gotify/messages/MessagesActivity.java @@ -98,6 +98,8 @@ public class MessagesActivity extends AppCompatActivity private boolean isLoadMore = false; private Integer selectAppIdOnDrawerClose = null; + private Picasso picasso; + // we need to keep the target references otherwise they get gc'ed before they can be called. @SuppressWarnings("MismatchedQueryAndUpdateOfCollection") private final List targetReferences = new ArrayList<>(); @@ -110,11 +112,7 @@ public class MessagesActivity extends AppCompatActivity Log.i("Entering " + getClass().getSimpleName()); settings = new Settings(this); - try { - Picasso.setSingletonInstance(makePicasso()); - } catch (IllegalStateException e) { - // ignore, singleton has already been set - } + picasso = makePicasso(); client = ClientFactory.clientToken(settings.url(), settings.sslSettings(), settings.token()); @@ -126,7 +124,7 @@ public class MessagesActivity extends AppCompatActivity messages = new MessageFacade(new MessageApi(client), appsHolder); messagesView.setOnScrollListener(this); - messagesView.setAdapter(new ListMessageAdapter(this, emptyList(), this::delete)); + messagesView.setAdapter(new ListMessageAdapter(this, picasso, emptyList(), this::delete)); swipeRefreshLayout.setOnRefreshListener(this::onRefresh); drawer.addDrawerListener( @@ -168,8 +166,7 @@ public class MessagesActivity extends AppCompatActivity item.setCheckable(true); Target t = Utils.toDrawable(getResources(), item::setIcon); targetReferences.add(t); - Picasso.get() - .load(app.getImage()) + picasso.load(app.getImage()) .error(R.drawable.ic_alarm) .placeholder(R.drawable.ic_placeholder) .resize(100, 100) @@ -283,6 +280,12 @@ public class MessagesActivity extends AppCompatActivity super.onPause(); } + @Override + protected void onDestroy() { + super.onDestroy(); + picasso.shutdown(); + } + @Override public void onScrollStateChanged(AbsListView view, int scrollState) {}