package org.lab99.mdt.drawable;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
/**
* A special {@link Drawable} for passing the touch event to the wrapped Drawable, as a messenger.
*/
public class MessengerDrawable extends ProxyDrawable {
public MessengerDrawable(Drawable original, Drawable receiver) {
this(original, receiver, null);
}
MessengerDrawable(Drawable original, Drawable receiver, ProxyState state) {
super(original, state);
((MessengerState) getConstantState()).mReceiver = receiver;
}
MessengerDrawable(ProxyState state, Resources res) {
super(state, res);
}
@Override
public boolean setState(int[] stateSet) {
MessengerState state = (MessengerState) getConstantState();
if (state.mReceiver != null) {
state.mReceiver.setState(stateSet);
}
return super.setState(stateSet);
}
@Override
protected ProxyState createConstantState(ProxyState orig, Resources res) {
return new MessengerState(orig, res);
}
static class MessengerState extends ProxyState {
Drawable mReceiver;
MessengerState(ProxyState orig, Resources res) {
super(orig, res);
}
@Override
public Drawable newDrawable(Resources res) {
return new MessengerDrawable(this, res);
}
@Override
public Drawable newDrawable() {
return new MessengerDrawable(this, null);
}
@Override
protected void initWithState(ProxyState orig, Resources res) {
super.initWithState(orig, res);
MessengerState state = (MessengerState) orig;
mReceiver = state.mReceiver;
}
@Override
protected void initWithoutState(Resources res) {
super.initWithoutState(res);
}
}
}