content: /*
   * Copyright (C) 2013 The Android Open Source Project
   *
   * 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 android.speech.tts;
  
  import android.text.TextUtils;
  
  /**
   * Writes data about a given speech synthesis request to the event logs. The data that is logged
   * includes the calling app, length of the utterance, speech rate / pitch, the latency, and overall
   * time taken.
   */
  class EventLogger extends AbstractEventLogger {
      private final SynthesisRequest mRequest;
  
      EventLogger(SynthesisRequest request, int callerUid, int callerPid, String serviceApp) {
          super(callerUid, callerPid, serviceApp);
          mRequest = request;
      }
  
      @Override
      protected void logFailure(int statusCode) {
          // We don't report stopped syntheses because their overall
          // total time spent will be inaccurate (will not correlate with
          // the length of the utterance).
          if (statusCode != TextToSpeech.STOPPED) {
              EventLogTags.writeTtsSpeakFailure(mServiceApp, mCallerUid, mCallerPid,
                      getUtteranceLength(), getLocaleString(),
                      mRequest.getSpeechRate(), mRequest.getPitch());
          }
      }
  
      @Override
      protected void logSuccess(long audioLatency, long engineLatency, long engineTotal) {
          EventLogTags.writeTtsSpeakSuccess(mServiceApp, mCallerUid, mCallerPid,
                  getUtteranceLength(), getLocaleString(),
                  mRequest.getSpeechRate(), mRequest.getPitch(),
                  engineLatency, engineTotal, audioLatency);
      }
  
      /**
       * @return the length of the utterance for the given synthesis, 0
       *          if the utterance was {@code null}.
       */
      private int getUtteranceLength() {
          final String utterance = mRequest.getText();
          return utterance == null ? 0 : utterance.length();
      }
  
      /**
       * Returns a formatted locale string from the synthesis params of the
       * form lang-country-variant.
       */
      private String getLocaleString() {
          StringBuilder sb = new StringBuilder(mRequest.getLanguage());
          if (!TextUtils.isEmpty(mRequest.getCountry())) {
              sb.append('-');
              sb.append(mRequest.getCountry());
  
              if (!TextUtils.isEmpty(mRequest.getVariant())) {
                  sb.append('-');
                  sb.append(mRequest.getVariant());
              }
          }
  
          return sb.toString();
      }
  }
  