Remove KeyboardSwitcher reference from ResearchLogger

Change-Id: I671a83c19977fda358c8e8a730e22ee155f65512
diff --git a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
index f572cb8..1b309a4 100644
--- a/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
+++ b/java/src/com/android/inputmethod/keyboard/MainKeyboardView.java
@@ -528,7 +528,17 @@
         // to properly show the splash screen, which requires that the window token of the
         // KeyboardView be non-null.
         if (ProductionFlag.IS_EXPERIMENTAL) {
-            ResearchLogger.getInstance().mainKeyboardView_onAttachedToWindow();
+            ResearchLogger.getInstance().mainKeyboardView_onAttachedToWindow(this);
+        }
+    }
+
+    @Override
+    protected void onDetachedFromWindow() {
+        super.onDetachedFromWindow();
+        // Notify the research logger that the keyboard view has been detached.  This is needed
+        // to invalidate the reference of {@link MainKeyboardView} to null.
+        if (ProductionFlag.IS_EXPERIMENTAL) {
+            ResearchLogger.getInstance().mainKeyboardView_onDetachedFromWindow();
         }
     }
 
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 8ff86ad..7201042 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -361,7 +361,7 @@
         mPrefs = prefs;
         LatinImeLogger.init(this, prefs);
         if (ProductionFlag.IS_EXPERIMENTAL) {
-            ResearchLogger.getInstance().init(this, prefs, mKeyboardSwitcher);
+            ResearchLogger.getInstance().init(this, prefs);
         }
         InputMethodManagerCompatWrapper.init(this);
         SubtypeSwitcher.init(this);
diff --git a/java/src/com/android/inputmethod/research/ResearchLogger.java b/java/src/com/android/inputmethod/research/ResearchLogger.java
index 2b27350..09a22ef 100644
--- a/java/src/com/android/inputmethod/research/ResearchLogger.java
+++ b/java/src/com/android/inputmethod/research/ResearchLogger.java
@@ -54,7 +54,6 @@
 import com.android.inputmethod.keyboard.Key;
 import com.android.inputmethod.keyboard.Keyboard;
 import com.android.inputmethod.keyboard.KeyboardId;
-import com.android.inputmethod.keyboard.KeyboardSwitcher;
 import com.android.inputmethod.keyboard.KeyboardView;
 import com.android.inputmethod.keyboard.MainKeyboardView;
 import com.android.inputmethod.latin.CollectionUtils;
@@ -138,7 +137,7 @@
     // used to check whether words are not unique
     private Suggest mSuggest;
     private Dictionary mDictionary;
-    private KeyboardSwitcher mKeyboardSwitcher;
+    private MainKeyboardView mMainKeyboardView;
     private InputMethodService mInputMethodService;
     private final Statistics mStatistics;
 
@@ -152,8 +151,7 @@
         return sInstance;
     }
 
-    public void init(final InputMethodService ims, final SharedPreferences prefs,
-            KeyboardSwitcher keyboardSwitcher) {
+    public void init(final InputMethodService ims, final SharedPreferences prefs) {
         assert ims != null;
         if (ims == null) {
             Log.w(TAG, "IMS is null; logging is off");
@@ -185,7 +183,6 @@
         }
         mResearchLogUploader = new ResearchLogUploader(ims, mFilesDir);
         mResearchLogUploader.start();
-        mKeyboardSwitcher = keyboardSwitcher;
         mInputMethodService = ims;
         mPrefs = prefs;
     }
@@ -199,10 +196,15 @@
         }
     }
 
-    public void mainKeyboardView_onAttachedToWindow() {
+    public void mainKeyboardView_onAttachedToWindow(final MainKeyboardView mainKeyboardView) {
+        mMainKeyboardView = mainKeyboardView;
         maybeShowSplashScreen();
     }
 
+    public void mainKeyboardView_onDetachedFromWindow() {
+        mMainKeyboardView = null;
+    }
+
     private boolean hasSeenSplash() {
         return mPrefs.getBoolean(PREF_RESEARCH_HAS_SEEN_SPLASH, false);
     }
@@ -216,7 +218,8 @@
         if (mSplashDialog != null && mSplashDialog.isShowing()) {
             return;
         }
-        final IBinder windowToken = mKeyboardSwitcher.getMainKeyboardView().getWindowToken();
+        final IBinder windowToken = mMainKeyboardView != null
+                ? mMainKeyboardView.getWindowToken() : null;
         if (windowToken == null) {
             return;
         }
@@ -593,14 +596,10 @@
         if (!IS_SHOWING_INDICATOR) {
             return;
         }
-        if (mKeyboardSwitcher == null) {
+        if (mMainKeyboardView == null) {
             return;
         }
-        final KeyboardView mainKeyboardView = mKeyboardSwitcher.getMainKeyboardView();
-        if (mainKeyboardView == null) {
-            return;
-        }
-        mainKeyboardView.invalidateAllKeys();
+        mMainKeyboardView.invalidateAllKeys();
     }