Merge "Handling missing RECORD_AUDIO permission." into lmp-preview-dev
diff --git a/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java b/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
index 53d6011..ce4faf3 100644
--- a/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
+++ b/v17/leanback/src/android/support/v17/leanback/app/SearchFragment.java
@@ -31,7 +31,9 @@
import android.support.v17.leanback.R;
/**
- * A fragment to handle searches
+ * <p>A fragment to handle searches.</p>
+ *
+ * <p>Note: Your application will need to request android.permission.RECORD_AUDIO</p>
*/
public class SearchFragment extends Fragment {
private static final String TAG = SearchFragment.class.getSimpleName();
@@ -62,6 +64,9 @@
* <p>This is called as soon as the query changes; it is up to the application to add a
* delay before actually executing the queries if needed.</p>
*
+ * <p>This method might not always be called before onQueryTextSubmit gets called, in
+ * particular for voice input cases.</p>
+ *
* @param newQuery The current search query.
* @return whether the results changed or not.
*/
diff --git a/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java b/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
index ae717ab..75a66c6 100644
--- a/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
+++ b/v17/leanback/src/android/support/v17/leanback/widget/SearchBar.java
@@ -15,6 +15,7 @@
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.drawable.Drawable;
@@ -46,7 +47,9 @@
import java.util.List;
/**
- * SearchBar is a search widget.
+ * <p>SearchBar is a search widget.</p>
+ *
+ * <p>Note: Your application will need to request android.permission.RECORD_AUDIO</p>
*/
public class SearchBar extends RelativeLayout {
private static final String TAG = SearchBar.class.getSimpleName();
@@ -68,7 +71,10 @@
public void onSearchQueryChange(String query);
/**
- * Method invoked when the search query is submitted.
+ * <p>Method invoked when the search query is submitted.</p>
+ *
+ * <p>This method can be called without a preceeding onSearchQueryChange,
+ * in particular in the case of a voice input.</p>
*
* @param query The query being submitted.
*/
@@ -110,6 +116,8 @@
public SearchBar(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
+ enforceAudioRecordPermission();
+
Resources r = getResources();
LayoutInflater inflater = LayoutInflater.from(getContext());
@@ -519,5 +527,12 @@
}
}
+ private void enforceAudioRecordPermission() {
+ String permission = "android.permission.RECORD_AUDIO";
+ int res = getContext().checkCallingOrSelfPermission(permission);
+ if (PackageManager.PERMISSION_GRANTED != res) {
+ throw new IllegalStateException("android.premission.RECORD_AUDIO required for search");
+ }
+ }
}