package org.theotech.ceaselessandroid.activity; import android.app.ListActivity; import android.app.SearchManager; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.support.v7.widget.Toolbar; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.ImageView; import android.widget.TextView; import com.commonsware.cwac.merge.MergeAdapter; import com.google.common.base.Joiner; import com.joanzapata.iconify.widget.IconTextView; import com.makeramen.roundedimageview.RoundedImageView; import com.squareup.picasso.Picasso; import org.theotech.ceaselessandroid.R; import org.theotech.ceaselessandroid.note.NoteManager; import org.theotech.ceaselessandroid.note.NoteManagerImpl; import org.theotech.ceaselessandroid.person.PersonManager; import org.theotech.ceaselessandroid.person.PersonManagerImpl; import org.theotech.ceaselessandroid.realm.pojo.NotePOJO; import org.theotech.ceaselessandroid.realm.pojo.PersonPOJO; import org.theotech.ceaselessandroid.util.CommonUtils; import org.theotech.ceaselessandroid.util.Constants; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.List; import butterknife.Bind; import butterknife.ButterKnife; /** * Created by chrislim on 1/14/16. */ public class SearchResultsActivity extends ListActivity { private static final String TAG = SearchResultsActivity.class.getSimpleName(); PersonManager personManager; NoteManager noteManager; @Bind(R.id.backgroundImageView) ImageView backgroundImageView; @Bind(R.id.search_toolbar) Toolbar search_toolbar; @Bind(R.id.search_back_btn) IconTextView search_back_btn; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_search); ButterKnife.bind(this); personManager = PersonManagerImpl.getInstance(this); noteManager = NoteManagerImpl.getInstance(this); handleIntent(getIntent()); CommonUtils.setupBackgroundImage(this, backgroundImageView); search_back_btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { SearchResultsActivity.this.finish(); } }); } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); handleIntent(intent); } private void handleIntent(Intent intent) { if (Intent.ACTION_SEARCH.equals(intent.getAction())) { String query = intent.getStringExtra(SearchManager.QUERY); final List<PersonPOJO> people = personManager.queryPeopleByName(query); final List<NotePOJO> notes = noteManager.queryNotesByText(query); final MergeAdapter mergeAdapter = new MergeAdapter() { @Override public boolean isEmpty() { return people.isEmpty() && notes.isEmpty(); } }; mergeAdapter.addAdapter(new PeopleSearchArrayAdapter(SearchResultsActivity.this, people)); mergeAdapter.addAdapter(new NotesSearchArrayAdapter(SearchResultsActivity.this, notes)); setListAdapter(mergeAdapter); getListView().setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Bundle bundle = new Bundle(); if (mergeAdapter.getItem(position) instanceof PersonPOJO) { PersonPOJO person = (PersonPOJO) mergeAdapter.getItem(position); bundle.putString(Constants.PERSON_ID_BUNDLE_ARG, person.getId()); Intent intent = new Intent(Constants.SHOW_PERSON_INTENT); intent.putExtras(bundle); startActivity(intent); } else if (mergeAdapter.getItem(position) instanceof NotePOJO) { NotePOJO note = (NotePOJO) mergeAdapter.getItem(position); bundle.putString(Constants.NOTE_ID_BUNDLE_ARG, note.getId()); Intent intent = new Intent(Constants.SHOW_NOTE_INTENT); intent.putExtras(bundle); startActivity(intent); } } }); } } private class PeopleSearchArrayAdapter extends ArrayAdapter<PersonPOJO> { private final Context context; private final List<PersonPOJO> persons; private final LayoutInflater inflater; public PeopleSearchArrayAdapter(Context context, List<PersonPOJO> persons) { super(context, -1, persons); this.context = context; this.persons = persons; this.inflater = LayoutInflater.from(context); } @Override public View getView(int position, View view, ViewGroup parent) { final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.list_item_people_active, parent, false); holder.favorite = (IconTextView) view.findViewById(R.id.person_active_favorite); holder.favorite.setVisibility(View.GONE); holder.personThumbnail = (RoundedImageView) view.findViewById(R.id.person_active_thumbnail); holder.personListName = (TextView) view.findViewById(R.id.person_active_list_name); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } final PersonPOJO person = personManager.getPerson(persons.get(position).getId()); // thumbnail picture Picasso.with(context).load(CommonUtils.getContactUri(person.getId())).placeholder(R.drawable.placeholder_user).fit().into(holder.personThumbnail); // person name holder.personListName.setText(person.getName()); return view; } private class ViewHolder { IconTextView favorite; RoundedImageView personThumbnail; TextView personListName; } } private class NotesSearchArrayAdapter extends ArrayAdapter<NotePOJO> { private final Context context; private final List<NotePOJO> notes; private final LayoutInflater inflater; public NotesSearchArrayAdapter(Context context, List<NotePOJO> notes) { super(context, -1, notes); this.context = context; this.notes = notes; this.inflater = LayoutInflater.from(context); } @Override public View getView(int position, View view, ViewGroup parent) { final ViewHolder holder; if (view == null) { holder = new ViewHolder(); view = inflater.inflate(R.layout.list_item_notes, parent, false); holder.noteDate = (TextView) view.findViewById(R.id.note_date); holder.noteText = (TextView) view.findViewById(R.id.note_text); holder.notePeopleTagged = (TextView) view.findViewById(R.id.note_people_tagged); holder.thumbnail1 = (RoundedImageView) view.findViewById(R.id.person_tagged_thumbnail_1); holder.thumbnail2 = (RoundedImageView) view.findViewById(R.id.person_tagged_thumbnail_2); view.setTag(holder); } else { holder = (ViewHolder) view.getTag(); } NotePOJO note = notes.get(position); DateFormat formatter = SimpleDateFormat.getDateTimeInstance(DateFormat.DEFAULT, DateFormat.SHORT); holder.noteDate.setText(formatter.format(note.getLastUpdatedDate())); holder.noteText.setText(note.getText()); holder.notePeopleTagged.setText(Joiner.on(", ").join(note.getPeopleTaggedNames())); List<String> peopleTagged = note.getPeopleTagged(); if (peopleTagged == null || peopleTagged.size() == 0) { holder.notePeopleTagged.setVisibility(View.GONE); holder.thumbnail1.setVisibility(View.INVISIBLE); holder.thumbnail2.setVisibility(View.INVISIBLE); } else { holder.notePeopleTagged.setVisibility(View.VISIBLE); holder.thumbnail1.setVisibility(View.VISIBLE); holder.thumbnail2.setVisibility(View.VISIBLE); if (peopleTagged.size() > 0) { Picasso.with(context) .load(CommonUtils.getContactUri(note.getPeopleTagged().get(0))) .placeholder(R.drawable.placeholder_user) .fit() .into(holder.thumbnail1); } if (peopleTagged.size() > 1) { Picasso.with(context) .load(CommonUtils.getContactUri(note.getPeopleTagged().get(1))) .placeholder(R.drawable.placeholder_user) .fit() .into(holder.thumbnail2); } else { holder.thumbnail2.setVisibility(View.INVISIBLE); } } return view; } private class ViewHolder { TextView notePeopleTagged; TextView noteDate; TextView noteText; RoundedImageView thumbnail1; RoundedImageView thumbnail2; } } }