Skip to content

Commit

Permalink
Merge pull request #128 from jaredrummler/patch-2
Browse files Browse the repository at this point in the history
Use a WeakReference to fix activity leaks. Fixes #125
  • Loading branch information
wmora committed May 25, 2015
2 parents 75ded88 + 23e27b1 commit 4c40731
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions lib/src/main/java/com/nispok/snackbar/SnackbarManager.java
@@ -1,5 +1,7 @@
package com.nispok.snackbar;

import java.lang.ref.WeakReference;

import android.app.Activity;
import android.os.Handler;
import android.os.Looper;
Expand All @@ -15,7 +17,7 @@ public class SnackbarManager {
private static final String TAG = SnackbarManager.class.getSimpleName();
private static final Handler MAIN_THREAD = new Handler(Looper.getMainLooper());

private static Snackbar currentSnackbar;
private static WeakReference<Snackbar> snackbarReference;

private SnackbarManager() {
}
Expand Down Expand Up @@ -49,19 +51,20 @@ public static void show(@NonNull final Snackbar snackbar, @NonNull final Activit
MAIN_THREAD.post(new Runnable() {
@Override
public void run() {
Snackbar currentSnackbar = getCurrentSnackbar();
if (currentSnackbar != null) {
if (currentSnackbar.isShowing() && !currentSnackbar.isDimissing()) {
currentSnackbar.dismissAnimation(false);
currentSnackbar.dismissByReplace();
currentSnackbar = snackbar;
currentSnackbar.showAnimation(false);
currentSnackbar.showByReplace(activity);
snackbarReference = new WeakReference<>(snackbar);
snackbar.showAnimation(false);
snackbar.showByReplace(activity);
return;
}
currentSnackbar.dismiss();
}
currentSnackbar = snackbar;
currentSnackbar.show(activity);
snackbarReference = new WeakReference<>(snackbar);
snackbar.show(activity);
}
});
}
Expand Down Expand Up @@ -90,19 +93,20 @@ public static void show(@NonNull final Snackbar snackbar, @NonNull final ViewGro
MAIN_THREAD.post(new Runnable() {
@Override
public void run() {
Snackbar currentSnackbar = getCurrentSnackbar();
if (currentSnackbar != null) {
if (currentSnackbar.isShowing() && !currentSnackbar.isDimissing()) {
currentSnackbar.dismissAnimation(false);
currentSnackbar.dismissByReplace();
currentSnackbar = snackbar;
currentSnackbar.showAnimation(false);
currentSnackbar.showByReplace(parent, usePhoneLayout);
snackbarReference = new WeakReference<>(snackbar);
snackbar.showAnimation(false);
snackbar.showByReplace(parent, usePhoneLayout);
return;
}
currentSnackbar.dismiss();
}
currentSnackbar = snackbar;
currentSnackbar.show(parent, usePhoneLayout);
snackbarReference = new WeakReference<>(snackbar);
snackbar.show(parent, usePhoneLayout);
}
});
}
Expand All @@ -111,6 +115,7 @@ public void run() {
* Dismisses the {@link com.nispok.snackbar.Snackbar} shown by this manager.
*/
public static void dismiss() {
final Snackbar currentSnackbar = getCurrentSnackbar();
if (currentSnackbar != null) {
MAIN_THREAD.post(new Runnable() {
@Override
Expand All @@ -125,6 +130,9 @@ public void run() {
* Return the current Snackbar
*/
public static Snackbar getCurrentSnackbar() {
return currentSnackbar;
if (snackbarReference != null) {
return snackbarReference.get();
}
return null;
}
}

0 comments on commit 4c40731

Please sign in to comment.