Add usage stats for mushroom.

Note that usage stats is never be enabled in OSS build.
Hence no behavior change should occur.

BUG=none
TEST=unittest
diff --git a/src/android/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImpl.java b/src/android/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImpl.java
index 4e21705..e5fd685 100644
--- a/src/android/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImpl.java
+++ b/src/android/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImpl.java
@@ -44,10 +44,13 @@
  */
 class MozcMenuDialogListenerImpl implements MenuDialogListener {
   private final InputMethodService inputMethodService;
+  private final ViewEventListener eventListener;
   private boolean showInputMethodPicker = false;
 
-  MozcMenuDialogListenerImpl(InputMethodService inputMethodService) {
+  MozcMenuDialogListenerImpl(
+    InputMethodService inputMethodService, ViewEventListener eventListener) {
     this.inputMethodService = Preconditions.checkNotNull(inputMethodService);
+    this.eventListener = Preconditions.checkNotNull(eventListener);
   }
 
   @Override
@@ -96,11 +99,11 @@
       inputConnection.setComposingText("", MozcUtil.CURSOR_POSITION_TAIL);
     }
 
+    eventListener.onShowMushroomSelectionDialog();
+
     // Launch the activity.
     Intent intent = MushroomUtil.createMushroomSelectionActivityLaunchingIntent(
         context, inputMethodService.getCurrentInputEditorInfo().fieldId, composingText);
     context.startActivity(intent);
-
-    // TODO(hidehiko): Do we need to logging?
   }
 }
diff --git a/src/android/src/com/google/android/inputmethod/japanese/MozcService.java b/src/android/src/com/google/android/inputmethod/japanese/MozcService.java
index b1e7353..fac2b70 100644
--- a/src/android/src/com/google/android/inputmethod/japanese/MozcService.java
+++ b/src/android/src/com/google/android/inputmethod/japanese/MozcService.java
@@ -383,6 +383,11 @@
           .putString(key, layoutAdjustment.toString())
           .apply();
     }
+
+    @Override
+    public void onShowMushroomSelectionDialog() {
+      sessionExecutor.sendUsageStatsEvent(UsageStatsEvent.MUSHROOM_SELECTION_DIALOG_OPEN_EVENT);
+    }
   }
 
   /**
@@ -754,7 +759,7 @@
               eventListener,
               symbolHistoryStorage,
               imeSwitcher,
-              new MozcMenuDialogListenerImpl(this));
+              new MozcMenuDialogListenerImpl(this, eventListener));
     }
 
     // Setup FeedbackManager.
diff --git a/src/android/src/com/google/android/inputmethod/japanese/ViewEventDelegator.java b/src/android/src/com/google/android/inputmethod/japanese/ViewEventDelegator.java
index 4114623..d7ee503 100644
--- a/src/android/src/com/google/android/inputmethod/japanese/ViewEventDelegator.java
+++ b/src/android/src/com/google/android/inputmethod/japanese/ViewEventDelegator.java
@@ -154,4 +154,9 @@
       ViewManagerInterface.LayoutAdjustment layoutAdjustment) {
     delegated.onUpdateKeyboardLayoutAdjustment(layoutAdjustment);
   }
+
+  @Override
+  public void onShowMushroomSelectionDialog() {
+    delegated.onShowMushroomSelectionDialog();
+  }
 }
diff --git a/src/android/src/com/google/android/inputmethod/japanese/ViewEventListener.java b/src/android/src/com/google/android/inputmethod/japanese/ViewEventListener.java
index e027d9b..9896cdf 100644
--- a/src/android/src/com/google/android/inputmethod/japanese/ViewEventListener.java
+++ b/src/android/src/com/google/android/inputmethod/japanese/ViewEventListener.java
@@ -147,4 +147,7 @@
    */
   public void onUpdateKeyboardLayoutAdjustment(
       ViewManagerInterface.LayoutAdjustment layoutAdjustment);
+
+  /** Called when the mushroom selection dialog is shown. */
+  public void onShowMushroomSelectionDialog();
 }
diff --git a/src/android/tests/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImplTest.java b/src/android/tests/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImplTest.java
index 0fc74ef..3f47757 100644
--- a/src/android/tests/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImplTest.java
+++ b/src/android/tests/src/com/google/android/inputmethod/japanese/MozcMenuDialogListenerImplTest.java
@@ -59,6 +59,7 @@
 public class MozcMenuDialogListenerImplTest extends InstrumentationTestCaseWithMock {
   private Context context;
   private InputMethodService inputMethodService;
+  private ViewEventListener eventListener;
   private MenuDialogListener listener;
 
   @Override
@@ -66,7 +67,8 @@
     super.setUp();
     context = createMock(MockContext.class);
     inputMethodService = createMock(InputMethodService.class);
-    listener = new MozcMenuDialogListenerImpl(inputMethodService);
+    eventListener = createMock(ViewEventListener.class);
+    listener = new MozcMenuDialogListenerImpl(inputMethodService, eventListener);
   }
 
   @Override
@@ -75,6 +77,7 @@
     MozcUtil.cancelShowInputMethodPicker(context);
 
     listener = null;
+    eventListener = null;
     inputMethodService = null;
     context = null;
     super.tearDown();
@@ -166,6 +169,7 @@
     editorInfo.fieldId = 10;
     expect(inputMethodService.getCurrentInputEditorInfo()).andStubReturn(editorInfo);
     expect(context.getPackageName()).andStubReturn("org.mozc.android.inputmethod.japanese");
+    eventListener.onShowMushroomSelectionDialog();
     Capture<Intent> intentCapture = new Capture<Intent>();
     context.startActivity(capture(intentCapture));
     replayAll();
diff --git a/src/data/usage_stats/stats.def b/src/data/usage_stats/stats.def
index fff1dd3..676e100 100644
--- a/src/data/usage_stats/stats.def
+++ b/src/data/usage_stats/stats.def
@@ -541,6 +541,7 @@
 # The count of the fold/expand keyboard event.
 KeyboardFoldEvent
 KeyboardExpandEvent
+MushroomSelectionDialogOpen
 
 # for windows
 
diff --git a/src/mozc_version_template.txt b/src/mozc_version_template.txt
index 5e3a906..4bcf8bf 100644
--- a/src/mozc_version_template.txt
+++ b/src/mozc_version_template.txt
@@ -1,6 +1,6 @@
 MAJOR=2
 MINOR=17
-BUILD=2089
+BUILD=2090
 REVISION=102
 # NACL_DICTIONARY_VERSION is the target version of the system dictionary to be
 # downloaded by NaCl Mozc.
diff --git a/src/session/commands.proto b/src/session/commands.proto
index 7dddf8f..b44e0f1 100644
--- a/src/session/commands.proto
+++ b/src/session/commands.proto
@@ -481,6 +481,7 @@
     SUBMITTED_CANDIDATE_ROW_GE10 = 19;
     KEYBOARD_FOLD_EVENT = 20;
     KEYBOARD_EXPAND_EVENT = 21;
+    MUSHROOM_SELECTION_DIALOG_OPEN_EVENT = 22;
   }
   optional UsageStatsEvent usage_stats_event = 7;
   optional int32 usage_stats_event_int_value = 9;
diff --git a/src/session/session_usage_observer.cc b/src/session/session_usage_observer.cc
index 525503b..f10465e 100644
--- a/src/session/session_usage_observer.cc
+++ b/src/session/session_usage_observer.cc
@@ -367,8 +367,11 @@
     case commands::SessionCommand::KEYBOARD_EXPAND_EVENT:
       UsageStats::IncrementCount("KeyboardExpandEvent");
       break;
+    case commands::SessionCommand::MUSHROOM_SELECTION_DIALOG_OPEN_EVENT:
+      UsageStats::IncrementCount("MushroomSelectionDialogOpen");
+      break;
     default:
-      LOG(WARNING) << "client side usage stats event has invalid category";
+      LOG(DFATAL) << "client side usage stats event has invalid category";
       break;
   }
 }