// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/SuggestionsResult.java
// public class SuggestionsResult {
// 
//     private final QueryToken mQueryToken;
//     private final List<? extends Suggestible> mSuggestions;
// 
//     public SuggestionsResult(@NonNull QueryToken queryToken,
//                              @NonNull List<? extends Suggestible> suggestions) {
//         mQueryToken = queryToken;
//         mSuggestions = suggestions;
//     }
// 
//     /**
//      * Get the {@link QueryToken} used to generate the mention suggestions.
//      *
//      * @return a {@link QueryToken}
//      */
//     @NonNull
//     public QueryToken getQueryToken() {
//         return mQueryToken;
//     }
// 
//     /**
//      * Get the list of mention suggestions corresponding to the {@link QueryToken}.
//      *
//      * @return a List of {@link com.linkedin.android.spyglass.suggestions.interfaces.Suggestible} representing mention suggestions
//      */
//     @NonNull
//     public List<? extends Suggestible> getSuggestions() {
//         return mSuggestions;
//     }
// }
// 
// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/interfaces/Suggestible.java
// public interface Suggestible extends Parcelable {
// 
// 	/**
// 	 * Must be unique (useful for eliminating duplicate suggestions)
// 	 *
// 	 * @return int the suggestible id
// 	 */
// 	int getSuggestibleId();
// 
// 	/**
// 	 * Main text for the given suggestion, as will be shown to the user. Note other data fields can
// 	 * be added (other text, pictures), but this is the only required field, as it is used for the
// 	 * default layout.
// 	 *
// 	 * @return String the user visible suggestion
// 	 */
// 	@NonNull
// 	String getSuggestiblePrimaryText();
// 
// }
// 
// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/interfaces/SuggestionsListBuilder.java
// public interface SuggestionsListBuilder {
// 
//     /**
//      * Create the list of suggestions from the newest {@link SuggestionsResult} received for every bucket. This
//      * allows you to control the exact order of the suggestions.
//      *
//      * @param latestResults      newest {@link SuggestionsResult} for every bucket
//      * @param currentTokenString the most recent token, as typed by the user
//      *
//      * @return a list of {@link Suggestible} representing the suggestions in proper order
//      */
//     @NonNull
//     List<Suggestible> buildSuggestions(final @NonNull Map<String, SuggestionsResult> latestResults,
//                                        final @NonNull String currentTokenString);
// 
//     /**
//      * Build a basic view for the given object.
//      *
//      * @param suggestion  object implementing {@link Suggestible} to build a view for
//      * @param convertView the old view to reuse, if possible
//      * @param parent      parent view
//      * @param context     current {@link android.content.Context} within the adapter
//      * @param inflater    {@link android.view.LayoutInflater} to use
//      * @param resources   {@link android.content.res.Resources} to use
//      *
//      * @return a view for the corresponding {@link Suggestible} object in the adapter
//      */
//     @NonNull
//     View getView(final @NonNull Suggestible suggestion,
//                  @Nullable View convertView,
//                  @Nullable ViewGroup parent,
//                  final @NonNull Context context,
//                  final @NonNull LayoutInflater inflater,
//                  final @NonNull Resources resources);
// 
// }


import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.linkedin.android.spyglass.suggestions.SuggestionsResult;
import com.linkedin.android.spyglass.suggestions.interfaces.Suggestible;
import com.linkedin.android.spyglass.suggestions.interfaces.SuggestionsListBuilder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/*
* Copyright 2015 LinkedIn Corp. All rights reserved.
*
* 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.
*/

package com.linkedin.android.spyglass.suggestions.impl;



/**
 * Basic implementation of the {@link SuggestionsListBuilder} interface.
 */
public class BasicSuggestionsListBuilder implements SuggestionsListBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    @NonNull
    public List<Suggestible> buildSuggestions(final @NonNull Map<String, SuggestionsResult> latestResults,
                                              final @NonNull String currentTokenString) {
        List<Suggestible> results = new ArrayList<>();
        for (Map.Entry<String, SuggestionsResult> entry : latestResults.entrySet()) {
            SuggestionsResult result = entry.getValue();
// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/SuggestionsResult.java
// public class SuggestionsResult {
// 
//     private final QueryToken mQueryToken;
//     private final List<? extends Suggestible> mSuggestions;
// 
//     public SuggestionsResult(@NonNull QueryToken queryToken,
//                              @NonNull List<? extends Suggestible> suggestions) {
//         mQueryToken = queryToken;
//         mSuggestions = suggestions;
//     }
// 
//     /**
//      * Get the {@link QueryToken} used to generate the mention suggestions.
//      *
//      * @return a {@link QueryToken}
//      */
//     @NonNull
//     public QueryToken getQueryToken() {
//         return mQueryToken;
//     }
// 
//     /**
//      * Get the list of mention suggestions corresponding to the {@link QueryToken}.
//      *
//      * @return a List of {@link com.linkedin.android.spyglass.suggestions.interfaces.Suggestible} representing mention suggestions
//      */
//     @NonNull
//     public List<? extends Suggestible> getSuggestions() {
//         return mSuggestions;
//     }
// }
// 
// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/interfaces/Suggestible.java
// public interface Suggestible extends Parcelable {
// 
// 	/**
// 	 * Must be unique (useful for eliminating duplicate suggestions)
// 	 *
// 	 * @return int the suggestible id
// 	 */
// 	int getSuggestibleId();
// 
// 	/**
// 	 * Main text for the given suggestion, as will be shown to the user. Note other data fields can
// 	 * be added (other text, pictures), but this is the only required field, as it is used for the
// 	 * default layout.
// 	 *
// 	 * @return String the user visible suggestion
// 	 */
// 	@NonNull
// 	String getSuggestiblePrimaryText();
// 
// }
// 
// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/interfaces/SuggestionsListBuilder.java
// public interface SuggestionsListBuilder {
// 
//     /**
//      * Create the list of suggestions from the newest {@link SuggestionsResult} received for every bucket. This
//      * allows you to control the exact order of the suggestions.
//      *
//      * @param latestResults      newest {@link SuggestionsResult} for every bucket
//      * @param currentTokenString the most recent token, as typed by the user
//      *
//      * @return a list of {@link Suggestible} representing the suggestions in proper order
//      */
//     @NonNull
//     List<Suggestible> buildSuggestions(final @NonNull Map<String, SuggestionsResult> latestResults,
//                                        final @NonNull String currentTokenString);
// 
//     /**
//      * Build a basic view for the given object.
//      *
//      * @param suggestion  object implementing {@link Suggestible} to build a view for
//      * @param convertView the old view to reuse, if possible
//      * @param parent      parent view
//      * @param context     current {@link android.content.Context} within the adapter
//      * @param inflater    {@link android.view.LayoutInflater} to use
//      * @param resources   {@link android.content.res.Resources} to use
//      *
//      * @return a view for the corresponding {@link Suggestible} object in the adapter
//      */
//     @NonNull
//     View getView(final @NonNull Suggestible suggestion,
//                  @Nullable View convertView,
//                  @Nullable ViewGroup parent,
//                  final @NonNull Context context,
//                  final @NonNull LayoutInflater inflater,
//                  final @NonNull Resources resources);
// 
// }


// Path: spyglass/src/main/java/com/linkedin/android/spyglass/suggestions/impl/BasicSuggestionsListBuilder.java
import android.content.Context;
import android.content.res.Resources;
import android.graphics.Color;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import com.linkedin.android.spyglass.suggestions.SuggestionsResult;
import com.linkedin.android.spyglass.suggestions.interfaces.Suggestible;
import com.linkedin.android.spyglass.suggestions.interfaces.SuggestionsListBuilder;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;

/*
* Copyright 2015 LinkedIn Corp. All rights reserved.
*
* 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.
*/

package com.linkedin.android.spyglass.suggestions.impl;



/**
 * Basic implementation of the {@link SuggestionsListBuilder} interface.
 */
public class BasicSuggestionsListBuilder implements SuggestionsListBuilder {

    /**
     * {@inheritDoc}
     */
    @Override
    @NonNull
    public List<Suggestible> buildSuggestions(final @NonNull Map<String, SuggestionsResult> latestResults,
                                              final @NonNull String currentTokenString) {
        List<Suggestible> results = new ArrayList<>();
        for (Map.Entry<String, SuggestionsResult> entry : latestResults.entrySet()) {
            SuggestionsResult result = entry.getValue();
            if (currentTokenString.equalsIgnoreCase(result.getQueryToken().getTokenString())) {