futokb/src/com/android/inputmethod/voice/VoiceInputLogger.java
Mike LeBeau 466741d8a7 Migrate voice features into the open-source LatinIME. This includes
the change to logging to remove any private dependencies and use
broadcast intents to VoiceSearch instead.

I have audited this code and it appears good to go for open-source,
but would appreciate a second pair of eyes.

Still to do after submitting this CL:

* Reintroduce Amith's memory leak fix (37557) which was the only CL
  added to LatinIME since the last merge over to the private copy.
* Make some changes to allow LatinIME to work without voice search
  installed. Currently I believe it will show the mic but fail if
  you press it. We need to base the visibility on the mic on the
  availability of the service.
* Fix this code to use the new Gservices framework, it's still trying
  to use the old one.
2010-01-17 02:42:58 -05:00

175 lines
6.0 KiB
Java

/*
* Copyright (C) 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.android.inputmethod.voice;
import android.content.Context;
import android.content.Intent;
/**
* Provides the logging facility for voice input events. This fires broadcasts back to
* the voice search app which then logs on our behalf.
*
* Note that debug console logging does not occur in this class. If you want to
* see console output of these logging events, there is a boolean switch to turn
* on on the VoiceSearch side.
*/
public class VoiceInputLogger {
private static final String TAG = VoiceInputLogger.class.getSimpleName();
private static VoiceInputLogger sVoiceInputLogger;
private final Context mContext;
// The base intent used to form all broadcast intents to the logger
// in VoiceSearch.
private final Intent mBaseIntent;
/**
* Returns the singleton of the logger.
*
* @param contextHint a hint context used when creating the logger instance.
* Ignored if the singleton instance already exists.
*/
public static synchronized VoiceInputLogger getLogger(Context contextHint) {
if (sVoiceInputLogger == null) {
sVoiceInputLogger = new VoiceInputLogger(contextHint);
}
return sVoiceInputLogger;
}
public VoiceInputLogger(Context context) {
mContext = context;
mBaseIntent = new Intent(LoggingEvents.ACTION_LOG_EVENT);
mBaseIntent.putExtra(LoggingEvents.EXTRA_APP_NAME, LoggingEvents.VoiceIme.APP_NAME);
}
private Intent newLoggingBroadcast(int event) {
Intent i = new Intent(mBaseIntent);
i.putExtra(LoggingEvents.EXTRA_EVENT, event);
return i;
}
public void flush() {
Intent i = new Intent(mBaseIntent);
i.putExtra(LoggingEvents.EXTRA_FLUSH, true);
mContext.sendBroadcast(i);
}
public void keyboardWarningDialogShown() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_SHOWN));
}
public void keyboardWarningDialogDismissed() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_DISMISSED));
}
public void keyboardWarningDialogOk() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_OK));
}
public void keyboardWarningDialogCancel() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.KEYBOARD_WARNING_DIALOG_CANCEL));
}
public void settingsWarningDialogShown() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_SHOWN));
}
public void settingsWarningDialogDismissed() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_DISMISSED));
}
public void settingsWarningDialogOk() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_OK));
}
public void settingsWarningDialogCancel() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.SETTINGS_WARNING_DIALOG_CANCEL));
}
public void swipeHintDisplayed() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.SWIPE_HINT_DISPLAYED));
}
public void cancelDuringListening() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_LISTENING));
}
public void cancelDuringWorking() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_WORKING));
}
public void cancelDuringError() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.CANCEL_DURING_ERROR));
}
public void punctuationHintDisplayed() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.PUNCTUATION_HINT_DISPLAYED));
}
public void error(int code) {
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.ERROR);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_ERROR_CODE, code);
mContext.sendBroadcast(i);
}
public void start(String locale, boolean swipe) {
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.START);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_LOCALE, locale);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_START_SWIPE, swipe);
mContext.sendBroadcast(i);
}
public void voiceInputDelivered() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.VOICE_INPUT_DELIVERED));
}
public void textModified() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.TEXT_MODIFIED));
}
public void nBestChoose(int index) {
Intent i = newLoggingBroadcast(LoggingEvents.VoiceIme.N_BEST_CHOOSE);
i.putExtra(LoggingEvents.VoiceIme.EXTRA_N_BEST_CHOOSE_INDEX, index);
mContext.sendBroadcast(i);
}
public void inputEnded() {
mContext.sendBroadcast(newLoggingBroadcast(LoggingEvents.VoiceIme.INPUT_ENDED));
}
public void voiceInputSettingEnabled() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_ENABLED));
}
public void voiceInputSettingDisabled() {
mContext.sendBroadcast(newLoggingBroadcast(
LoggingEvents.VoiceIme.VOICE_INPUT_SETTING_DISABLED));
}
}