Cancel SubtypePreference dialog properly

Bug: 6384416
Bug: 6387408
Change-Id: Ia7b0653a09410b42a55915815c887bf0ad56c856
diff --git a/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java b/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
index 579cc39..8ce91fd 100644
--- a/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
+++ b/java/src/com/android/inputmethod/latin/AdditionalSubtypeSettings.java
@@ -141,7 +141,8 @@
         public KeyboardLayoutSetAdapter getKeyboardLayoutSetAdapter();
     }
 
-    static class SubtypePreference extends DialogPreference {
+    static class SubtypePreference extends DialogPreference
+            implements DialogInterface.OnCancelListener {
         private static final String KEY_PREFIX = "subtype_pref_";
         private static final String KEY_NEW_SUBTYPE = KEY_PREFIX + "new";
 
@@ -205,6 +206,7 @@
         @Override
         protected void onPrepareDialogBuilder(AlertDialog.Builder builder) {
             final Context context = builder.getContext();
+            builder.setCancelable(true).setOnCancelListener(this);
             if (isIncomplete()) {
                 builder.setPositiveButton(R.string.add, this)
                         .setNegativeButton(android.R.string.cancel, this);
@@ -233,6 +235,13 @@
         }
 
         @Override
+        public void onCancel(DialogInterface dialog) {
+            if (isIncomplete()) {
+                mProxy.onRemovePressed(this);
+            }
+        }
+
+        @Override
         public void onClick(DialogInterface dialog, int which) {
             super.onClick(dialog, which);
             switch (which) {