package org.robolectric.shadows;
import android.widget.Filter;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.robolectric.annotation.RealObject;
import org.robolectric.util.ReflectionHelpers;
import org.robolectric.util.ReflectionHelpers.ClassParameter;
@Implements(Filter.class)
public class ShadowFilter {
@RealObject private Filter realObject;
@Implementation
public void filter(CharSequence constraint, Filter.FilterListener listener) {
try {
Class<?> forName = Class.forName("android.widget.Filter$FilterResults");
Object filtering = ReflectionHelpers.callInstanceMethod(realObject, "performFiltering",
ClassParameter.from(CharSequence.class, constraint));
ReflectionHelpers.callInstanceMethod(realObject, "publishResults",
ClassParameter.from(CharSequence.class, constraint),
ClassParameter.from(forName, filtering));
if (listener != null) {
int count = filtering == null ? -1 : (int) ReflectionHelpers.getField(filtering, "count");
listener.onFilterComplete(count);
}
} catch (ClassNotFoundException e) {
throw new RuntimeException("Cannot load android.widget.Filter$FilterResults");
}
}
}