Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82d4a3ab authored by Romain Guy's avatar Romain Guy Committed by Android (Google) Code Review
Browse files

Merge "Make Drawable.mCallback a WeakReference."

parents 72b5ed42 f2a47782
Loading
Loading
Loading
Loading
+9 −6
Original line number Diff line number Diff line
@@ -159,20 +159,23 @@ public class AnimatedRotateDrawable extends Drawable implements Drawable.Callbac
    }

    public void invalidateDrawable(Drawable who) {
        if (mCallback != null) {
            mCallback.invalidateDrawable(this);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.invalidateDrawable(this);
        }
    }

    public void scheduleDrawable(Drawable who, Runnable what, long when) {
        if (mCallback != null) {
            mCallback.scheduleDrawable(this, what, when);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.scheduleDrawable(this, what, when);
        }
    }

    public void unscheduleDrawable(Drawable who, Runnable what) {
        if (mCallback != null) {
            mCallback.unscheduleDrawable(this, what);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.unscheduleDrawable(this, what);
        }
    }

+9 −6
Original line number Diff line number Diff line
@@ -111,20 +111,23 @@ public class ClipDrawable extends Drawable implements Drawable.Callback {
    // overrides from Drawable.Callback

    public void invalidateDrawable(Drawable who) {
        if (mCallback != null) {
            mCallback.invalidateDrawable(this);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.invalidateDrawable(this);
        }
    }

    public void scheduleDrawable(Drawable who, Runnable what, long when) {
        if (mCallback != null) {
            mCallback.scheduleDrawable(this, what, when);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.scheduleDrawable(this, what, when);
        }
    }

    public void unscheduleDrawable(Drawable who, Runnable what) {
        if (mCallback != null) {
            mCallback.unscheduleDrawable(this, what);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.unscheduleDrawable(this, what);
        }
    }

+34 −14
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.util.Xml;

import java.io.IOException;
import java.io.InputStream;
import java.lang.ref.WeakReference;
import java.util.Arrays;

/**
@@ -112,7 +113,7 @@ public abstract class Drawable {
    private int mLevel = 0;
    private int mChangingConfigurations = 0;
    private Rect mBounds = ZERO_BOUNDS_RECT;  // lazily becomes a new Rect()
    /*package*/ Callback mCallback = null;
    private WeakReference<Callback> mCallback = null;
    private boolean mVisible = true;

    /**
@@ -291,9 +292,26 @@ public abstract class Drawable {
     * that want to support animated drawables.
     *
     * @param cb The client's Callback implementation.
     * 
     * @see #getCallback() 
     */
    public final void setCallback(Callback cb) {
        mCallback = cb;
        mCallback = new WeakReference<Callback>(cb);
    }

    /**
     * Return the current {@link Callback} implementation attached to this
     * Drawable.
     * 
     * @return A {@link Callback} instance or null if no callback was set.
     * 
     * @see #setCallback(android.graphics.drawable.Drawable.Callback) 
     */
    public Callback getCallback() {
        if (mCallback != null) {
            return mCallback.get();
        }
        return null;
    }
    
    /**
@@ -302,11 +320,13 @@ public abstract class Drawable {
     * Drawable.
     *
     * @see Callback#invalidateDrawable
     * @see #getCallback() 
     * @see #setCallback(android.graphics.drawable.Drawable.Callback) 
     */
    public void invalidateSelf()
    {
        if (mCallback != null) {
            mCallback.invalidateDrawable(this);
    public void invalidateSelf() {
        final Callback callback = getCallback();
        if (callback != null) {
            callback.invalidateDrawable(this);
        }
    }

@@ -320,10 +340,10 @@ public abstract class Drawable {
     *
     * @see Callback#scheduleDrawable
     */
    public void scheduleSelf(Runnable what, long when)
    {
        if (mCallback != null) {
            mCallback.scheduleDrawable(this, what, when);
    public void scheduleSelf(Runnable what, long when) {
        final Callback callback = getCallback();
        if (callback != null) {
            callback.scheduleDrawable(this, what, when);
        }
    }

@@ -336,10 +356,10 @@ public abstract class Drawable {
     *
     * @see Callback#unscheduleDrawable
     */
    public void unscheduleSelf(Runnable what)
    {
        if (mCallback != null) {
            mCallback.unscheduleDrawable(this, what);
    public void unscheduleSelf(Runnable what) {
        final Callback callback = getCallback();
        if (callback != null) {
            callback.unscheduleDrawable(this, what);
        }
    }

+6 −6
Original line number Diff line number Diff line
@@ -236,20 +236,20 @@ public class DrawableContainer extends Drawable implements Drawable.Callback {
    }

    public void invalidateDrawable(Drawable who) {
        if (who == mCurrDrawable && mCallback != null) {
            mCallback.invalidateDrawable(this);
        if (who == mCurrDrawable && getCallback() != null) {
            getCallback().invalidateDrawable(this);
        }
    }

    public void scheduleDrawable(Drawable who, Runnable what, long when) {
        if (who == mCurrDrawable && mCallback != null) {
            mCallback.scheduleDrawable(this, what, when);
        if (who == mCurrDrawable && getCallback() != null) {
            getCallback().scheduleDrawable(this, what, when);
        }
    }

    public void unscheduleDrawable(Drawable who, Runnable what) {
        if (who == mCurrDrawable && mCallback != null) {
            mCallback.unscheduleDrawable(this, what);
        if (who == mCurrDrawable && getCallback() != null) {
            getCallback().unscheduleDrawable(this, what);
        }
    }

+9 −6
Original line number Diff line number Diff line
@@ -131,20 +131,23 @@ public class InsetDrawable extends Drawable implements Drawable.Callback
    // overrides from Drawable.Callback

    public void invalidateDrawable(Drawable who) {
        if (mCallback != null) {
            mCallback.invalidateDrawable(this);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.invalidateDrawable(this);
        }
    }

    public void scheduleDrawable(Drawable who, Runnable what, long when) {
        if (mCallback != null) {
            mCallback.scheduleDrawable(this, what, when);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.scheduleDrawable(this, what, when);
        }
    }

    public void unscheduleDrawable(Drawable who, Runnable what) {
        if (mCallback != null) {
            mCallback.unscheduleDrawable(this, what);
        final Callback callback = getCallback();
        if (callback != null) {
            callback.unscheduleDrawable(this, what);
        }
    }

Loading