package fr.neamar.kiss.adapter;
import android.content.Context;
import android.os.Handler;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.PopupMenu;
import java.util.ArrayList;
import fr.neamar.kiss.KissApplication;
import fr.neamar.kiss.result.AppResult;
import fr.neamar.kiss.result.ContactsResult;
import fr.neamar.kiss.result.PhoneResult;
import fr.neamar.kiss.result.Result;
import fr.neamar.kiss.result.SearchResult;
import fr.neamar.kiss.result.SettingsResult;
import fr.neamar.kiss.result.ShortcutsResult;
import fr.neamar.kiss.result.TogglesResult;
import fr.neamar.kiss.searcher.QueryInterface;
public class RecordAdapter extends ArrayAdapter<Result> {
private final QueryInterface parent;
/**
* Array list containing all the results currently displayed
*/
private ArrayList<Result> results = new ArrayList<>();
public RecordAdapter(Context context, QueryInterface parent, int textViewResourceId,
ArrayList<Result> results) {
super(context, textViewResourceId, results);
this.parent = parent;
this.results = results;
}
public int getViewTypeCount() {
return 7;
}
public int getItemViewType(int position) {
if (results.get(position) instanceof AppResult)
return 0;
else if (results.get(position) instanceof SearchResult)
return 1;
else if (results.get(position) instanceof ContactsResult)
return 2;
else if (results.get(position) instanceof TogglesResult)
return 3;
else if (results.get(position) instanceof SettingsResult)
return 4;
else if (results.get(position) instanceof PhoneResult)
return 5;
else if (results.get(position) instanceof ShortcutsResult)
return 6;
else
return -1;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
return results.get(position).display(getContext(), results.size() - position, convertView);
}
public void onLongClick(final int pos, View v) {
PopupMenu menu = results.get(pos).getPopupMenu(getContext(), this, v);
//check if menu contains elements and if yes show it
if (menu.getMenu().size() > 0) {
menu.show();
}
}
public void onClick(final int position, View v) {
final Result result;
try {
result = results.get(position);
result.launch(getContext(), v);
} catch (ArrayIndexOutOfBoundsException ignored) {
return;
}
// Record the launch after some period,
// * to ensure the animation runs smoothly
// * to avoid a flickering -- launchOccurred will refresh the list
// Thus TOUCH_DELAY * 3
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
parent.launchOccurred(results.size() - position, result);
}
}, KissApplication.TOUCH_DELAY * 3);
}
public void removeResult(Result result) {
results.remove(result);
result.deleteRecord(getContext());
notifyDataSetChanged();
}
}