Chromium Code Reviews| Index: chrome/browser/speech/speech_input_bubble_controller.h |
| diff --git a/chrome/browser/speech/speech_input_bubble_controller.h b/chrome/browser/speech/speech_input_bubble_controller.h |
| index 6bd3d6a1e23326890b225ca3ce38d12958ff0ad1..2117b24f40cafe168a356d374917cd63edc19cf8 100644 |
| --- a/chrome/browser/speech/speech_input_bubble_controller.h |
| +++ b/chrome/browser/speech/speech_input_bubble_controller.h |
| @@ -5,6 +5,8 @@ |
| #ifndef CHROME_BROWSER_SPEECH_SPEECH_INPUT_BUBBLE_CONTROLLER_H_ |
| #define CHROME_BROWSER_SPEECH_SPEECH_INPUT_BUBBLE_CONTROLLER_H_ |
| +#include <map> |
| + |
| #include "base/basictypes.h" |
| #include "base/ref_counted.h" |
| #include "base/scoped_ptr.h" |
| @@ -18,8 +20,9 @@ namespace speech_input { |
| // This class handles the speech input popup UI on behalf of SpeechInputManager. |
| // SpeechInputManager invokes methods in the IO thread and this class processes |
| -// those requests in the UI thread. There is only 1 speech input bubble shown to |
| -// the user at a time. User actions on that bubble are reported to the delegate. |
| +// those requests in the UI thread. There could be multiple bubble objects alive |
| +// at the same time but only one of them is visible to the user. User actions on |
| +// that bubble are reported to the delegate. |
| class SpeechInputBubbleController |
| : public base::RefCountedThreadSafe<SpeechInputBubbleController>, |
| public SpeechInputBubbleDelegate { |
| @@ -27,46 +30,64 @@ class SpeechInputBubbleController |
| // All methods of this delegate are called in the IO thread. |
| class Delegate { |
| public: |
| - // Invoked when the user cancels speech recognition by clicking on the |
| - // cancel button or related action in the speech input UI. |
| - virtual void RecognitionCancelled(int caller_id) = 0; |
| + // Invoked when the user clicks on a button in the speech input UI. |
| + virtual void InfoBubbleButtonClicked(int caller_id, |
| + SpeechInputBubble::Button button) = 0; |
| // Invoked when the user clicks outside the speech input info bubble causing |
| // it to close and input focus to change. |
| - virtual void SpeechInputFocusChanged(int caller_id) = 0; |
| + virtual void InfoBubbleFocusChanged(int caller_id) = 0; |
| protected: |
| virtual ~Delegate() {} |
| }; |
| explicit SpeechInputBubbleController(Delegate* delegate); |
| + virtual ~SpeechInputBubbleController(); |
| - // Creates a new speech input bubble and displays it in the UI. |
| + // Creates a new speech input UI bubble. One of the SetXxxx methods below need |
| + // to be called to specify what to display. |
| void CreateBubble(int caller_id, |
| int render_process_id, |
| int render_view_id, |
| const gfx::Rect& element_rect); |
| - // Sets the bubble to show that recording completed and recognition is in |
| - // progress. |
| - void SetBubbleToRecognizingMode(int caller_id); |
| + // Indicates to the user that audio recording is in progress. This also makes |
| + // the bubble visible if not already visible. |
| + void SetBubbleRecordingMode(int caller_id); |
| + |
| + // Indicates to the user that recognition is in progress. If the bubble is |
| + // hidden, |Show| must be called to make it appear on screen. |
| + void SetBubbleRecognizingMode(int caller_id); |
| + |
| + // Displays the given string with the 'Try again' and 'Cancel' buttons. If the |
| + // bubble is hidden, |Show| must be called to make it appear on screen. |
| + void SetBubbleMessage(int caller_id, const string16& text); |
| void CloseBubble(int caller_id); |
| // SpeechInputBubble::Delegate methods. |
| - virtual void RecognitionCancelled(); |
| - virtual void InfoBubbleClosed(); |
| + virtual void InfoBubbleButtonClicked(SpeechInputBubble::Button button); |
| + virtual void InfoBubbleFocusChanged(); |
| private: |
| - void InvokeDelegateRecognitionCancelled(int caller_id); |
| + void InvokeDelegateButtonClicked(int caller_id, |
| + SpeechInputBubble::Button button); |
| void InvokeDelegateFocusChanged(int caller_id); |
| + void SetBubbleRecordingModeOrMessage(int caller_id, const string16& text); |
| // Only accessed in the IO thread. |
| Delegate* delegate_; |
| - // Only accessed in the UI thread. |
| + //*** The following are accessed only in the UI thread. |
| + |
| + // The caller id for currently visible bubble (since only one bubble is |
| + // visible at any time). |
| int current_bubble_caller_id_; |
| - scoped_ptr<SpeechInputBubble> bubble_; |
| + |
| + // Map of caller-ids to bubble objects. The bubbles are weak pointers owned by |
|
joth
2010/09/10 17:08:40
s/weak pointer/raw pointer/ (or just say "The bubb
|
| + // this object and get destroyed by |CloseBubble|. |
| + std::map<int, SpeechInputBubble*> bubbles_; |
| }; |
| // This typedef is to workaround the issue with certain versions of |