From c7387a4fd065ad6782b0705e56f9556ac9cf127f Mon Sep 17 00:00:00 2001
From: Jean Chalard <jchalard@google.com>
Date: Thu, 12 Jul 2012 15:21:11 +0900
Subject: [PATCH] Add values for suggestion types (A120)

Also, use it in getBigrams.

Change-Id: Ia0be9b57d1b7effcd8a936e01e957d1195b39c68
---
 .../com/android/inputmethod/latin/SuggestedWords.java |  1 +
 native/jni/src/bigram_dictionary.cpp                  |  7 ++++---
 native/jni/src/bigram_dictionary.h                    |  2 +-
 native/jni/src/dictionary.h                           | 11 +++++++++++
 4 files changed, 17 insertions(+), 4 deletions(-)

diff --git a/java/src/com/android/inputmethod/latin/SuggestedWords.java b/java/src/com/android/inputmethod/latin/SuggestedWords.java
index f079c21123..88fc006df3 100644
--- a/java/src/com/android/inputmethod/latin/SuggestedWords.java
+++ b/java/src/com/android/inputmethod/latin/SuggestedWords.java
@@ -125,6 +125,7 @@ public class SuggestedWords {
         public static final int KIND_HARDCODED = 5; // Hardcoded suggestion, e.g. punctuation
         public static final int KIND_APP_DEFINED = 6; // Suggested by the application
         public static final int KIND_SHORTCUT = 7; // A shortcut
+        public static final int KIND_PREDICTION = 8; // A prediction (== a suggestion with no input)
         public final String mWord;
         public final int mScore;
         public final int mKind; // one of the KIND_* constants above
diff --git a/native/jni/src/bigram_dictionary.cpp b/native/jni/src/bigram_dictionary.cpp
index d468f2aafb..8057e410af 100644
--- a/native/jni/src/bigram_dictionary.cpp
+++ b/native/jni/src/bigram_dictionary.cpp
@@ -38,7 +38,7 @@ BigramDictionary::~BigramDictionary() {
 }
 
 bool BigramDictionary::addWordBigram(unsigned short *word, int length, int frequency,
-        int *bigramFreq, unsigned short *bigramChars) const {
+        int *bigramFreq, unsigned short *bigramChars, int *outputTypes) const {
     word[length] = 0;
     if (DEBUG_DICT) {
 #ifdef FLAG_DBG
@@ -65,6 +65,7 @@ bool BigramDictionary::addWordBigram(unsigned short *word, int length, int frequ
                (char*) bigramFreq + insertAt * sizeof(bigramFreq[0]),
                (MAX_PREDICTIONS - insertAt - 1) * sizeof(bigramFreq[0]));
         bigramFreq[insertAt] = frequency;
+        outputTypes[insertAt] = Dictionary::KIND_PREDICTION;
         memmove((char*) bigramChars + (insertAt + 1) * MAX_WORD_LENGTH * sizeof(short),
                (char*) bigramChars + (insertAt    ) * MAX_WORD_LENGTH * sizeof(short),
                (MAX_PREDICTIONS - insertAt - 1) * sizeof(short) * MAX_WORD_LENGTH);
@@ -134,8 +135,8 @@ int BigramDictionary::getBigrams(const int32_t *prevWord, int prevWordLength, in
             // here, but it can't get too bad.
             const int frequency =
                     BinaryFormat::computeFrequencyForBigram(unigramFreq, bigramFreqTemp);
-            if (addWordBigram(
-                    bigramBuffer, length, frequency, bigramFreq, bigramChars)) {
+            if (addWordBigram(bigramBuffer, length, frequency, bigramFreq, bigramChars,
+                    outputTypes)) {
                 ++bigramCount;
             }
         }
diff --git a/native/jni/src/bigram_dictionary.h b/native/jni/src/bigram_dictionary.h
index e09b249451..0b3577ad8c 100644
--- a/native/jni/src/bigram_dictionary.h
+++ b/native/jni/src/bigram_dictionary.h
@@ -39,7 +39,7 @@ class BigramDictionary {
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(BigramDictionary);
     bool addWordBigram(unsigned short *word, int length, int frequency,
-            int *bigramFreq, unsigned short *bigramChars) const;
+            int *bigramFreq, unsigned short *bigramChars, int *outputTypes) const;
     int getBigramAddress(int *pos, bool advance);
     int getBigramFreq(int *pos);
     void searchForTerminalNode(int addressLookingFor, int frequency);
diff --git a/native/jni/src/dictionary.h b/native/jni/src/dictionary.h
index 1292268b8d..7911403dc1 100644
--- a/native/jni/src/dictionary.h
+++ b/native/jni/src/dictionary.h
@@ -31,6 +31,17 @@ namespace latinime {
 
 class Dictionary {
  public:
+    // Taken from SuggestedWords.java
+    const static int KIND_TYPED = 0; // What user typed
+    const static int KIND_CORRECTION = 1; // Simple correction/suggestion
+    const static int KIND_COMPLETION = 2; // Completion (suggestion with appended chars)
+    const static int KIND_WHITELIST = 3; // Whitelisted word
+    const static int KIND_BLACKLIST = 4; // Blacklisted word
+    const static int KIND_HARDCODED = 5; // Hardcoded suggestion, e.g. punctuation
+    const static int KIND_APP_DEFINED = 6; // Suggested by the application
+    const static int KIND_SHORTCUT = 7; // A shortcut
+    const static int KIND_PREDICTION = 8; // A prediction (== a suggestion with no input)
+
     Dictionary(void *dict, int dictSize, int mmapFd, int dictBufAdjust, int typedLetterMultipler,
             int fullWordMultiplier, int maxWordLength, int maxWords, int maxPredictions);
 
-- 
GitLab