package fr.neamar.kiss.result;
import android.app.SearchManager;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.net.Uri;
import android.os.Build;
import android.view.MenuItem;
import android.view.View;
import android.widget.ImageView;
import android.widget.PopupMenu;
import android.widget.TextView;
import fr.neamar.kiss.R;
import fr.neamar.kiss.adapter.RecordAdapter;
import fr.neamar.kiss.pojo.SearchPojo;
public class SearchResult extends Result {
private final SearchPojo searchPojo;
public SearchResult(SearchPojo searchPojo) {
super();
this.pojo = this.searchPojo = searchPojo;
}
@Override
public View display(Context context, int position, View v) {
if (v == null)
v = inflateFromId(context, R.layout.item_search);
TextView appName = (TextView) v.findViewById(R.id.item_search_text);
ImageView image = (ImageView) v.findViewById(R.id.item_search_icon);
if (searchPojo.direct) {
String text = context.getString(R.string.ui_item_visit);
appName.setText(enrichText(String.format(text, "{" + this.pojo.name + "}"), context));
image.setImageResource(R.drawable.ic_public);
} else {
String text = context.getString(R.string.ui_item_search);
appName.setText(enrichText(String.format(text, this.pojo.name, "{" + searchPojo.query + "}"), context));
image.setImageResource(R.drawable.search);
}
image.setColorFilter(getThemeFillColor(context), PorterDuff.Mode.SRC_IN);
return v;
}
@Override
public void doLaunch(Context context, View v) {
boolean exceptionThrown = false;
Intent search = new Intent(Intent.ACTION_WEB_SEARCH);
if(android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
search.setSourceBounds(v.getClipBounds());
}
search.putExtra(SearchManager.QUERY, searchPojo.query);
if (pojo.name.equals("Google")) {
// In the latest Google Now version, ACTION_WEB_SEARCH is broken when used with FLAG_ACTIVITY_NEW_TASK.
// Adding FLAG_ACTIVITY_CLEAR_TASK seems to fix the problem.
search.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
search.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
try {
context.startActivity(search);
} catch (ActivityNotFoundException e) {
// This exception gets thrown if Google Search has been deactivated:
exceptionThrown = true;
}
}
if (exceptionThrown || !pojo.name.equals("Google")) {
Uri uri = Uri.parse(searchPojo.url + searchPojo.query);
search = new Intent(Intent.ACTION_VIEW, uri);
search.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(search);
}
}
@Override
protected Boolean popupMenuClickHandler(Context context, RecordAdapter parent, MenuItem item) {
switch (item.getItemId()) {
case R.id.item_share:
Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, searchPojo.query);
shareIntent.setType("text/plain");
shareIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(shareIntent);
return true;
}
return super.popupMenuClickHandler(context, parent, item);
}
@Override
protected PopupMenu buildPopupMenu(Context context, final RecordAdapter parent, View parentView) {
return inflatePopupMenu(R.menu.menu_item_search, context, parentView);
}
}