Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1606)

Unified Diff: chrome/browser/speech/speech_input_bubble_controller.h

Issue 3352018: Show error messages in speech bubble allowing user to retry as well. (Closed)
Patch Set: Address joth's comments. Created 10 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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

Powered by Google App Engine
This is Rietveld 408576698