diff options
author | Yorke Lee <yorkelee@google.com> | 2013-12-11 19:06:22 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2013-12-11 19:06:23 +0000 |
commit | 0140cf8eba4d904d5316a36045ad0333447f02fe (patch) | |
tree | aa733c2b8b5c1d9fb61749f5dbbcc19686953ec6 | |
parent | a3d0c71a8866c5bb236c96b80f4de0e023680309 (diff) | |
parent | da0f9046b2457c8adc0b97896d7ea1e880eccf96 (diff) |
Merge "Hide voice search button if intent cannot be handled"
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/com/android/dialer/DialtactsActivity.java | 38 |
2 files changed, 36 insertions, 5 deletions
diff --git a/res/values/strings.xml b/res/values/strings.xml index 9b534da33..a0376a6e0 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -520,6 +520,9 @@ <!-- Message displayed when there is no application available to handle the add contact menu option. [CHAR LIMIT=NONE] --> <string name="add_contact_not_available">Re-enable the People application to use this feature.</string> + <!-- Message displayed when there is no application available to handle voice search. [CHAR LIMIT=NONE] --> + <string name="voice_search_not_available">Voice search is not available.</string> + <!-- Hint displayed in dialer search box when there is no query that is currently typed. [CHAR LIMIT=30] --> <string name="dialer_hint_find_contact">Type a name or phone number</string> diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java index 1ab46013a..0c0fcdafe 100644 --- a/src/com/android/dialer/DialtactsActivity.java +++ b/src/com/android/dialer/DialtactsActivity.java @@ -27,6 +27,8 @@ import android.app.FragmentTransaction; import android.content.ActivityNotFoundException; import android.content.Context; import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; @@ -48,6 +50,7 @@ import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.View.OnClickListener; import android.view.View.OnFocusChangeListener; import android.view.inputmethod.InputMethodManager; import android.widget.AbsListView.OnScrollListener; @@ -76,6 +79,7 @@ import com.android.dialerbind.DatabaseHelperManager; import com.android.internal.telephony.ITelephony; import java.util.ArrayList; +import java.util.List; /** * The dialer tab's title is 'phone', a more common name (see strings.xml). @@ -330,7 +334,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O hideDialpadFragment(false, true); mInCallDialpadUp = false; } - + prepareVoiceSearchButton(); mFirstLaunch = false; mDialerDatabaseHelper.startSmartDialUpdateThread(); } @@ -447,8 +451,13 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O } break; case R.id.voice_search_button: - final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); - startActivityForResult(voiceIntent, ACTIVITY_REQUEST_CODE_VOICE_SEARCH); + try { + startActivityForResult(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), + ACTIVITY_REQUEST_CODE_VOICE_SEARCH); + } catch (ActivityNotFoundException e) { + Toast.makeText(DialtactsActivity.this, R.string.voice_search_not_available, + Toast.LENGTH_SHORT).show(); + } break; default: { Log.wtf(TAG, "Unexpected onClick event from " + view); @@ -507,8 +516,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O mSearchViewContainer = findViewById(R.id.search_view_container); mSearchViewCloseButton = findViewById(R.id.search_close_button); mSearchViewCloseButton.setOnClickListener(this); - mVoiceSearchButton = findViewById(R.id.voice_search_button); - mVoiceSearchButton.setOnClickListener(this); + mSearchView = (EditText) findViewById(R.id.search_view); mSearchView.addTextChangedListener(mPhoneSearchQueryTextListener); @@ -524,6 +532,19 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O ssb.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); mSearchView.setHint(ssb); + + prepareVoiceSearchButton(); + } + + private void prepareVoiceSearchButton() { + mVoiceSearchButton = findViewById(R.id.voice_search_button); + final Intent voiceIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); + if (canIntentBeHandled(voiceIntent)) { + mVoiceSearchButton.setVisibility(View.VISIBLE); + mVoiceSearchButton.setOnClickListener(this); + } else { + mVoiceSearchButton.setVisibility(View.GONE); + } } final AnimatorListener mHideListener = new AnimatorListenerAdapter() { @@ -949,4 +970,11 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O intent.putExtra(Intents.Insert.NAME, text); return intent; } + + private boolean canIntentBeHandled(Intent intent) { + final PackageManager packageManager = getPackageManager(); + final List<ResolveInfo> resolveInfo = packageManager.queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY); + return resolveInfo != null && resolveInfo.size() > 0; + } } |