// Path: app/src/main/java/com/sjcqs/rawlauncher/items/search/InputSearchManager.java
// public class InputSearchManager extends Manager {
// 
//     private static final String TAG = InputSearchManager.class.getName();
// 
//     public InputSearchManager(Context context, LoaderManager loaderManager) {
//         super(context, loaderManager);
//         loaderManager.restartLoader(ManagerUtils.ID_SEARCH_LOADER, null, this);
//     }
// 
//     @Override
//     public Collection<Suggestion> getSuggestions(String input) {
//         String searchLabel = ""; // if the user enter <label>: value or it's from history
//         for (String label : InputSearchLoader.getLabel()) {
//             if (input.matches(label + ": .*")) {
//                 searchLabel = label;
//             }
//             input = input.replace(label + ":", "");
//         }
// 
//         List<Suggestion> suggestions = new ArrayList<>();
//         for (Item item : items) {
//             InputSearch search = (InputSearch) item;
//             if (search.getDiscriminator().equals(searchLabel)) {
//                 search.setInput(input);
//                 Suggestion suggestion = new Suggestion(search, 0);
//                 suggestions.add(suggestion);
//             } else {
//                 double rate = StringUtil.canBeSuggested(search.getDiscriminator(), input);
//                 if (rate <= StringUtil.MAX_RATE) {
//                     if (rate != 0) {
//                         rate += InputSearchLoader.BASE_PRIORITY;
//                     }
//                 } else {
//                     rate = search.getPriority();
//                 }
//                 search.setInput(input);
//                 Suggestion suggestion = new Suggestion(search, rate);
//                 suggestions.add(suggestion);
//             }
//         }
//         return suggestions;
//     }
// 
//     @Override
//     public Loader<List<Item>> onCreateLoader(int id, Bundle args) {
//         return new InputSearchLoader(context);
//     }
// 
//     @Override
//     public void reload() {
//         loaderManager.restartLoader(ManagerUtils.ID_SEARCH_LOADER, null, this);
//     }
// }
// 
// Path: app/src/main/java/com/sjcqs/rawlauncher/utils/interfaces/Manager.java
// public abstract class Manager implements LoaderManager.LoaderCallbacks<List<Item>>{
//     private static final String TAG = Manager.class.getName();
// 
//     protected final Context context;
//     protected final LoaderManager loaderManager;
//     protected List<Item> items;
// 
//     protected Manager(Context context, LoaderManager loaderManager) {
//         this.context = context;
//         this.loaderManager = loaderManager;
//     }
// 
//     @Override
//     public void onLoadFinished(Loader<List<Item>> loader, List<Item> data) {
//         items = data;
//     }
// 
//     @Override
//     public void onLoaderReset(Loader<List<Item>> loader) {
//         items = null;
//     }
// 
//     public boolean isLoaded(){
//         return items != null;
//     }
// 
//     public Intent getIntent(String str) {
//         str = StringUtil.normalize(str);
//         for (Item item : items) {
//             if (str.equalsIgnoreCase(item.getLabel())){
//                 return item.getIntent();
//             }
//         }
//         return null;
//     }
// 
// 
//     public Collection<Suggestion> getSuggestions(String input){
//         List<Suggestion> suggestions = new ArrayList<>();
//         if (items != null) {
//             for (Item app : items) {
//                 String str2 = app.getLabel();
//                 double rate = StringUtil.canBeSuggested(input, str2);
// 
//                 if (rate < StringUtil.MAX_RATE) {
//                     suggestions.add(new Suggestion(app, rate));
//                 }
//             }
//         }
//         return suggestions;
//     }
// 
//     public void reload() {
// 
//     }
// 
//     public List<Item> getItems() {
//         return items;
//     }
// 
//     public List<Item> getItems(int fromIndex, int toIndex) {
//         return items.subList(fromIndex, toIndex);
//     }
// 
//     public Item getItem(int index) {
//         return items.get(index);
//     }
// }


import android.content.Context;
import android.os.Handler;
import android.support.v4.content.AsyncTaskLoader;
import com.sjcqs.rawlauncher.items.search.InputSearchManager;
import com.sjcqs.rawlauncher.utils.interfaces.Manager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

        if (items != null) {
            items.addAll(searchManager.getSuggestions(input));
        }

        if (isStarted()) {
            super.deliverResult(items);
        }

        if (data != null) {
            cleanUp(data);
        }


    }

    @Override
    protected void onStartLoading() {
        if (items != null) {
            deliverResult(items);
        }

        if (takeContentChanged() || items == null) {
            final Handler handler = new Handler();
            Runnable loadTask = new Runnable() { // wait for manager to load data
                @Override
                public void run() {
                    if (!searchManager.isLoaded()) {
                        handler.postDelayed(this, 100);
                    }
// Path: app/src/main/java/com/sjcqs/rawlauncher/items/search/InputSearchManager.java
// public class InputSearchManager extends Manager {
// 
//     private static final String TAG = InputSearchManager.class.getName();
// 
//     public InputSearchManager(Context context, LoaderManager loaderManager) {
//         super(context, loaderManager);
//         loaderManager.restartLoader(ManagerUtils.ID_SEARCH_LOADER, null, this);
//     }
// 
//     @Override
//     public Collection<Suggestion> getSuggestions(String input) {
//         String searchLabel = ""; // if the user enter <label>: value or it's from history
//         for (String label : InputSearchLoader.getLabel()) {
//             if (input.matches(label + ": .*")) {
//                 searchLabel = label;
//             }
//             input = input.replace(label + ":", "");
//         }
// 
//         List<Suggestion> suggestions = new ArrayList<>();
//         for (Item item : items) {
//             InputSearch search = (InputSearch) item;
//             if (search.getDiscriminator().equals(searchLabel)) {
//                 search.setInput(input);
//                 Suggestion suggestion = new Suggestion(search, 0);
//                 suggestions.add(suggestion);
//             } else {
//                 double rate = StringUtil.canBeSuggested(search.getDiscriminator(), input);
//                 if (rate <= StringUtil.MAX_RATE) {
//                     if (rate != 0) {
//                         rate += InputSearchLoader.BASE_PRIORITY;
//                     }
//                 } else {
//                     rate = search.getPriority();
//                 }
//                 search.setInput(input);
//                 Suggestion suggestion = new Suggestion(search, rate);
//                 suggestions.add(suggestion);
//             }
//         }
//         return suggestions;
//     }
// 
//     @Override
//     public Loader<List<Item>> onCreateLoader(int id, Bundle args) {
//         return new InputSearchLoader(context);
//     }
// 
//     @Override
//     public void reload() {
//         loaderManager.restartLoader(ManagerUtils.ID_SEARCH_LOADER, null, this);
//     }
// }
// 
// Path: app/src/main/java/com/sjcqs/rawlauncher/utils/interfaces/Manager.java
// public abstract class Manager implements LoaderManager.LoaderCallbacks<List<Item>>{
//     private static final String TAG = Manager.class.getName();
// 
//     protected final Context context;
//     protected final LoaderManager loaderManager;
//     protected List<Item> items;
// 
//     protected Manager(Context context, LoaderManager loaderManager) {
//         this.context = context;
//         this.loaderManager = loaderManager;
//     }
// 
//     @Override
//     public void onLoadFinished(Loader<List<Item>> loader, List<Item> data) {
//         items = data;
//     }
// 
//     @Override
//     public void onLoaderReset(Loader<List<Item>> loader) {
//         items = null;
//     }
// 
//     public boolean isLoaded(){
//         return items != null;
//     }
// 
//     public Intent getIntent(String str) {
//         str = StringUtil.normalize(str);
//         for (Item item : items) {
//             if (str.equalsIgnoreCase(item.getLabel())){
//                 return item.getIntent();
//             }
//         }
//         return null;
//     }
// 
// 
//     public Collection<Suggestion> getSuggestions(String input){
//         List<Suggestion> suggestions = new ArrayList<>();
//         if (items != null) {
//             for (Item app : items) {
//                 String str2 = app.getLabel();
//                 double rate = StringUtil.canBeSuggested(input, str2);
// 
//                 if (rate < StringUtil.MAX_RATE) {
//                     suggestions.add(new Suggestion(app, rate));
//                 }
//             }
//         }
//         return suggestions;
//     }
// 
//     public void reload() {
// 
//     }
// 
//     public List<Item> getItems() {
//         return items;
//     }
// 
//     public List<Item> getItems(int fromIndex, int toIndex) {
//         return items.subList(fromIndex, toIndex);
//     }
// 
//     public Item getItem(int index) {
//         return items.get(index);
//     }
// }


// Path: app/src/main/java/com/sjcqs/rawlauncher/items/suggestions/SuggestionLoader.java
import android.content.Context;
import android.os.Handler;
import android.support.v4.content.AsyncTaskLoader;
import com.sjcqs.rawlauncher.items.search.InputSearchManager;
import com.sjcqs.rawlauncher.utils.interfaces.Manager;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;


        if (items != null) {
            items.addAll(searchManager.getSuggestions(input));
        }

        if (isStarted()) {
            super.deliverResult(items);
        }

        if (data != null) {
            cleanUp(data);
        }


    }

    @Override
    protected void onStartLoading() {
        if (items != null) {
            deliverResult(items);
        }

        if (takeContentChanged() || items == null) {
            final Handler handler = new Handler();
            Runnable loadTask = new Runnable() { // wait for manager to load data
                @Override
                public void run() {
                    if (!searchManager.isLoaded()) {
                        handler.postDelayed(this, 100);
                    }
                    for (Manager manager : managers) {