[Android] [PATCH] Search in Toolbar, dropped for Android Eclair
Geoffrey Métais
geoffrey.metais at gmail.com
Wed Mar 4 12:51:03 CET 2015
---
vlc-android/AndroidManifest.xml | 3 +
vlc-android/res/menu/media_library.xml | 3 +-
vlc-android/res/values/strings.xml | 1 +
vlc-android/res/xml/searchable.xml | 4 +
.../src/org/videolan/vlc/MediaDatabase.java | 32 +--
.../src/org/videolan/vlc/gui/MainActivity.java | 63 +++---
.../src/org/videolan/vlc/gui/SearchFragment.java | 229 ---------------------
.../org/videolan/vlc/gui/SearchHistoryAdapter.java | 58 ------
.../org/videolan/vlc/gui/SearchResultAdapter.java | 67 ------
.../videolan/vlc/gui/SearchSuggestionsAdapter.java | 71 +++++++
10 files changed, 133 insertions(+), 398 deletions(-)
create mode 100644 vlc-android/res/xml/searchable.xml
delete mode 100644 vlc-android/src/org/videolan/vlc/gui/SearchFragment.java
delete mode 100644 vlc-android/src/org/videolan/vlc/gui/SearchHistoryAdapter.java
delete mode 100644 vlc-android/src/org/videolan/vlc/gui/SearchResultAdapter.java
create mode 100644 vlc-android/src/org/videolan/vlc/gui/SearchSuggestionsAdapter.java
diff --git a/vlc-android/AndroidManifest.xml b/vlc-android/AndroidManifest.xml
index e0d1d7d..6e3ca29 100644
--- a/vlc-android/AndroidManifest.xml
+++ b/vlc-android/AndroidManifest.xml
@@ -55,6 +55,9 @@
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
+ <meta-data android:name="android.app.searchable"
+ android:resource="@xml/searchable" />
+
</activity>
<activity android:name=".gui.CompatErrorActivity" />
<activity android:name=".gui.PreferencesActivity"
diff --git a/vlc-android/res/menu/media_library.xml b/vlc-android/res/menu/media_library.xml
index 24086f0..d8d7d9f 100644
--- a/vlc-android/res/menu/media_library.xml
+++ b/vlc-android/res/menu/media_library.xml
@@ -20,9 +20,10 @@
<item
android:id="@+id/ml_menu_search"
android:icon="@drawable/ic_menu_search"
+ vlc:actionViewClass="android.support.v7.widget.SearchView"
android:title="@string/searchable_hint"
android:nextFocusDown="@id/ml_menu_search"
- vlc:showAsAction="ifRoom" />
+ vlc:showAsAction="always|collapseActionView"/>
<item
android:title="@string/sortby"
android:icon="@drawable/ic_menu_sortby"
diff --git a/vlc-android/res/values/strings.xml b/vlc-android/res/values/strings.xml
index caa5192..9a5f437 100644
--- a/vlc-android/res/values/strings.xml
+++ b/vlc-android/res/values/strings.xml
@@ -318,6 +318,7 @@
<string name="network_shares_discovery">Looking for network shares...</string>
<string name="network_empty">This directory is empty.</string>
<string name="network_connection_needed">No connection to local network.</string>
+ <string name="search_hint">Search media</string>
<string-array name="hardware_acceleration_list">
<item>@string/automatic</item>
diff --git a/vlc-android/res/xml/searchable.xml b/vlc-android/res/xml/searchable.xml
new file mode 100644
index 0000000..443afb5
--- /dev/null
+++ b/vlc-android/res/xml/searchable.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<searchable xmlns:android="http://schemas.android.com/apk/res/android"
+ android:label="@string/app_name"
+ android:hint="@string/search_hint" />
\ No newline at end of file
diff --git a/vlc-android/src/org/videolan/vlc/MediaDatabase.java b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
index 0912abe..375477c 100644
--- a/vlc-android/src/org/videolan/vlc/MediaDatabase.java
+++ b/vlc-android/src/org/videolan/vlc/MediaDatabase.java
@@ -50,19 +50,19 @@ public class MediaDatabase {
private SQLiteDatabase mDb;
private static final String DB_NAME = "vlc_database";
- private static final int DB_VERSION = 15;
+ private static final int DB_VERSION = 16;
private static final int CHUNK_SIZE = 50;
private static final String DIR_TABLE_NAME = "directories_table";
private static final String DIR_ROW_PATH = "path";
private static final String MEDIA_TABLE_NAME = "media_table";
- private static final String MEDIA_LOCATION = "location";
+ public static final String MEDIA_LOCATION = "_id"; //standard key for primary key, needed for search suggestions
private static final String MEDIA_TIME = "time";
private static final String MEDIA_LENGTH = "length";
private static final String MEDIA_TYPE = "type";
private static final String MEDIA_PICTURE = "picture";
- private static final String MEDIA_TITLE = "title";
+ public static final String MEDIA_TITLE = "title";
private static final String MEDIA_ARTIST = "artist";
private static final String MEDIA_GENRE = "genre";
private static final String MEDIA_ALBUM = "album";
@@ -571,21 +571,23 @@ public class MediaDatabase {
return files;
}
- public synchronized ArrayList<String> searchMedia(String filter, int type){
-
- ArrayList<String> mediaList = new ArrayList<String>();
-
+ public synchronized Cursor queryMedia(String query, int type){
String[] queryColumns = new String[]{MEDIA_LOCATION, MEDIA_TITLE, MEDIA_ALBUM, MEDIA_ARTIST, MEDIA_TYPE};
String queryString = MEDIA_TITLE+" LIKE ? OR "+MEDIA_ALBUM+" LIKE ? OR "+MEDIA_ARTIST+" LIKE ?";
String [] queryArgs;
if (type != MediaWrapper.TYPE_ALL) {
queryString = "( " + queryString + " ) AND " + MEDIA_TYPE + "=?";
- queryArgs = new String[]{"%"+filter+"%", "%"+filter+"%", "%"+filter+"%", String.valueOf(type)};
+ queryArgs = new String[]{"%"+query+"%", "%"+query+"%", "%"+query+"%", String.valueOf(type)};
} else
- queryArgs = new String[]{"%"+filter+"%", "%"+filter+"%", "%"+filter+"%"};
+ queryArgs = new String[]{"%"+query+"%", "%"+query+"%", "%"+query+"%"};
- Cursor cursor = mDb.query(MEDIA_TABLE_NAME,
- queryColumns, queryString, queryArgs, null, null, null, null);
+ return mDb.query(MEDIA_TABLE_NAME, queryColumns, queryString, queryArgs, null, null, null, null);
+ }
+
+ public synchronized ArrayList<String> searchMedia(String filter, int type){
+
+ ArrayList<String> mediaList = new ArrayList<String>();
+ Cursor cursor = queryMedia(filter, type);
if (cursor.moveToFirst()){
do {
mediaList.add(cursor.getString(0));
@@ -830,7 +832,7 @@ public class MediaDatabase {
default:
return;
}
- mDb.update(MEDIA_TABLE_NAME, values, MEDIA_LOCATION + "=?", new String[] { location });
+ mDb.update(MEDIA_TABLE_NAME, values, MEDIA_LOCATION + "=?", new String[]{location});
}
/**
@@ -852,7 +854,7 @@ public class MediaDatabase {
* @param path
*/
public synchronized void removeDir(String path) {
- mDb.delete(DIR_TABLE_NAME, DIR_ROW_PATH + "=?", new String[] { path });
+ mDb.delete(DIR_TABLE_NAME, DIR_ROW_PATH + "=?", new String[]{path});
}
/**
@@ -924,7 +926,7 @@ public class MediaDatabase {
ArrayList<String> history = new ArrayList<String>();
Cursor cursor = mDb.query(SEARCHHISTORY_TABLE_NAME,
- new String[] { SEARCHHISTORY_KEY },
+ new String[]{SEARCHHISTORY_KEY},
null, null, null, null,
SEARCHHISTORY_DATE + " DESC",
Integer.toString(size));
@@ -970,7 +972,7 @@ public class MediaDatabase {
}
public synchronized void deleteMrlUri(String uri) {
- mDb.delete(MRL_TABLE_NAME, MRL_URI + "=?", new String[] { uri });
+ mDb.delete(MRL_TABLE_NAME, MRL_URI + "=?", new String[]{uri});
}
public synchronized void clearMrlHistory() {
diff --git a/vlc-android/src/org/videolan/vlc/gui/MainActivity.java b/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
index fdd1520..7619544 100644
--- a/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
+++ b/vlc-android/src/org/videolan/vlc/gui/MainActivity.java
@@ -21,12 +21,14 @@
package org.videolan.vlc.gui;
import android.annotation.TargetApi;
+import android.app.SearchManager;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
+import android.database.Cursor;
import android.graphics.Color;
import android.os.Build;
import android.os.Bundle;
@@ -38,10 +40,12 @@ import android.support.v4.app.FragmentActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentTransaction;
import android.support.v4.view.GravityCompat;
+import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
import android.support.v7.app.ActionBarActivity;
import android.support.v7.app.ActionBarDrawerToggle;
+import android.support.v7.widget.SearchView;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.KeyEvent;
@@ -63,6 +67,7 @@ import org.videolan.libvlc.LibVlcUtil;
import org.videolan.vlc.BuildConfig;
import org.videolan.vlc.MediaDatabase;
import org.videolan.vlc.MediaLibrary;
+import org.videolan.vlc.MediaWrapper;
import org.videolan.vlc.R;
import org.videolan.vlc.VLCApplication;
import org.videolan.vlc.audio.AudioService;
@@ -87,7 +92,7 @@ import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
-public class MainActivity extends ActionBarActivity implements OnItemClickListener {
+public class MainActivity extends ActionBarActivity implements OnItemClickListener, SearchView.OnQueryTextListener {
public final static String TAG = "VLC/MainActivity";
protected static final String ACTION_SHOW_PROGRESSBAR = "org.videolan.vlc.gui.ShowProgressBar";
@@ -132,6 +137,7 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
private int mFocusedPrior = 0;
private int mActionBarIconId = -1;
Menu mMenu;
+ private SearchView mSearchView;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -486,8 +492,6 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
f = new EqualizerFragment();
} else if(id.equals("about")) {
f = new AboutFragment();
- } else if(id.equals("search")) {
- f = new SearchFragment();
} else if(id.equals("mediaInfo")) {
f = new MediaInfoFragment();
} else if(id.equals("videoGroupList")) {
@@ -533,6 +537,7 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
/** Create menu from XML
*/
+ @TargetApi(Build.VERSION_CODES.FROYO)
@Override
public boolean onCreateOptionsMenu(Menu menu) {
mMenu = menu;
@@ -542,6 +547,16 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
*/
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.media_library, menu);
+
+ if (LibVlcUtil.isFroyoOrLater()) {
+ SearchManager searchManager =
+ (SearchManager) getSystemService(Context.SEARCH_SERVICE);
+ mSearchView = (SearchView) MenuItemCompat.getActionView(menu.findItem(R.id.ml_menu_search));
+ mSearchView.setSearchableInfo(searchManager.getSearchableInfo(getComponentName()));
+ mSearchView.setOnQueryTextListener(this);
+ mSearchView.setSuggestionsAdapter(new SearchSuggestionsAdapter(this, null));
+ } else
+ menu.findItem(R.id.ml_menu_search).setVisible(false);
return super.onCreateOptionsMenu(menu);
}
@@ -557,9 +572,6 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
menu.findItem(R.id.ml_menu_sortby).setEnabled(true);
menu.findItem(R.id.ml_menu_sortby).setVisible(true);
}
- // Enable the clear search history function for the search fragment.
- if (mCurrentFragment != null && mCurrentFragment.equals("search"))
- menu.findItem(R.id.search_clear_history).setVisible(true);
boolean networkSave = current instanceof NetworkFragment && !((NetworkFragment)current).isRootDirectory();
if (networkSave) {
@@ -576,15 +588,9 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
menu.findItem(R.id.ml_menu_clean).setVisible(SidebarEntry.ID_MRL.equals(mCurrentFragment));
menu.findItem(R.id.ml_menu_last_playlist).setVisible(SidebarEntry.ID_AUDIO.equals(mCurrentFragment));
- return super.onPrepareOptionsMenu(menu);
- }
- @Override
- public boolean onSearchRequested() {
- if (mCurrentFragment != null && mCurrentFragment.equals("search"))
- ((SearchFragment)fetchSecondaryFragment("search")).onSearchKeyPressed();
- showSecondaryFragment("search");
- return true;
+
+ return super.onPrepareOptionsMenu(menu);
}
/**
@@ -622,9 +628,6 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
Intent i = new Intent(AudioService.ACTION_REMOTE_LAST_PLAYLIST);
sendBroadcast(i);
break;
- case R.id.ml_menu_search:
- onSearchRequested();
- break;
case android.R.id.home:
// Slide down the audio player.
if (slideDownAudioPlayer())
@@ -644,9 +647,6 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
if (getFragment(mCurrentFragment) instanceof MRLPanelFragment)
((MRLPanelFragment)getFragment(mCurrentFragment)).clearHistory();
break;
- case R.id.search_clear_history:
- MediaDatabase.getInstance().clearSearchHistory();
- break;
case R.id.ml_menu_save:
if (current == null)
break;
@@ -785,14 +785,6 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
mCurrentFragment = sharedPrefs.getString("fragment", "video");
}
- /**
- * onClick event from xml
- * @param view
- */
- public void searchClick(View view) {
- onSearchRequested();
- }
-
private final BroadcastReceiver messageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -831,6 +823,20 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
}
};
+ @Override
+ public boolean onQueryTextSubmit(String query) {
+ return false;
+ }
+
+ @Override
+ public boolean onQueryTextChange(String newText) {
+ if (newText.length() < 3)
+ return false;
+ Cursor cursor = MediaDatabase.getInstance().queryMedia(newText, MediaWrapper.TYPE_ALL);
+ mSearchView.getSuggestionsAdapter().changeCursor(cursor);
+ return true;
+ }
+
private static class MainActivityHandler extends WeakHandler<MainActivity> {
public MainActivityHandler(MainActivity owner) {
super(owner);
@@ -878,6 +884,7 @@ public class MainActivity extends ActionBarActivity implements OnItemClickListen
* Show the audio player.
*/
public void showAudioPlayer() {
+ mActionBar.collapseActionView();
// Open the pane only if is entirely opened.
if (mSlidingPane.getState() == mSlidingPane.STATE_OPENED_ENTIRELY)
mSlidingPane.openPane();
diff --git a/vlc-android/src/org/videolan/vlc/gui/SearchFragment.java b/vlc-android/src/org/videolan/vlc/gui/SearchFragment.java
deleted file mode 100644
index 88c773e..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/SearchFragment.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*****************************************************************************
- * SearchFragment.java
- *****************************************************************************
- * Copyright © 2011-2012 VLC authors and VideoLAN
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-package org.videolan.vlc.gui;
-
-import java.util.ArrayList;
-
-import org.videolan.vlc.MediaWrapper;
-import org.videolan.vlc.MediaDatabase;
-import org.videolan.vlc.MediaLibrary;
-import org.videolan.vlc.R;
-import org.videolan.vlc.audio.AudioServiceController;
-import org.videolan.vlc.gui.video.VideoPlayerActivity;
-
-import android.content.Context;
-import android.os.Bundle;
-import android.os.Handler;
-import android.support.v4.app.ListFragment;
-import android.support.v7.app.ActionBarActivity;
-import android.text.Editable;
-import android.text.TextWatcher;
-import android.view.KeyEvent;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ListView;
-import android.widget.TextView;
-import android.widget.TextView.OnEditorActionListener;
-
-public class SearchFragment extends ListFragment {
-
- public final static String TAG = "VLC/SearchActivity";
-
- private EditText mSearchText;
- private SearchHistoryAdapter mHistoryAdapter;
- private SearchResultAdapter mResultAdapter;
- private LinearLayout mListHeader;
-
- final private Handler mHandler = new Handler();
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- ((ActionBarActivity) getActivity()).getSupportActionBar().setTitle(R.string.search);
-
- View v = inflater.inflate(R.layout.search, container, false);
-
- // TODO: create layout
- mHistoryAdapter = new SearchHistoryAdapter(getActivity());
- mResultAdapter = new SearchResultAdapter(getActivity());
-
- return v;
- }
-
- @Override
- public void onActivityCreated(Bundle savedInstanceState) {
- super.onActivityCreated(savedInstanceState);
- View v = getView();
-
- mSearchText = (EditText) v.findViewById(R.id.search_text);
- mSearchText.setOnEditorActionListener(searchTextListener);
- mSearchText.addTextChangedListener(searchTextWatcher);
- }
-
- @Override
- public void onResume() {
- super.onResume();
-
- mSearchText.requestFocus();
-
- InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mSearchText, InputMethodManager.SHOW_IMPLICIT);
-
- showSearchHistory();
- }
-
- @Override
- public void onPause() {
- super.onPause();
-
- InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(getView().getWindowToken(), 0);
- }
-
- private void search(final String key, final int type) {
- mResultAdapter.clear();
- new Thread(new Runnable() {
- public void run() {
- final ArrayList<MediaWrapper> mediaList = MediaLibrary.getInstance().searchMedia(key, type);
- mHandler.post(new Runnable() {
- public void run() {
- int count = mediaList.size();
- for (int i = 0 ; i < count ; ++i)
- mResultAdapter.add(mediaList.get(i));
- mResultAdapter.sort();
-
- String headerText = getResources().getQuantityString(R.plurals.search_found_results_quantity, mediaList.size(), mediaList.size());
- showListHeader(headerText);
-
- setListAdapter(mResultAdapter);
- }
- });
- }
- }).start();
-
- }
-
- private void showListHeader(String text) {
- ListView lv = getListView();
-
- // Create a new header if it doesn't already exist
- if (mListHeader == null) {
- LayoutInflater infalter = (LayoutInflater) getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- mListHeader = (LinearLayout) infalter.inflate(R.layout.list_header, lv, false);
- lv.addHeaderView(mListHeader, null, false);
- }
-
- // Set header text
- TextView headerText = (TextView) mListHeader.findViewById(R.id.text);
- headerText.setText(text);
- }
-
- private void showSearchHistory() {
- // Add header to the history
- String headerText = getString(R.string.search_history);
- showListHeader(headerText);
-
- MediaDatabase db = MediaDatabase.getInstance();
- mHistoryAdapter.clear();
- ArrayList<String> history = db.getSearchhistory(20);
- for (String s : history)
- mHistoryAdapter.add(s);
- mHistoryAdapter.notifyDataSetChanged();
- setListAdapter(mHistoryAdapter);
- }
-
- private final TextWatcher searchTextWatcher = new TextWatcher() {
-
- @Override
- public void onTextChanged(CharSequence s, int start, int before, int count) {
- if (s.length() > 0) {
- search(s.toString(), MediaWrapper.TYPE_ALL);
- } else {
- showSearchHistory();
- }
- }
-
- @Override
- public void beforeTextChanged(CharSequence s, int start, int count,
- int after) {
-
- }
-
- @Override
- public void afterTextChanged(Editable s) {
-
- }
- };
-
- private final OnEditorActionListener searchTextListener = new OnEditorActionListener() {
- @Override
- public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
- InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(mSearchText.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
- return false;
- }
- };
-
- @Override
- public void onListItemClick(ListView l, View v, int position, long id) {
- if (getListAdapter() == mHistoryAdapter) {
- String selection = ((TextView) v.findViewById(android.R.id.text1)).getText().toString();
- mSearchText.setText(selection);
- mSearchText.setSelection(selection.length());
- mSearchText.requestFocus();
- } else if (getListAdapter() == mResultAdapter) {
- // add search text to the database (history)
- MediaDatabase db = MediaDatabase.getInstance();
- db.addSearchhistoryItem(mSearchText.getText().toString());
-
- // open media in the player
- MediaWrapper item = (MediaWrapper) getListView().getItemAtPosition(position);
- if (item != null) {
- if (item.getType() == MediaWrapper.TYPE_VIDEO) {
- VideoPlayerActivity.start(getActivity(), item.getLocation());
- } else {
- ArrayList<String> arr = new ArrayList<String>();
- for (int i = 0; i < getListAdapter().getCount(); i++) {
- MediaWrapper audioItem = (MediaWrapper) getListAdapter().getItem(i);
- if (audioItem.getType() == MediaWrapper.TYPE_AUDIO)
- arr.add(audioItem.getLocation());
- }
- AudioServiceController.getInstance().load(arr, arr.indexOf(item.getLocation()));
- return;
- }
- }
- super.onListItemClick(l, v, position, id);
-
- }
- };
-
- public void onSearchKeyPressed() {
- if (mSearchText == null)
- return;
- mSearchText.requestFocus();
- mSearchText.setSelection(mSearchText.getText().length());
- InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.showSoftInput(mSearchText, InputMethodManager.RESULT_SHOWN);
- }
-}
diff --git a/vlc-android/src/org/videolan/vlc/gui/SearchHistoryAdapter.java b/vlc-android/src/org/videolan/vlc/gui/SearchHistoryAdapter.java
deleted file mode 100644
index a288f69..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/SearchHistoryAdapter.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*****************************************************************************
- * SearchResultAdapter.java
- *****************************************************************************
- * Copyright © 2011-2012 VLC authors and VideoLAN
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-package org.videolan.vlc.gui;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-public class SearchHistoryAdapter extends ArrayAdapter<String> {
-
- public SearchHistoryAdapter(Context context) {
- super(context, 0);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
- View view = convertView;
- if (view == null) {
- LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
- holder = new ViewHolder();
- holder.text = (TextView) view.findViewById(android.R.id.text1);
- view.setTag(holder);
- } else
- holder = (ViewHolder) view.getTag();
-
- String item = getItem(position);
- holder.text.setText(item);
-
- return view;
- }
-
- static class ViewHolder {
- TextView text;
- }
-}
diff --git a/vlc-android/src/org/videolan/vlc/gui/SearchResultAdapter.java b/vlc-android/src/org/videolan/vlc/gui/SearchResultAdapter.java
deleted file mode 100644
index cf177f1..0000000
--- a/vlc-android/src/org/videolan/vlc/gui/SearchResultAdapter.java
+++ /dev/null
@@ -1,67 +0,0 @@
-/*****************************************************************************
- * SearchResultAdapter.java
- *****************************************************************************
- * Copyright © 2011-2012 VLC authors and VideoLAN
- *
- * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
- *****************************************************************************/
-
-package org.videolan.vlc.gui;
-
-import java.util.Comparator;
-
-import org.videolan.vlc.MediaWrapper;
-import org.videolan.vlc.gui.audio.MediaComparators;
-
-import android.content.Context;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.TextView;
-
-public class SearchResultAdapter extends ArrayAdapter<MediaWrapper> {
-
- public SearchResultAdapter(Context context) {
- super(context, 0);
- }
-
- @Override
- public View getView(int position, View convertView, ViewGroup parent) {
- ViewHolder holder;
- View view = convertView;
- if (view == null) {
- LayoutInflater inflater = (LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
- view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
- holder = new ViewHolder();
- holder.text = (TextView) view.findViewById(android.R.id.text1);
- view.setTag(holder);
- } else
- holder = (ViewHolder) view.getTag();
-
- MediaWrapper item = getItem(position);
- holder.text.setText(item.getTitle());
-
- return view;
- }
-
- public void sort() {
- super.sort(MediaComparators.byName);
- }
-
- static class ViewHolder {
- TextView text;
- }
-}
diff --git a/vlc-android/src/org/videolan/vlc/gui/SearchSuggestionsAdapter.java b/vlc-android/src/org/videolan/vlc/gui/SearchSuggestionsAdapter.java
new file mode 100644
index 0000000..d0217fb
--- /dev/null
+++ b/vlc-android/src/org/videolan/vlc/gui/SearchSuggestionsAdapter.java
@@ -0,0 +1,71 @@
+/*
+ * *************************************************************************
+ * SearchSuggestionsAdapter.java
+ * **************************************************************************
+ * Copyright © 2015 VLC authors and VideoLAN
+ *
+ * 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., 51 Franklin Street, Fifth Floor, Boston MA 02110-1301, USA.
+ * ***************************************************************************
+ */
+
+package org.videolan.vlc.gui;
+
+import android.content.Context;
+import android.database.Cursor;
+import android.support.v4.widget.CursorAdapter;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import org.videolan.vlc.MediaDatabase;
+import org.videolan.vlc.MediaLibrary;
+import org.videolan.vlc.MediaWrapper;
+import org.videolan.vlc.R;
+import org.videolan.vlc.util.Util;
+
+public class SearchSuggestionsAdapter extends CursorAdapter {
+
+ public final static String TAG = "VLC/SearchSuggestionsAdapter";
+
+ MediaLibrary mMediaLibrary = MediaLibrary.getInstance();
+
+ public SearchSuggestionsAdapter(Context context, Cursor cursor){
+ super(context, cursor, false);
+ }
+
+ @Override
+ public View newView(Context context, Cursor cursor, ViewGroup parent) {
+ LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+ View view = inflater.inflate(android.R.layout.simple_list_item_1, parent, false);
+ return view;
+ }
+
+ @Override
+ public void bindView(View view, final Context context, final Cursor cursor) {
+ final int position = cursor.getPosition();
+ TextView tv = (TextView) view.findViewById(android.R.id.text1);
+ tv.setText(cursor.getString(cursor.getColumnIndex(MediaDatabase.MEDIA_TITLE)));
+ tv.setBackgroundColor(Util.getColorFromAttribute(context, R.attr.background_menu));
+ tv.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ cursor.moveToPosition(position);
+ MediaWrapper media = mMediaLibrary.getMediaItem(cursor.getString(cursor.getColumnIndex(MediaDatabase.MEDIA_LOCATION)));
+ Util.openMedia(context, media);
+ }
+ });
+ }
+}
--
2.1.0
More information about the Android
mailing list