Index: chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionAnswer.java |
diff --git a/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionAnswer.java b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionAnswer.java |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7721d0ed36966450d13157007b81ea712e778147 |
--- /dev/null |
+++ b/chrome/android/java/src/org/chromium/chrome/browser/omnibox/SuggestionAnswer.java |
@@ -0,0 +1,142 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+package org.chromium.chrome.browser.omnibox; |
+ |
+import android.util.Log; |
+ |
+import org.json.JSONArray; |
+import org.json.JSONException; |
+import org.json.JSONObject; |
+ |
+import java.util.ArrayList; |
+import java.util.List; |
+ |
+/** |
+ * Structured representation of the JSON payload of a suggestion with an Answer. |
+ */ |
+public class SuggestionAnswer { |
+ private static final String TAG = "SuggestionAnswer"; |
+ |
+ private ImageLine mFirstLine; |
+ private ImageLine mSecondLine; |
+ |
+ private static final String ANSWERS_JSON_LINE = "l"; |
+ private static final String ANSWERS_JSON_IMAGE_LINE = "il"; |
+ private static final String ANSWERS_JSON_TEXT = "t"; |
+ private static final String ANSWERS_JSON_ADDITIONAL_TEXT = "at"; |
+ private static final String ANSWERS_JSON_STATUS_TEXT = "st"; |
+ private static final String ANSWERS_JSON_TEXT_TYPE = "tt"; |
+ |
+ private SuggestionAnswer() { |
+ } |
+ |
+ /** |
+ * Parses the JSON representation of an answer and constructs a SuggestionAnswer from the |
+ * contents. |
+ * |
+ * @param answerContents The JSON representation of an answer. |
+ * @return A SuggestionAnswer with the answer contents or null if the contents are malformed or |
+ * missing required elements. |
+ */ |
+ public static SuggestionAnswer parseAnswerContents(String answerContents) { |
+ SuggestionAnswer answer = new SuggestionAnswer(); |
+ |
+ try { |
+ JSONObject jsonAnswer = new JSONObject(answerContents); |
+ JSONArray jsonLines = jsonAnswer.getJSONArray(ANSWERS_JSON_LINE); |
+ |
+ if (jsonLines.length() < 2) { |
+ Log.e(TAG, "Answer JSON missing expected data: " + jsonAnswer); |
+ return null; |
groby-ooo-7-16
2014/06/12 23:10:49
Might want to handle the "more than two lines" cas
Justin Donnelly
2014/06/17 21:34:03
Done.
|
+ } |
+ |
+ answer.mFirstLine = new SuggestionAnswer.ImageLine( |
+ jsonLines.getJSONObject(0).getJSONObject(ANSWERS_JSON_IMAGE_LINE)); |
+ answer.mSecondLine = new SuggestionAnswer.ImageLine( |
+ jsonLines.getJSONObject(1).getJSONObject(ANSWERS_JSON_IMAGE_LINE)); |
+ } catch (JSONException e) { |
+ Log.e(TAG, "Problem parsing answer JSON: " + e.getMessage()); |
+ return null; |
+ } |
+ |
+ return answer; |
+ } |
+ |
+ public ImageLine getFirstLine() { |
+ return mFirstLine; |
+ } |
+ |
+ public ImageLine getSecondLine() { |
+ return mSecondLine; |
+ } |
+ |
+ /** |
+ * Represents a single line of an answer, contianing any number of typed text fields and an |
groby-ooo-7-16
2014/06/12 23:10:49
"containing"
Justin Donnelly
2014/06/17 21:34:03
Done.
|
+ * optional image. |
+ */ |
+ public static class ImageLine { |
+ private final List<TextField> mTextFields; |
+ private final TextField mAdditionalText; |
+ private final TextField mStatusText; |
+ |
+ ImageLine(JSONObject jsonLine) throws JSONException { |
+ mTextFields = new ArrayList<TextField>(); |
+ |
+ JSONArray textValues = jsonLine.getJSONArray(ANSWERS_JSON_TEXT); |
+ for (int i = 0; i < textValues.length(); i++) { |
+ mTextFields.add(new TextField(textValues.getJSONObject(i))); |
+ } |
+ |
+ mAdditionalText = jsonLine.has(ANSWERS_JSON_ADDITIONAL_TEXT) ? |
+ new TextField(jsonLine.getJSONObject(ANSWERS_JSON_ADDITIONAL_TEXT)) : |
+ null; |
+ |
+ mStatusText = jsonLine.has(ANSWERS_JSON_STATUS_TEXT) ? |
+ new TextField(jsonLine.getJSONObject(ANSWERS_JSON_STATUS_TEXT)) : |
+ null; |
+ } |
+ |
+ public List<TextField> getTextFields() { |
Ted C
2014/06/13 23:54:16
I would javadoc these methods to give an idea of h
Justin Donnelly
2014/06/17 21:34:03
Done.
|
+ return mTextFields; |
+ } |
+ |
+ public boolean hasAdditionalText() { |
+ return mAdditionalText != null; |
+ } |
+ |
+ public TextField getAdditionalText() { |
+ return mAdditionalText; |
+ } |
+ |
+ public boolean hasStatusText() { |
+ return mStatusText != null; |
+ } |
+ |
+ public TextField getStatusText() { |
+ return mStatusText; |
+ } |
+ } |
+ |
+ /** |
+ * Represents a single typed text field of an answer. |
+ */ |
+ public static class TextField { |
+ private final int mType; |
+ private final String mText; |
+ |
+ TextField(JSONObject jsonTextField) throws JSONException { |
+ mType = jsonTextField.getInt(ANSWERS_JSON_TEXT_TYPE); |
+ mText = jsonTextField.getString(ANSWERS_JSON_TEXT); |
+ } |
+ |
+ public int getType() { |
+ return mType; |
+ } |
+ |
+ public String getText() { |
+ return mText; |
+ } |
+ } |
+} |