package com.sound.ampache.fragments; /* Copyright (c) 2008-2009 Kevin James Purdy <purdyk@gmail.com> * Copyright (c) 2010 Krisopher Heijari <iif.ftw@gmail.com> * Copyright (c) 2010 Jacob Alexander < haata@users.sf.net > * * +------------------------------------------------------------------------+ * | This program 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 2 | * | of the License, or (at your option) any later version. | * | | * | This program 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 this program; if not, write to the Free Software | * | Foundation, Inc., 59 Temple Place - Suite 330, | * | Boston, MA 02111-1307, USA. | * +------------------------------------------------------------------------+ */ import android.app.Fragment; import android.os.Bundle; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ProgressBar; import android.widget.Spinner; import android.widget.TextView; import com.sound.ampache.R; import com.sound.ampache.ui.AmpacheListView; import com.sound.ampache.ui.VerticalAmpacheListView; import com.sound.ampache.net.AmpacheApiAction; import com.sound.ampache.objects.Directive; public final class SearchFragment extends Fragment implements AmpacheListView.IsFetchingListener, OnClickListener { private Spinner searchCriteria; private EditText searchString; private VerticalAmpacheListView ampacheListView; private TextView emptyTextView; private ProgressBar progressBar; private TextView headerTextView; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.search_activity, container, false); } @Override public void onViewCreated(View view, Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); searchCriteria = (Spinner) view.findViewById(R.id.search_spinner); ArrayAdapter adapter = ArrayAdapter.createFromResource(getActivity(), R.array.search, android.R.layout.simple_spinner_item); adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); searchCriteria.setAdapter(adapter); searchString = (EditText) view.findViewById(R.id.search_text); // Bind clicklistener for our search button ((ImageButton) view.findViewById(R.id.search_button)).setOnClickListener(this); emptyTextView = (TextView) view.findViewById(android.R.id.empty); emptyTextView.setText("<No search results>"); ampacheListView = (VerticalAmpacheListView) view.findViewById(android.R.id.list); ampacheListView.setFastScrollEnabled(true); ampacheListView.setEmptyView(emptyTextView); ampacheListView.setHeaderDividersEnabled(true); ampacheListView.setIsFetchingListener(this); progressBar = (ProgressBar) view.findViewById(R.id.progress_bar); progressBar.setIndeterminate(true); progressBar.setVisibility(View.INVISIBLE); headerTextView = (TextView) view.findViewById(R.id.text_view); headerTextView.setText("Search results"); } @Override public void onClick(View v) { String searchQuery = searchString.getText().toString(); if (searchQuery.length() <= 0) return; final AmpacheApiAction action; String spinnerValue = (String) searchCriteria.getSelectedItem(); if (spinnerValue.equals("All")) action = AmpacheApiAction.SEARCH_SONGS; else if (spinnerValue.equals("Artists")) action = AmpacheApiAction.ARTISTS; else if (spinnerValue.equals("Albums")) action = AmpacheApiAction.ALBUMS; else if (spinnerValue.equals("Tags")) action = AmpacheApiAction.TAGS; else if (spinnerValue.equals("Songs")) action = AmpacheApiAction.SONGS; else throw new RuntimeException("Unhandled search spinner value: " + spinnerValue); // Clear history when searching, we should only be able to go back if a search result has // been clicked. ampacheListView.clearHistory(); ampacheListView.enqueRequest(new Directive(action, searchQuery, searchQuery)); } @Override public void onIsFetchingChange(boolean isFetching) { if (isFetching) { progressBar.setVisibility(View.VISIBLE); } else { progressBar.setVisibility(View.INVISIBLE); } } /* * Override "back button" behavior on android 1.6 */ public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // Take care of calling this method on earlier versions of // the platform where it doesn't exist. return ampacheListView.backPressed(); } return false; } }