/*
 * Copyright (C) 2010 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package com.android.quicksearchbox;

/**
 * Interface for choosing which suggestions to include in a promoted list.
 */
public interface SuggestionFilter {
    /**
     * Determines if a suggestion should be added to the promoted suggestion list.
     *
     * @param s The suggestion in question
     * @return true to include it in the results
     */
    boolean accept(Suggestion s);
}
