code: @Override
      public List<String> onQueryReceived(final @NonNull QueryToken queryToken) {
          final boolean hasPeople = peopleCheckBox.isChecked();
          final boolean hasCities = citiesCheckBox.isChecked();
  
          final List<String> buckets = new ArrayList<>();
          final SuggestionsResultListener listener = editor;
          final Handler handler = new Handler(Looper.getMainLooper());
  
          // Fetch people if necessary
          if (hasPeople) {
              buckets.add(PERSON_BUCKET);
              handler.postDelayed(new Runnable() {
                  @Override
                  public void run() {
                      List<Person> suggestions = people.getSuggestions(queryToken);
                      lastPersonSuggestions = new SuggestionsResult(queryToken, suggestions);
                      listener.onReceiveSuggestionsResult(lastPersonSuggestions, PERSON_BUCKET);
                  }
              }, PERSON_DELAY);
          }
  
          // Fetch cities if necessary
          if (hasCities) {
              buckets.add(CITY_BUCKET);
              handler.postDelayed(new Runnable() {
                  @Override
                  public void run() {
                      List<City> suggestions = cities.getSuggestions(queryToken);
                      lastCitySuggestions = new SuggestionsResult(queryToken, suggestions);
                      listener.onReceiveSuggestionsResult(lastCitySuggestions, CITY_BUCKET);
                  }
              }, CITY_DELAY);
          }
  
          // Return buckets, one for each source (serves as promise to editor that we will call
          // onReceiveSuggestionsResult at a later time)
          return buckets;
      }
docs: --------------------------------------------------