Add ImportantNoticeDialog

Change-Id: Icaeb7dddd16362cd4a6384d295f89c7fbabc8b35
diff --git a/java/src/com/android/inputmethod/latin/ImportantNoticeDialog.java b/java/src/com/android/inputmethod/latin/ImportantNoticeDialog.java
new file mode 100644
index 0000000..9870faa
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/ImportantNoticeDialog.java
@@ -0,0 +1,78 @@
+/*
+ * Copyright (C) 2014 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.latin;
+
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.DialogInterface.OnDismissListener;
+import android.content.DialogInterface.OnShowListener;
+
+import com.android.inputmethod.latin.utils.ImportantNoticeUtils;
+
+/**
+ * The dialog box that shows the important notice contents.
+ */
+public final class ImportantNoticeDialog extends AlertDialog implements OnShowListener,
+        OnClickListener, OnDismissListener {
+    public interface ImportantNoticeDialogListener {
+        public void onClickSettingsOfImportantNoticeDialog(final int nextVersion);
+        public void onDismissImportantNoticeDialog(final int nextVersion);
+    }
+
+    private final ImportantNoticeDialogListener mListener;
+    private final int mNextImportantNoticeVersion;
+
+    public ImportantNoticeDialog(
+            final Context context, final ImportantNoticeDialogListener listener) {
+        super(context, THEME_HOLO_DARK);
+        mListener = listener;
+        mNextImportantNoticeVersion = ImportantNoticeUtils.getNextImportantNoticeVersion(context);
+        setMessage(ImportantNoticeUtils.getNextImportantNoticeContents(context));
+        // Create buttons and set listeners.
+        setButton(BUTTON_POSITIVE, context.getString(android.R.string.ok), this);
+        if (shouldHaveSettingsButton()) {
+            setButton(BUTTON_NEGATIVE, context.getString(R.string.go_to_settings), this);
+        }
+        // Set listeners.
+        setOnShowListener(this);
+        setOnDismissListener(this);
+    }
+
+    private boolean shouldHaveSettingsButton() {
+        return mNextImportantNoticeVersion
+                == ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS;
+    }
+
+    @Override
+    public void onShow(final DialogInterface dialog) {
+        ImportantNoticeUtils.updateLastImportantNoticeVersion(getContext());
+    }
+
+    @Override
+    public void onClick(final DialogInterface dialog, final int which) {
+        if (shouldHaveSettingsButton() && which == BUTTON_NEGATIVE) {
+            mListener.onClickSettingsOfImportantNoticeDialog(mNextImportantNoticeVersion);
+        }
+    }
+
+    @Override
+    public void onDismiss(final DialogInterface dialog) {
+        mListener.onDismissImportantNoticeDialog(mNextImportantNoticeVersion);
+    }
+}
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index f2fa329..9ded5a8 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -26,8 +26,6 @@
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.DialogInterface.OnClickListener;
-import android.content.DialogInterface.OnDismissListener;
-import android.content.DialogInterface.OnShowListener;
 import android.content.Intent;
 import android.content.IntentFilter;
 import android.content.SharedPreferences;
@@ -100,7 +98,8 @@
  */
 public class LatinIME extends InputMethodService implements KeyboardActionListener,
         SuggestionStripView.Listener, SuggestionStripViewAccessor,
-        DictionaryFacilitatorForSuggest.DictionaryInitializationListener {
+        DictionaryFacilitatorForSuggest.DictionaryInitializationListener,
+        ImportantNoticeDialog.ImportantNoticeDialogListener {
     private static final String TAG = LatinIME.class.getSimpleName();
     private static final boolean TRACE = false;
     private static boolean DEBUG = false;
@@ -1180,52 +1179,23 @@
         mInputLogic.mSuggest.mDictionaryFacilitator.addWordToUserDictionary(wordToEdit);
     }
 
-    // TODO: Move this method out of {@link LatinIME}.
     // Callback for the {@link SuggestionStripView}, to call when the important notice strip is
     // pressed.
     @Override
     public void showImportantNoticeContents() {
-        final Context context = this;
-        final AlertDialog.Builder builder =
-                new AlertDialog.Builder(context, AlertDialog.THEME_HOLO_DARK);
-        builder.setMessage(ImportantNoticeUtils.getNextImportantNoticeContents(context));
-        builder.setPositiveButton(android.R.string.ok, null /* listener */);
-        final int nextVersion = ImportantNoticeUtils.getNextImportantNoticeVersion(context);
-        final OnClickListener onClickListener = new OnClickListener() {
-            @Override
-            public void onClick(final DialogInterface dialog, final int position) {
-                switch (nextVersion) {
-                case ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS:
-                    if (position == DialogInterface.BUTTON_NEGATIVE) {
-                        launchSettings();
-                    }
-                    break;
-                default:
-                    break;
-                }
-            }
-        };
-        switch (nextVersion) {
-        case ImportantNoticeUtils.VERSION_TO_ENABLE_PERSONALIZED_SUGGESTIONS:
-            builder.setNegativeButton(R.string.go_to_settings, onClickListener);
-            break;
-        default:
-            break;
-        }
-        final AlertDialog importantNoticeDialog = builder.create();
-        importantNoticeDialog.setOnShowListener(new OnShowListener() {
-            @Override
-            public void onShow(final DialogInterface dialog) {
-                ImportantNoticeUtils.updateLastImportantNoticeVersion(context);
-            }
-        });
-        importantNoticeDialog.setOnDismissListener(new OnDismissListener() {
-            @Override
-            public void onDismiss(final DialogInterface dialog) {
-                setNeutralSuggestionStrip();
-            }
-        });
-        showOptionDialog(importantNoticeDialog);
+        showOptionDialog(new ImportantNoticeDialog(this /* context */, this /* listener */));
+    }
+
+    // Implement {@link ImportantNoticeDialog.ImportantNoticeDialogListener}
+    @Override
+    public void onClickSettingsOfImportantNoticeDialog(final int nextVersion) {
+        launchSettings();
+    }
+
+    // Implement {@link ImportantNoticeDialog.ImportantNoticeDialogListener}
+    @Override
+    public void onDismissImportantNoticeDialog(final int nextVersion) {
+        setNeutralSuggestionStrip();
     }
 
     public void displaySettingsDialog() {