/* * Copyright (C) 2012 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 com.android.inputmethod.research; import android.content.SharedPreferences; import android.util.JsonWriter; import android.view.MotionEvent; import android.view.inputmethod.CompletionInfo; import com.android.inputmethod.keyboard.Key; import com.android.inputmethod.latin.SuggestedWords; import com.android.inputmethod.latin.SuggestedWords.SuggestedWordInfo; import java.io.IOException; import java.util.Map; /** * Routines for mapping classes and variables to JSON representations for logging. */ /* package */ class JsonUtils { private JsonUtils() { // This utility class is not publicly instantiable. } /* package */ static void writeJson(final CompletionInfo[] ci, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginArray(); for (int j = 0; j < ci.length; j++) { jsonWriter.value(ci[j].toString()); } jsonWriter.endArray(); } /* package */ static void writeJson(final SharedPreferences prefs, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginObject(); for (Map.Entry entry : prefs.getAll().entrySet()) { jsonWriter.name(entry.getKey()); final Object innerValue = entry.getValue(); if (innerValue == null) { jsonWriter.nullValue(); } else if (innerValue instanceof Boolean) { jsonWriter.value((Boolean) innerValue); } else if (innerValue instanceof Number) { jsonWriter.value((Number) innerValue); } else { jsonWriter.value(innerValue.toString()); } } jsonWriter.endObject(); } /* package */ static void writeJson(final Key[] keys, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginArray(); for (Key key : keys) { writeJson(key, jsonWriter); } jsonWriter.endArray(); } private static void writeJson(final Key key, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginObject(); jsonWriter.name("code").value(key.mCode); jsonWriter.name("altCode").value(key.getAltCode()); jsonWriter.name("x").value(key.mX); jsonWriter.name("y").value(key.mY); jsonWriter.name("w").value(key.mWidth); jsonWriter.name("h").value(key.mHeight); jsonWriter.endObject(); } /* package */ static void writeJson(final SuggestedWords words, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginObject(); jsonWriter.name("typedWordValid").value(words.mTypedWordValid); jsonWriter.name("willAutoCorrect") .value(words.mWillAutoCorrect); jsonWriter.name("isPunctuationSuggestions") .value(words.mIsPunctuationSuggestions); jsonWriter.name("isObsoleteSuggestions").value(words.mIsObsoleteSuggestions); jsonWriter.name("isPrediction").value(words.mIsPrediction); jsonWriter.name("words"); jsonWriter.beginArray(); final int size = words.size(); for (int j = 0; j < size; j++) { final SuggestedWordInfo wordInfo = words.getInfo(j); jsonWriter.value(wordInfo.toString()); } jsonWriter.endArray(); jsonWriter.endObject(); } /* package */ static void writeJson(final MotionEvent me, final JsonWriter jsonWriter) throws IOException { jsonWriter.beginObject(); jsonWriter.name("pointerIds"); jsonWriter.beginArray(); final int pointerCount = me.getPointerCount(); for (int index = 0; index < pointerCount; index++) { jsonWriter.value(me.getPointerId(index)); } jsonWriter.endArray(); jsonWriter.name("xyt"); jsonWriter.beginArray(); final int historicalSize = me.getHistorySize(); for (int index = 0; index < historicalSize; index++) { jsonWriter.beginObject(); jsonWriter.name("t"); jsonWriter.value(me.getHistoricalEventTime(index)); jsonWriter.name("d"); jsonWriter.beginArray(); for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) { jsonWriter.beginObject(); jsonWriter.name("x"); jsonWriter.value(me.getHistoricalX(pointerIndex, index)); jsonWriter.name("y"); jsonWriter.value(me.getHistoricalY(pointerIndex, index)); jsonWriter.endObject(); } jsonWriter.endArray(); jsonWriter.endObject(); } jsonWriter.beginObject(); jsonWriter.name("t"); jsonWriter.value(me.getEventTime()); jsonWriter.name("d"); jsonWriter.beginArray(); for (int pointerIndex = 0; pointerIndex < pointerCount; pointerIndex++) { jsonWriter.beginObject(); jsonWriter.name("x"); jsonWriter.value(me.getX(pointerIndex)); jsonWriter.name("y"); jsonWriter.value(me.getY(pointerIndex)); jsonWriter.endObject(); } jsonWriter.endArray(); jsonWriter.endObject(); jsonWriter.endArray(); jsonWriter.endObject(); } }