Use new callback for search by intent.
Change-Id: I3e3eafa50a93ad55f55bff0bb5b0b6efdda48bbb
diff --git a/samples/SupportLeanbackDemos/AndroidManifest.xml b/samples/SupportLeanbackDemos/AndroidManifest.xml
index b02e3bf..95f7a2c 100644
--- a/samples/SupportLeanbackDemos/AndroidManifest.xml
+++ b/samples/SupportLeanbackDemos/AndroidManifest.xml
@@ -6,8 +6,6 @@
<uses-sdk android:minSdkVersion="17" android:targetSdkVersion="19" />
- <uses-permission android:name="android.permission.RECORD_AUDIO" />
-
<application
android:label="@string/app_name"
android:icon="@drawable/ic_launcher"
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java
index 437bd72..e872018 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchActivity.java
@@ -15,14 +15,50 @@
import android.app.Activity;
import android.os.Bundle;
+import android.support.v17.leanback.app.SearchFragment;
+import android.support.v17.leanback.widget.SpeechRecognitionCallback;
+import android.util.Log;
public class SearchActivity extends Activity
{
+ private static final String TAG = "SearchActivity";
+ private static boolean DEBUG = true;
+
+ /** If using internal speech recognizer, you must have RECORD_AUDIO permission */
+ private static boolean USE_INTERNAL_SPEECH_RECOGNIZER = false;
+ private static final int REQUEST_SPEECH = 1;
+
+ private SearchFragment mFragment;
+ private SpeechRecognitionCallback mSpeechRecognitionCallback;
+
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.search);
+
+ mFragment = (SearchFragment) getFragmentManager().findFragmentById(R.id.search_fragment);
+
+ if (!USE_INTERNAL_SPEECH_RECOGNIZER) {
+ mSpeechRecognitionCallback = new SpeechRecognitionCallback() {
+ @Override
+ public void recognizeSpeech() {
+ if (DEBUG) Log.v(TAG, "recognizeSpeech");
+ startActivityForResult(mFragment.getRecognizerIntent(), REQUEST_SPEECH);
+ }
+ };
+ mFragment.setSpeechRecognitionCallback(mSpeechRecognitionCallback);
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ if (DEBUG) Log.v(TAG, "onActivityResult requestCode=" + requestCode +
+ " resultCode=" + resultCode +
+ " data=" + data);
+ if (requestCode == REQUEST_SPEECH && resultCode == RESULT_OK) {
+ mFragment.setSearchQuery(data, true);
+ }
}
}
diff --git a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java
index 7d277cf..ff063c5 100644
--- a/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java
+++ b/samples/SupportLeanbackDemos/src/com/example/android/leanback/SearchFragment.java
@@ -17,10 +17,11 @@
implements android.support.v17.leanback.app.SearchFragment.SearchResultProvider {
private static final String TAG = "leanback.SearchFragment";
private static final int NUM_ROWS = 3;
- private static final int SEARCH_DELAY_MS = 300;
+ private static final int SEARCH_DELAY_MS = 1000;
private ArrayObjectAdapter mRowsAdapter;
private Handler mHandler = new Handler();
+ private String mQuery;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -43,10 +44,7 @@
public boolean onQueryTextChange(String newQuery) {
Log.i(TAG, String.format("Search Query Text Change %s", newQuery));
mRowsAdapter.clear();
- if (!TextUtils.isEmpty(newQuery)) {
- mHandler.removeCallbacks(mDelayedLoad);
- mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
- }
+ loadQuery(newQuery);
return true;
}
@@ -54,11 +52,16 @@
public boolean onQueryTextSubmit(String query) {
Log.i(TAG, String.format("Search Query Text Submit %s", query));
mRowsAdapter.clear();
- if (!TextUtils.isEmpty(query)) {
- mHandler.removeCallbacks(mDelayedLoad);
+ loadQuery(query);
+ return true;
+ }
+
+ private void loadQuery(String query) {
+ mQuery = query;
+ mHandler.removeCallbacks(mDelayedLoad);
+ if (!TextUtils.isEmpty(query) && !query.equals("nil")) {
mHandler.postDelayed(mDelayedLoad, SEARCH_DELAY_MS);
}
- return true;
}
private void loadRows() {
@@ -66,7 +69,7 @@
ArrayObjectAdapter listRowAdapter = new ArrayObjectAdapter(new StringPresenter());
listRowAdapter.add("Hello world");
listRowAdapter.add("This is a test");
- HeaderItem header = new HeaderItem(i, "Row " + i, null);
+ HeaderItem header = new HeaderItem(i, mQuery + " results row " + i, null);
mRowsAdapter.add(new ListRow(header, listRowAdapter));
}
}