Fixed
Status Update
Comments
da...@google.com <da...@google.com>
ap...@google.com <ap...@google.com> #2
Hi Ed, Thank you so much for these suggestions. I've been reviewing them and merging them in. Hopefully it should be live. I've included a thank you note too in the article.
Description
Version used: androidx.leanback:leanback:1.1.0-alpha05
Devices/Android versions reproduced on: API 21+
The Crash happens in onPause in SearchSupportFragment
@Override
public void onPause() {
releaseRecognizer();
mIsPaused = true;
super.onPause();
}
particularly in releaseRecognizer();
Why's this happening?
When onResume is called the speechRecognizer is initialized but there's never a check whether the SpeechRecognizer is available, meaning
Inside the onResume function
@Override
public void onResume() {
super.onResume();
mIsPaused = false;
if (mSpeechRecognitionCallback == null && null == mSpeechRecognizer) {
mSpeechRecognizer = SpeechRecognizer.createSpeechRecognizer(
getContext());
mSearchBar.setSpeechRecognizer(mSpeechRecognizer);
}
if (mPendingStartRecognitionWhenPaused) {
mPendingStartRecognitionWhenPaused = false;
mSearchBar.startRecognition();
} else {
// Ensure search bar state consistency when using external recognizer
mSearchBar.stopRecognition();
}
}
There should be a check whether
if(SpeechRecognizer.isRecognitionAvailable(requireContext())
{
initializeSpeechRecognizer(); // copy the function body in onResume
}
Where does this break?
Especially on Amazon TV devices since they lack this speech recognizer.