am a5a5ffc0: Fix the over-calling of VoiceSearch Logging

Merge commit 'a5a5ffc0dca3f3342a00d6b377c55e044f7c7ccf' into gingerbread-plus-aosp

* commit 'a5a5ffc0dca3f3342a00d6b377c55e044f7c7ccf':
  Fix the over-calling of VoiceSearch Logging
main
Maryam Garrett 2010-10-12 17:01:04 -07:00 committed by Android Git Automerger
commit 21c3e69645
1 changed files with 64 additions and 6 deletions

View File

@ -17,6 +17,7 @@
package com.android.inputmethod.voice; package com.android.inputmethod.voice;
import com.android.common.speech.LoggingEvents; import com.android.common.speech.LoggingEvents;
import com.android.common.userhappiness.UserHappinessSignals;
import android.content.Context; import android.content.Context;
import android.content.Intent; import android.content.Intent;
@ -40,6 +41,10 @@ public class VoiceInputLogger {
// in VoiceSearch. // in VoiceSearch.
private final Intent mBaseIntent; private final Intent mBaseIntent;
// This flag is used to indicate when there are voice events that
// need to be flushed.
private boolean mHasLoggingInfo = false;
/** /**
* Returns the singleton of the logger. * Returns the singleton of the logger.
* *
@ -67,79 +72,97 @@ public class VoiceInputLogger {
} }
public void flush() { public void flush() {
Intent i = new Intent(mBaseIntent); if (hasLoggingInfo()) {
i.putExtra(LoggingEvents.EXTRA_FLUSH, true); Intent i = new Intent(mBaseIntent);
mContext.sendBroadcast(i); i.putExtra(LoggingEvents.EXTRA_FLUSH, true);
mContext.sendBroadcast(i);
setHasLoggingInfo(false);
}
} }
public void keyboardWarningDialogShown() { public void keyboardWarningDialogShown() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_SHOWN)); LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_SHOWN));
} }
public void keyboardWarningDialogDismissed() { public void keyboardWarningDialogDismissed() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_DISMISSED)); LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_DISMISSED));
} }
public void keyboardWarningDialogOk() { public void keyboardWarningDialogOk() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_OK)); LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_OK));
} }
public void keyboardWarningDialogCancel() { public void keyboardWarningDialogCancel() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_CANCEL)); LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_CANCEL));
} }
public void settingsWarningDialogShown() { public void settingsWarningDialogShown() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_SHOWN)); LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_SHOWN));
} }
public void settingsWarningDialogDismissed() { public void settingsWarningDialogDismissed() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_DISMISSED)); LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_DISMISSED));
} }
public void settingsWarningDialogOk() { public void settingsWarningDialogOk() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_OK)); LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_OK));
} }
public void settingsWarningDialogCancel() { public void settingsWarningDialogCancel() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_CANCEL)); LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_CANCEL));
} }
public void swipeHintDisplayed() { public void swipeHintDisplayed() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.SWIPE_HINT_DISPLAYED)); mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.SWIPE_HINT_DISPLAYED));
} }
public void cancelDuringListening() { public void cancelDuringListening() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_LISTENING)); mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_LISTENING));
} }
public void cancelDuringWorking() { public void cancelDuringWorking() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_WORKING)); mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_WORKING));
} }
public void cancelDuringError() { public void cancelDuringError() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_ERROR)); mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_ERROR));
} }
public void punctuationHintDisplayed() { public void punctuationHintDisplayed() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.PUNCTUATION_HINT_DISPLAYED)); LoggingEvents.VoiceIme.PUNCTUATION_HINT_DISPLAYED));
} }
public void error(int code) { public void error(int code) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.ERROR); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.ERROR);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_ERROR_CODE, code); i.putExtra(LoggingEvents.VoiceIme.EXTRA_ERROR_CODE, code);
mContext.sendBroadcast(i); mContext.sendBroadcast(i);
} }
public void start(String locale, boolean swipe) { public void start(String locale, boolean swipe) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.START); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.START);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_LOCALE, locale); i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_LOCALE, locale);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_SWIPE, swipe); i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_SWIPE, swipe);
@ -148,12 +171,14 @@ public class VoiceInputLogger {
} }
public void voiceInputDelivered(int length) { public void voiceInputDelivered(int length) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length); i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
mContext.sendBroadcast(i); mContext.sendBroadcast(i);
} }
public void textModifiedByTypingInsertion(int length) { public void textModifiedByTypingInsertion(int length) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length); i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE, i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
@ -162,6 +187,7 @@ public class VoiceInputLogger {
} }
public void textModifiedByTypingInsertionPunctuation(int length) { public void textModifiedByTypingInsertionPunctuation(int length) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length); i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE, i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
@ -170,6 +196,7 @@ public class VoiceInputLogger {
} }
public void textModifiedByTypingDeletion(int length) { public void textModifiedByTypingDeletion(int length) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length); i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE, i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
@ -179,6 +206,7 @@ public class VoiceInputLogger {
} }
public void textModifiedByChooseSuggestion(int length) { public void textModifiedByChooseSuggestion(int length) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length); i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_LENGTH, length);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE, i.putExtra(LoggingEvents.VoiceIme.EXTRA_TEXT_MODIFIED_TYPE,
@ -187,22 +215,52 @@ public class VoiceInputLogger {
} }
public void nBestChoose(int index) { public void nBestChoose(int index) {
setHasLoggingInfo(true);
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.N_BEST_CHOOSE); Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.N_BEST_CHOOSE);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index); i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index);
mContext.sendBroadcast(i); mContext.sendBroadcast(i);
} }
public void inputEnded() { public void inputEnded() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.INPUT_ENDED)); mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.INPUT_ENDED));
} }
public void voiceInputSettingEnabled() { public void voiceInputSettingEnabled() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_ENABLED)); LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_ENABLED));
} }
public void voiceInputSettingDisabled() { public void voiceInputSettingDisabled() {
setHasLoggingInfo(true);
mContext.sendBroadcast(newLoggingBroadcast( mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_DISABLED)); LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_DISABLED));
} }
private void setHasLoggingInfo(boolean hasLoggingInfo) {
mHasLoggingInfo = hasLoggingInfo;
// If applications that call UserHappinessSignals.userAcceptedImeText
// make that call after VoiceInputLogger.flush() calls this method with false, we
// will lose those happiness signals. For example, consider the gmail sequence:
// 1. compose message
// 2. speak message into message field
// 3. type subject into subject field
// 4. press send
// We will NOT get the signal that the user accepted the voice inputted message text
// because when the user tapped on the subject field, the ime's flush will be triggered
// and the hasLoggingInfo will be then set to false. So by the time the user hits send
// we have essentially forgotten about any voice input.
// However the following (more common) use case is properly logged
// 1. compose message
// 2. type subject in subject field
// 3. speak message in message field
// 4. press send
UserHappinessSignals.setHasVoiceLoggingInfo(hasLoggingInfo);
}
private boolean hasLoggingInfo(){
return mHasLoggingInfo;
}
} }