/* * Copyright 2008-2013, ETH Zürich, Samuel Welten, Michael Kuhn, Tobias Langner, * Sandro Affentranger, Lukas Bossard, Michael Grob, Rahul Jain, * Dominic Langenegger, Sonia Mayor Alonso, Roger Odermatt, Tobias Schlueter, * Yannick Stucki, Sebastian Wendland, Samuel Zehnder, Samuel Zihlmann, * Samuel Zweifel * * This file is part of Jukefox. * * Jukefox is free software: you can redistribute it and/or modify it under the * terms of the GNU General Public License as published by the Free Software * Foundation, either version 3 of the License, or any later version. Jukefox is * distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A * PARTICULAR PURPOSE. See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with * Jukefox. If not, see <http://www.gnu.org/licenses/>. */ package ch.ethz.dcg.pancho3.view.tabs; import java.util.Timer; import java.util.TimerTask; import android.content.Context; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.KeyEvent; import android.view.View; import android.view.WindowManager; import android.view.View.OnKeyListener; import android.view.inputmethod.InputMethodManager; import android.widget.AdapterView; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ListView; import android.widget.Spinner; import android.widget.TextView; import android.widget.AdapterView.OnItemClickListener; import android.widget.AdapterView.OnItemLongClickListener; import android.widget.AdapterView.OnItemSelectedListener; import ch.ethz.dcg.pancho3.R; import ch.ethz.dcg.pancho3.controller.eventhandlers.SearchEventListener; import ch.ethz.dcg.pancho3.view.tabs.lists.TextSectionAdapter; public class SearchActivity extends JukefoxTabActivity { private final static String TAG = SearchActivity.class.getSimpleName(); public static final int NUM_PROPOSITIONS = 3; public static final int SEARCH_THRESH_MILLIS = 1000; private SearchEventListener eventListener; private EditText searchTerm; private Spinner searchInSelectionSpinner; // private RadioButton searchInArtists; // private RadioButton searchInAlbums; // private RadioButton searchInTitles; // private RadioButton searchInFamousArtists; // private ImageButton searchButton; private TextView resultListTitle; private ArrayAdapter<String> textAdapter; private String[] propositions = new String[0]; private ListView resultList; private long lastAutomatedSearch; private Timer searchTimer; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.search); setCurrentTab(Tab.SEARCH); eventListener = controller.createSearchEventListener(this); registerEventListeners(); // registerRadioButtons(); int selectedPos = 2; // TODO: initialize this from intent registerSpinner(selectedPos); } // private void registerRadioButtons() { // searchInArtists = (RadioButton) findViewById(R.id.searchInArtists); // searchInAlbums = (RadioButton) findViewById(R.id.searchInAlbums); // searchInFamousArtists = (RadioButton) findViewById(R.id.searchInSimilarArtists); // searchInTitles = (RadioButton) findViewById(R.id.searchInTitles); // RadioGroup radioGroup = (RadioGroup) findViewById(R.id.searchCriterion); // radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { // // @Override // public void onCheckedChanged(RadioGroup group, int checkedId) { // search(); // } // }); // } private void registerSpinner(int selectedPos) { searchInSelectionSpinner = (Spinner)findViewById(R.id.searchInSelectionSpinner); searchInSelectionSpinner.setSelection(selectedPos); // title searchInSelectionSpinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int pos, long id) { search(); } @Override public void onNothingSelected(AdapterView<?> arg0) { // TODO: nothing to do (?) } }); // searchInArtists = (RadioButton) findViewById(R.id.searchInArtists); // searchInAlbums = (RadioButton) findViewById(R.id.searchInAlbums); // searchInFamousArtists = (RadioButton) findViewById(R.id.searchInSimilarArtists); // searchInTitles = (RadioButton) findViewById(R.id.searchInTitles); // RadioGroup radioGroup = (RadioGroup) findViewById(R.id.searchCriterion); // radioGroup.setOnCheckedChangeListener(new OnCheckedChangeListener() { // // @Override // public void onCheckedChanged(RadioGroup group, int checkedId) { // search(); // } // }); } private void search() { String searchTerm = getSearchTerm(); if (searchTerm == null || searchTerm.trim().length() == 0) { return; } // eventListener.search(getSearchTerm(), searchInArtists // .isChecked(), searchInTitles.isChecked(), searchInFamousArtists // .isChecked(), searchInAlbums.isChecked()); int selectedPos = searchInSelectionSpinner.getSelectedItemPosition(); boolean searchInArtists = (selectedPos == 0); boolean searchInTitles = (selectedPos == 2); boolean searchInFamousArtists = (selectedPos == 3); boolean searchInAlbums = (selectedPos == 1); eventListener.search(getSearchTerm(), searchInArtists, searchInTitles, searchInFamousArtists, searchInAlbums); } private void registerEventListeners() { searchTerm = (EditText) findViewById(R.id.searchTerm); textAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, propositions); searchTerm.setOnKeyListener(new OnKeyListener() { @Override public boolean onKey(View v, int keyCode, KeyEvent event) { if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) { search(); hideKeyboard(); return true; } else if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_BACK) { return false; } return false; } }); setTextWatcher(); resultList = (ListView) findViewById(R.id.resultList); resultList.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> list, View arg1, int position, long arg3) { switch (searchInSelectionSpinner.getSelectedItemPosition()) { case 0: eventListener.onArtistItemClicked(list, position); break; case 1: eventListener.onAlbumItemClicked(list, position); break; case 2: eventListener.onTitleItemClicked(list, position); break; case 3: eventListener.onFamousArtistItemClicked(list, position); break; } // eventListener.onItemClicked(list, position, searchInArtists // .isChecked(), searchInTitles.isChecked(), // searchInFamousArtists.isChecked(), searchInAlbums.isChecked()); } }); resultList.setOnItemLongClickListener(new OnItemLongClickListener() { @Override public boolean onItemLongClick(AdapterView<?> list, View arg1, int position, long arg3) { switch (searchInSelectionSpinner.getSelectedItemPosition()) { case 0: return eventListener.onArtistItemLongClicked(list, position); case 1: return eventListener.onAlbumItemLongClicked(list, position); case 2: return eventListener.onTitleItemLongClicked(list, position); } return false; // return eventListener.onItemLongClicked(list, position, searchInArtists // .isChecked(), searchInTitles.isChecked(), // searchInFamousArtists.isChecked(), searchInAlbums.isChecked()); } }); resultListTitle = (TextView) findViewById(R.id.resultListTitle); // searchButton = (ImageButton) findViewById(R.id.searchButton); // searchButton.setOnClickListener(new OnClickListener() { // // @Override // public void onClick(View v) { // eventListener.search(getSearchTerm(), // searchInArtists.isChecked(), // searchInTitles.isChecked(), searchInFamousArtists // .isChecked()); // hideKeyboard(); // } // }); } private void hideKeyboard() { InputMethodManager inputManager = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); inputManager.hideSoftInputFromWindow(searchTerm .getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } private String getSearchTerm() { return searchTerm.getText().toString(); } private void setTextWatcher() { searchTerm.addTextChangedListener(new TextWatcher() { @Override public void afterTextChanged(Editable s) { if (settings.isSearchWhileTyping()) { resetSearchTimer(); } } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } }); } public void setResultList(String title, TextSectionAdapter adapter) { resultList.setFastScrollEnabled(false); resultList.setAdapter(adapter); resultList.setFastScrollEnabled(true); } private void resetSearchTimer() { cancelTimer(); searchTimer = new Timer(); searchTimer.schedule(new TimerTask() { @Override public void run() { search(); } }, SEARCH_THRESH_MILLIS); } private void cancelTimer() { if (searchTimer != null) { searchTimer.cancel(); } } public TextView getResultListTitle() { return resultListTitle; } public void showFamousArtistsNotReadyInfo() { showStatusInfo(getString(R.string.famous_artists_not_ready)); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (eventListener.onKey(keyCode, event)) { return true; } return super.onKeyDown(keyCode, event); } @Override protected void onPause() { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN); super.onPause(); } @Override protected void onResume() { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); super.onResume(); } }